Polymarket hub

Polymarket Event API

One event by id or slug, with full market records, outcomes, token ids, fees and rules.

GET /v1/polymarket/events/{eventIdOrSlug}

1 credit Failed requests are free

About this endpoint

GET /v1/polymarket/events/{eventIdOrSlug} accepts a numeric event id or the slug from a Polymarket event URL. On found, data.event carries the event's title, description, status, volume, liquidity, openInterest, tags, series, sports and markets. Each market in data.event.markets is the full record: conditionId, outcomes[] with name, tokenId and price, volume, liquidity, bestBid, bestAsk, spread, fees, tickSize, minOrderSize, resolution and dates.

Pass include=insights,annotations to add data.insights (machine-written market context with text and updatedAt) and data.annotations (dated price-move explanations with sources). Each include is another lookup and can come back null. Without the include, both keys are null.

Polymarket Event API FAQ

Where do I find the event id or slug?

The slug is the last segment of a Polymarket event URL. The id appears as data.events[].id in the events list and as data.eventId on many market rows. Both work in this path.

What does include=insights,annotations add?

Insights add data.insights.text and data.insights.updatedAt. Annotations add data.annotations, newest first, with at, title, summary, outcome, priceBefore, priceAfter, priceChange and a sources array. Each include is an extra lookup, and either can be null when the event has none.

Why are insights or annotations null?

An event without written context returns insights: null. Annotations only exist for events with large price moves, so an empty or null list is normal even on found. The event itself is still returned.

What happens for an unknown event?

data.lookupStatus is not_found and data.event is null. The HTTP status is still 200, so branch on lookupStatus rather than the status code.

What does lookupStatus mean on this route?

found means the object or list was returned. not_found means no matching object exists. HTTP 200 only means the request finished, so branch on data.lookupStatus before storing a row.

How much does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.