Coverage: We index Polymarket crypto and sports markets. Pass
category=crypto or
category=sports to pin a request to one archive, or omit it for the union of both.Endpoints
All discovery routes require
X-API-Key on the hosted API.
Recommended workflow
- Search —
GET /v1/markets?search=bitcoin&limit=50 - Select — note
idorslugfromdata[] - Detail —
GET /v1/markets/{slug}for token ids and resolution state - History — query
/prices,/metrics, or/bookson the same identifier
List response format
metadata.next_cursor is non-null, pass it as the cursor query parameter. See Pagination.
Query parameters
Shared filters
Categories
api.polyorderbooks.com serves two archives behind one API. category is
accepted on every discovery and history route, on /v1/tags, and on
/v1/markets/{id_or_slug}.
Omitting
category on /v1/series, /v1/events, and /v1/markets returns a
union ordered by updated_at; only updated_at is comparable across both
archives. Every row carries a category field, so a mixed page needs no
client-side filtering.
Sorting by start_date or end_date searches the crypto archive only — a
sports query under those sorts returns zero rows rather than an error, which
looks like an empty catalog. Pin a category explicitly if you need a
deterministic sort on sports data:
/v1/tags is the exception to the row shape: it returns a flat array of tag
strings rather than row objects, so tags have no category field. Filter by
category to keep the tag list to one archive, and do not expect a per-tag
category to split a result. Asking for the wrong category on a detail route — a
crypto market slug with category=sports, for example — returns 404, not an
empty list.
Relationship filters
Market identifiers
{id_or_slug} accepts:
- Source market id (e.g.
618831) - URL slug (e.g.
will-btc-hit-100k) - Scoped public id (e.g.
polymarket:market:618831)