Base URL
All API requests are made to:GET /polymarket/market/data,GET /polymarket/market/data/range,GET /polymarket/market/orderbook-summary,GET /polymarket/market/list, andGET /polymarket/market/date-rangefor PolymarketGET /kalshi/market/data,GET /kalshi/market/data/range,GET /kalshi/market/orderbook-summary,GET /kalshi/market/list, andGET /kalshi/market/date-rangefor KalshiGET /lookup/slugfor resolving a Polymarket slug into one or more condition IDs/keys,/subscriptions,/usage,/user/{user_id}/requests/*, and/stats/*for key management, billing, and usage analyticsGET /healthfor an unauthenticated service health checkGET /monitoring/statusfor infrastructure status used by the public status page
GET /market/dataas an alias ofGET /polymarket/market/dataGET /market/data/rangeas an alias ofGET /polymarket/market/data/rangeGET /market/orderbook-summaryas an alias ofGET /polymarket/market/orderbook-summaryGET /polymarket/lookup/slugas an alias ofGET /lookup/slug
Preferred clients
Use the official SDK or CLI for most integrations. They handle base URL conventions, auth headers, and common parameter patterns for you.Authentication
Historical market endpoints require API key authentication via a Bearer token in theAuthorization header:
GET /healthdoes not require authenticationGET /lookup/slugdoes not require authentication- API key management endpoints under
/keysdo not use Bearer auth; they use the documenteduser_idandkey_idparameters instead
Request format
- All requests use standard query parameters or path parameters.
- All responses return JSON.
- Dates are formatted as
YYYY-MM-DDand interpreted in UTC. - Polymarket
condition_idvalues are accepted with or without the0xprefix and are normalized in responses. - Kalshi
tickerandprefixvalues are normalized to uppercase. - Range endpoints accept Unix seconds or milliseconds and use inclusive
start_timestampandend_timestampbounds. - Date-scoped endpoints use offset pagination and return
offset,limit,total_count, andhas_more. - Range endpoints use cursor pagination and return
limit,has_more, andnext_cursor. - Polymarket orderbook summaries require
asset_idbecause each condition can contain multiple outcome token books. - You can find Polymarket
asset_idvalues by reading a small raw data page and collecting the uniqueasset_idfields. - Orderbook summary buckets include close values plus OHLC candles for
best_bid,best_ask,mid_price, andspread. - Orderbook summary endpoints accept either a UTC
dateor inclusivestart_timestamp/end_timestampbounds. Choose the bucket size withresolution.
Availability and coverage
Storage coverage is market-specific. The most reliable way to discover availability is to call the corresponding date-range endpoint first.- Orderbook data exists for a subset of markets from 2025-09-01 on Polymarket and 2026-02-17 for Kalshi, but coverage is not continuous.
- Broad Polymarket crypto-related market coverage begins on 2026-02-04. Broad Kalshi crypto-related market coverage begins on 2026-02-25.
- Broad all-market capture begins on 2026-04-02 for Polymarket and 2026-03-31 for Kalshi, with known Kalshi parser and May 2026 storage-gap exceptions.
GET /polymarket/market/date-rangetells you which Polymarket UTC dates are present for a condition ID.GET /kalshi/market/date-rangetells you which Kalshi UTC dates are present for a ticker.GET /polymarket/market/datacurrently rejects dates earlier than2026-02-08, even if older backfilled Polymarket dates exist in storage for some markets.- See Data Quality for the Kalshi March 31-April 24 parser issue, the Kalshi May 4-May 11 storage ingestion gap, and the Polymarket April gap notes.
Rate limits
Billable historical market endpoints may return429 Too Many Requests when a plan usage limit is reached. See Error Responses for the actual payload shape.