Markets: venue listings
The raw venue listings TPM tracks: a Kalshi event ticker or a Polymarket event. Use them to mirror one venue's catalog or to map venue ids to TPM events. For the cross-venue view, use events.
When to use it
- Mirror the Kalshi or Polymarket catalog with TPM's normalised prices.
- Find which TPM event a venue listing belongs to (
event_slug). - Read a listing's settlement
rulesbefore comparing it with another venue.
/api/public/v1/marketsAPI key requiredList venue markets
Largest by volume first. Add include=outcomes to get each market's outcomes and quotes.
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
| venue | query | "kalshi" | "polymarket" | No | — | Only this venue. |
| q | query | string | No | — | Search titles and venue ids. |
| event | query | string | No | — | Only markets grouped under this TPM event slug. |
| status | query | "active" | "all" | No | active | Use all to include closed listings. |
| include | query | "outcomes" | No | — | outcomes adds each market's outcomes and quotes. |
| limit | query | integer | No | 50 | Rows per page, 1 to 200. |
| cursor | query | string | No | — | The pagination.next_cursor from the previous page. Keep the other filters the same. See pagination. |
Request
curl -s 'https://api.thepredictionmarkets.com/api/public/v1/markets?venue=kalshi&q=nominee&limit=1' \
-H 'X-API-Key: tpm_demo_key_authorized_2026'Response
Example 200 response. Values are illustrative and change over time.
{
"data": [
{
"venue": "kalshi",
"market_id": "KXPRESNOMD-28",
"title": "Democratic Presidential Nominee 2028",
"url": "https://kalshi.com/markets/kxpresnomd",
"status": "active",
"event_slug": "democratic-presidential-nominee-2028",
"volume": 244696381.96,
"liquidity": null,
"end_date": "2028-11-07T00:00:00Z",
"last_seen_at": "2026-10-21T08:24:28Z",
"outcome_count": 41,
"outcomes": null,
"rules": null
}
],
"pagination": {
"limit": 1,
"has_more": true,
"next_cursor": "eyJvIjoxfQ"
}
}Response fields
| Field | Type | Description |
|---|---|---|
| venue | "kalshi" | "polymarket" | Which exchange lists it. |
| market_id | string | The venue listing: a Kalshi event ticker (KXPRESNOMD-28) or a Polymarket event slug. |
| title | string | null | Title as the venue shows it. |
| url | string | null | Link to the listing on the venue. |
| status | string | null | Venue status, e.g. active. |
| event_slug | string | null | The TPM event this listing is grouped under. Use it with /events/{slug}. |
| volume | number | null | Total traded volume in US dollars. |
| liquidity | number | null | Order-book liquidity in US dollars, when the venue reports it. |
| end_date | string | null | When trading is scheduled to close (UTC). |
| last_seen_at | string | null | Last time TPM polled this listing from the venue. |
| outcome_count | integer | Number of outcomes (contracts) in the listing. |
| outcomes | Outcome[] | null | Included on single-market requests and with include=outcomes. Same shape as in event detail. |
| rules | string | null | Settlement rules text, on single-market requests. |
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | validation.invalid_parameter | A filter has a bad value, e.g. venue=robinhood. |
| 400 | validation.invalid_cursor | The cursor is malformed or was made with other filters. |
| 401 | auth.missing_key | No X-API-Key header was sent. |
| 401 | auth.invalid_key | The key is wrong or was revoked. |
| 429 | rate_limit.per_second | Too many requests this second. Wait for Retry-After. |
{
"error": {
"code": "validation.invalid_parameter",
"message": "venue: Input should be 'polymarket' or 'kalshi'",
"request_id": "0f8969a6-0968-4d7c-9cbb-de379e8c19c4"
}
}All codes are listed on the errors page.
Try it
Runs a live request from your browser. Pre-filled with the shared demo key (5 requests per second for everyone); paste your own key for steadier results.
Press Send to run this request./api/public/v1/markets/{venue}/{market_id}API key requiredGet one venue market
One listing with every outcome's quote and the settlement rules text. The sample is trimmed to one outcome.
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
| venue | path | "kalshi" | "polymarket" | Yes | — | The venue. |
| market_id | path | string | Yes | — | Kalshi event ticker or Polymarket event slug. |
Request
curl -s 'https://api.thepredictionmarkets.com/api/public/v1/markets/kalshi/KXPRESNOMD-28' \
-H 'X-API-Key: tpm_demo_key_authorized_2026'Response
Example 200 response. Values are illustrative and change over time.
{
"data": {
"venue": "kalshi",
"market_id": "KXPRESNOMD-28",
"title": "Democratic Presidential Nominee 2028",
"url": "https://kalshi.com/markets/kxpresnomd",
"status": "active",
"event_slug": "democratic-presidential-nominee-2028",
"volume": 244696381.96,
"liquidity": null,
"end_date": "2028-11-07T00:00:00Z",
"last_seen_at": "2026-10-21T08:24:28Z",
"outcome_count": 41,
"outcomes": [
{
"id": "5c66f06e-dcac-44fa-93af-ba710d2a9ed2",
"title": "Gavin Newsom",
"contract_id": "KXPRESNOMD-28-GN",
"status": "active",
"volume": 11138438.36,
"probability_change_24h": null,
"quote": {
"probability": 0.16,
"best_bid": 0.16,
"best_ask": 0.17,
"spread": 0.01,
"source": "live",
"observed_at": "2026-10-21T08:38:56Z",
"age_seconds": 3,
"freshness": "live"
},
"stream": {
"provider": "kalshi",
"market_id": "KXPRESNOMD-28-GN",
"outcome_id": "yes"
},
"match": {
"group_id": "b5f0c3d2-6a1e-5f7b-9c2d-1e8a4f3b7d60",
"key": "candidate:gnew",
"state": "AUTO_MATCHED",
"contract_compatibility": "unverified"
}
}
],
"rules": "If the named person is the Democratic nominee for President in 2028, the market resolves to Yes."
}
}Errors
| HTTP | Code | When |
|---|---|---|
| 404 | not_found.market | TPM has no market with this id on that venue. |
| 401 | auth.missing_key | No X-API-Key header was sent. |
| 401 | auth.invalid_key | The key is wrong or was revoked. |
| 429 | rate_limit.per_second | Too many requests this second. Wait for Retry-After. |
{
"error": {
"code": "not_found.market",
"message": "No kalshi market with id 'KXNOTREAL'.",
"request_id": "0f8969a6-0968-4d7c-9cbb-de379e8c19c4"
}
}All codes are listed on the errors page.
Try it
Runs a live request from your browser. Pre-filled with the shared demo key (5 requests per second for everyone); paste your own key for steadier results.
Press Send to run this request.Related
Build with TPM
Get your free API key
One key gives you Kalshi and Polymarket events, prices with freshness, price history, cross-venue gaps and the live quotes WebSocket.