Home · Skills · Development
Prediction market odds
Get prediction market odds and prices from Polymarket and Kalshi
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/research-tools/capabilities/prediction-market-odds#main ~/.claude/skills/prediction-market-oddsFor one project only, change the path to .claude/skills/prediction-market-odds.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text204 lines
Prediction Market Odds
Setup
Read your credentials from ~/.gooseworks/credentials.json:
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
All endpoints use Bearer auth: -H "Authorization: Bearer $GOOSEWORKS_API_KEY"
Get current odds, prices, and market data from prediction markets like Polymarket and Kalshi.
When to Use
- User asks about prediction market odds
- User wants to know probability of an event
- User asks "what are the odds of [event]?"
- Research on market sentiment
- Election or event probability checks
How It Works
Uses the Dome API to aggregate prediction market data from Polymarket and Kalshi.
Usage
Get Polymarket Markets
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/markets","query":{"status":"open"}}'
curl equivalent
curl -X POST "https://api.orth.sh/v1/run" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/markets"}'
Search Markets
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/markets","query":{"search":"election"}}'
Get Kalshi Markets
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/kalshi/markets"}'
Get Polymarket Activity
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/activity"}'
Get Market Orders
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/orders"}'
Get Sports Markets
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/matching-markets/sports"}'
Get Specific Sport Markets
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/matching-markets/sports/nba"}'
Supported Sports
- nba
- nfl
- mlb
- nhl
- soccer
- tennis
Response
Markets Response (/polymarket/markets, /kalshi/markets)
Returns markets array:
- title (string) - Market question (e.g., "Will Trump nationalize elections?")
- market_slug (string) - URL-friendly identifier
- condition_id (string) - Blockchain condition ID
- start_time / end_time (integer) - Unix timestamps
- completed_time (integer|null) - Null if still open
- tags (array) - Category tags (e.g.,
["politics", "us election"]) - volume_1_week / volume_1_month / volume_1_year / volume_total (number) - Trading volume in USD
- side_a / side_b (object) -
idandlabel(typically "Yes"/"No") - winning_side (object|null) - Null if unresolved
- image (string) - Market thumbnail URL
Activity Response (/polymarket/activity)
Returns activities array:
- title (string) - Market title
- market_slug (string) - Market identifier
- side (string) - Trade side:
BUY,SELL, orMERGE - shares (integer) - Raw share amount
- shares_normalized (number) - Human-readable share amount
- price (number) - Trade price (0-1, represents probability)
- timestamp (integer) - Unix timestamp of the trade
- user (string) - Wallet address of the trader
- tx_hash (string) - Blockchain transaction hash
Examples
User: "What are the odds on Polymarket right now?"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/markets","query":{"status":"open"}}'
User: "Show me Kalshi prediction markets"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/kalshi/markets"}'
User: "What's happening in prediction markets?"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/polymarket/activity"}'
User: "Any sports betting markets?"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"dome","path":"/matching-markets/sports"}'
Understanding Odds
- Prices are shown as decimals (0.65 = 65% probability)
- "Yes" price = probability market thinks event will happen
- Higher volume = more confidence/liquidity
- Prices change based on trading activity
Error Handling
- 400 -
searchrequiresstatusparameter (openorclosed) — always include both - 401 - Invalid API key
- 429 - Rate limit — wait and retry
- Empty
marketsarray means no markets match the search term - Activity endpoint returns recent trades globally — no filters required
Tips
- Check multiple markets for the same event
- Volume indicates market confidence
- Recent activity shows sentiment shifts
- Polymarket focuses on politics/world events, Kalshi on finance/weather
| 1 | |
| 2 | name prediction-market-odds |
| 3 | description Get prediction market odds and prices from Polymarket and Kalshi |
| 4 | source orthogonal |
| 5 | |
| 6 | |
| 7 | |
| 8 | # Prediction Market Odds |
| 9 | |
| 10 | ## Setup |
| 11 | |
| 12 | Read your credentials from ~/.gooseworks/credentials.json: |
| 13 | |
| 14 | export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])") |
| 15 | export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))") |
| 16 | |
| 17 | |
| 18 | If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login` |
| 19 | |
| 20 | All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"` |
| 21 | |
| 22 | |
| 23 | Get current odds, prices, and market data from prediction markets like Polymarket and Kalshi. |
| 24 | |
| 25 | ## When to Use |
| 26 | |
| 27 | User asks about prediction market odds |
| 28 | User wants to know probability of an event |
| 29 | User asks "what are the odds of [event]?" |
| 30 | Research on market sentiment |
| 31 | Election or event probability checks |
| 32 | |
| 33 | ## How It Works |
| 34 | |
| 35 | Uses the Dome API to aggregate prediction market data from Polymarket and Kalshi. |
| 36 | |
| 37 | ## Usage |
| 38 | |
| 39 | ### Get Polymarket Markets |
| 40 | |
| 41 | |
| 42 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 43 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 44 | -H "Content-Type: application/json" \ |
| 45 | -d '{"api":"dome","path":"/polymarket/markets","query":{"status":"open"}}' |
| 46 | |
| 47 | |
| 48 | <details> |
| 49 | <summary>curl equivalent</summary> |
| 50 | |
| 51 | |
| 52 | curl -X POST "https://api.orth.sh/v1/run" \ |
| 53 | |
| 54 | -H "Content-Type: application/json" \ |
| 55 | -d '{"api":"dome","path":"/polymarket/markets"}' |
| 56 | |
| 57 | </details> |
| 58 | |
| 59 | ### Search Markets |
| 60 | |
| 61 | |
| 62 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 63 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 64 | -H "Content-Type: application/json" \ |
| 65 | -d '{"api":"dome","path":"/polymarket/markets","query":{"search":"election"}}' |
| 66 | |
| 67 | |
| 68 | ### Get Kalshi Markets |
| 69 | |
| 70 | |
| 71 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 72 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 73 | -H "Content-Type: application/json" \ |
| 74 | -d '{"api":"dome","path":"/kalshi/markets"}' |
| 75 | |
| 76 | |
| 77 | ### Get Polymarket Activity |
| 78 | |
| 79 | |
| 80 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 81 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 82 | -H "Content-Type: application/json" \ |
| 83 | -d '{"api":"dome","path":"/polymarket/activity"}' |
| 84 | |
| 85 | |
| 86 | ### Get Market Orders |
| 87 | |
| 88 | |
| 89 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 90 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 91 | -H "Content-Type: application/json" \ |
| 92 | -d '{"api":"dome","path":"/polymarket/orders"}' |
| 93 | |
| 94 | |
| 95 | ### Get Sports Markets |
| 96 | |
| 97 | |
| 98 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 99 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 100 | -H "Content-Type: application/json" \ |
| 101 | -d '{"api":"dome","path":"/matching-markets/sports"}' |
| 102 | |
| 103 | |
| 104 | ### Get Specific Sport Markets |
| 105 | |
| 106 | |
| 107 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 108 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 109 | -H "Content-Type: application/json" \ |
| 110 | -d '{"api":"dome","path":"/matching-markets/sports/nba"}' |
| 111 | |
| 112 | |
| 113 | ## Supported Sports |
| 114 | |
| 115 | nba |
| 116 | nfl |
| 117 | mlb |
| 118 | nhl |
| 119 | soccer |
| 120 | tennis |
| 121 | |
| 122 | ## Response |
| 123 | |
| 124 | ### Markets Response (`/polymarket/markets`, `/kalshi/markets`) |
| 125 | Returns `markets` array: |
| 126 | **title** (string) - Market question (e.g., "Will Trump nationalize elections?") |
| 127 | **market_slug** (string) - URL-friendly identifier |
| 128 | **condition_id** (string) - Blockchain condition ID |
| 129 | **start_time** / **end_time** (integer) - Unix timestamps |
| 130 | **completed_time** (integer|null) - Null if still open |
| 131 | **tags** (array) - Category tags (e.g., `["politics", "us election"]`) |
| 132 | **volume_1_week** / **volume_1_month** / **volume_1_year** / **volume_total** (number) - Trading volume in USD |
| 133 | **side_a** / **side_b** (object) - `id` and `label` (typically "Yes"/"No") |
| 134 | **winning_side** (object|null) - Null if unresolved |
| 135 | **image** (string) - Market thumbnail URL |
| 136 | |
| 137 | ### Activity Response (`/polymarket/activity`) |
| 138 | Returns `activities` array: |
| 139 | **title** (string) - Market title |
| 140 | **market_slug** (string) - Market identifier |
| 141 | **side** (string) - Trade side: `BUY`, `SELL`, or `MERGE` |
| 142 | **shares** (integer) - Raw share amount |
| 143 | **shares_normalized** (number) - Human-readable share amount |
| 144 | **price** (number) - Trade price (0-1, represents probability) |
| 145 | **timestamp** (integer) - Unix timestamp of the trade |
| 146 | **user** (string) - Wallet address of the trader |
| 147 | **tx_hash** (string) - Blockchain transaction hash |
| 148 | |
| 149 | ## Examples |
| 150 | |
| 151 | **User:** "What are the odds on Polymarket right now?" |
| 152 | |
| 153 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 154 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 155 | -H "Content-Type: application/json" \ |
| 156 | -d '{"api":"dome","path":"/polymarket/markets","query":{"status":"open"}}' |
| 157 | |
| 158 | |
| 159 | **User:** "Show me Kalshi prediction markets" |
| 160 | |
| 161 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 162 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 163 | -H "Content-Type: application/json" \ |
| 164 | -d '{"api":"dome","path":"/kalshi/markets"}' |
| 165 | |
| 166 | |
| 167 | **User:** "What's happening in prediction markets?" |
| 168 | |
| 169 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 170 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 171 | -H "Content-Type: application/json" \ |
| 172 | -d '{"api":"dome","path":"/polymarket/activity"}' |
| 173 | |
| 174 | |
| 175 | **User:** "Any sports betting markets?" |
| 176 | |
| 177 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 178 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 179 | -H "Content-Type: application/json" \ |
| 180 | -d '{"api":"dome","path":"/matching-markets/sports"}' |
| 181 | |
| 182 | |
| 183 | ## Understanding Odds |
| 184 | |
| 185 | Prices are shown as decimals (0.65 = 65% probability) |
| 186 | "Yes" price = probability market thinks event will happen |
| 187 | Higher volume = more confidence/liquidity |
| 188 | Prices change based on trading activity |
| 189 | |
| 190 | ## Error Handling |
| 191 | |
| 192 | **400** - `search` requires `status` parameter (`open` or `closed`) — always include both |
| 193 | **401** - Invalid API key |
| 194 | **429** - Rate limit — wait and retry |
| 195 | Empty `markets` array means no markets match the search term |
| 196 | Activity endpoint returns recent trades globally — no filters required |
| 197 | |
| 198 | ## Tips |
| 199 | |
| 200 | Check multiple markets for the same event |
| 201 | Volume indicates market confidence |
| 202 | Recent activity shows sentiment shifts |
| 203 | Polymarket focuses on politics/world events, Kalshi on finance/weather |
| 204 |