GET /v1/markets
Paginated list of prediction markets from Polymarket and Kalshi. Filter by source, symbol, market_type, or active status.
Minimum tier: Free | Credits: 25 flat per request
GET https://kwery-api.com/v1/markets?api-key=YOUR_KEY
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
api-key | string | Yes | — | Your API key. Passed as a query parameter. |
source | string | No | — | Filter by source platform: polymarket, kalshi. Omit for all prediction market sources. |
symbol | string | No | — | Filter by underlying asset (e.g. BTC, ETH). |
is_active | boolean | No | — | Filter by active status. true returns only tradable markets, false returns only resolved/expired markets. |
limit | integer | No | 50 | Number of results to return. Range: 1–500. |
after | string | No | — | Cursor for pagination. Pass the next_cursor value from a previous response. |
The
offsetparameter is deprecated as of v1.6.0. Useafterwith themeta.next_cursorvalue for pagination.
For single-market lookups, use GET /v1/markets/{identifier}. The {identifier} path parameter accepts any of: market_id (numeric), condition_id (0x-prefixed hex), or event slug (human-readable string).
Response fields
Each object in data contains the following fields:
| Field | Type | Description |
|---|---|---|
market_id | string | Unique market identifier (source-specific). |
source | string | "polymarket" or "kalshi". |
slug | string | URL-friendly market slug. |
question | string | Human-readable market question (e.g. "Will BTC close above $100k on March 31?"). |
symbol | string | Underlying asset symbol. |
market_type | string | Market type (e.g. binary). |
start_date | string | ISO 8601 market open time. |
end_date | string | ISO 8601 market close / expiry time. |
is_active | boolean | Whether the market is currently tradable. |
resolution | string | null | Outcome ("yes", "no", or null if unresolved). |
resolved_at | string | null | ISO 8601 resolution timestamp, or null. |
final_volume | number | null | Total traded volume at resolution, or null. |
final_liquidity | number | null | Liquidity at resolution, or null. |
tokens | object | Source-specific token identifiers. For Polymarket: { clob_token_up, clob_token_down, condition_id }. For Kalshi: { ticker, series_ticker }. |
Response headers
| Header | Description |
|---|---|
X-Credits-Charged | Total credits consumed by this request. |
X-RateLimit-Remaining | Requests remaining in the current rate-limit window. |
X-RateLimit-Reset | ISO 8601 timestamp when the rate-limit window resets. |
Example request
cURL
# List Kalshi prediction markets
curl "https://kwery-api.com/v1/markets?source=kalshi&symbol=BTC&limit=10" \
-H "X-API-Key: YOUR_KEY"
curl "https://kwery-api.com/v1/markets?api-key=YOUR_KEY&source=polymarket&symbol=BTC&is_active=true&limit=2"
Python
import requests
resp = requests.get("https://kwery-api.com/v1/markets", params={
"api-key": "YOUR_KEY",
"source": "polymarket",
"symbol": "BTC",
"is_active": True,
"limit": 2,
})
data = resp.json()
TypeScript
const params = new URLSearchParams({
"api-key": "YOUR_KEY",
source: "polymarket",
symbol: "BTC",
is_active: "true",
limit: "2",
});
const res = await fetch(`https://kwery-api.com/v1/markets?${params}`);
const data = await res.json();
Example response
{
"data": [
{
"market_id": "0xabc123",
"source": "polymarket",
"slug": "btc-above-100k-march-2026",
"question": "Will BTC close above $100,000 on March 31, 2026?",
"symbol": "BTC",
"market_type": "binary",
"start_date": "2026-03-01T00:00:00Z",
"end_date": "2026-03-31T23:59:59Z",
"is_active": true,
"resolution": null,
"resolved_at": null,
"final_volume": null,
"final_liquidity": null,
"tokens": {
"clob_token_up": "0xtoken_up_789",
"clob_token_down": "0xtoken_down_012",
"condition_id": "0xdef456"
}
},
{
"market_id": "0xdef789",
"source": "polymarket",
"slug": "btc-above-110k-march-2026",
"question": "Will BTC close above $110,000 on March 31, 2026?",
"symbol": "BTC",
"market_type": "binary",
"start_date": "2026-03-01T00:00:00Z",
"end_date": "2026-03-31T23:59:59Z",
"is_active": true,
"resolution": null,
"resolved_at": null,
"final_volume": null,
"final_liquidity": null,
"tokens": {
"clob_token_up": "0xtoken_up_abc",
"clob_token_down": "0xtoken_down_def",
"condition_id": "0xghi012"
}
}
],
"meta": {
"symbol": "BTC",
"source": "polymarket",
"interval": null,
"count": 2,
"next_cursor": "eyJpZCI6IjB4ZGVmNzg5In0="
}
}
Source-specific behavior
| Behavior | Polymarket | Kalshi |
|---|---|---|
| Market ID format | Hex condition ID (0x...) | Ticker string (KXBTCD-26MAR14-67500) |
| Price denomination | 0–1 (probability) | 0–100 (cents) |
tokens fields | clob_token_up, clob_token_down, condition_id | ticker, series_ticker |
| Resolution values | "yes" / "no" | "yes" / "no" |
Tier access
| Tier | Access |
|---|---|
| Free | Active markets only (is_active=true enforced). Requests for resolved markets return 403. |
| Pro | All markets (active and resolved). |
| Business | All markets (active and resolved). |
Errors
| Status | Code | Description |
|---|---|---|
400 | invalid_source | The source value is not polymarket or kalshi. |
400 | invalid_symbol | The symbol parameter is not recognized. |
403 | tier_locked | Free-tier request attempted to access resolved markets. |
429 | rate_limit_exceeded | You have exceeded your per-minute or per-hour request quota. |