Get the Polymarket events with the most trading today
/v1/pm/markets/topCall this to show what Polymarket is trading right now. data.items lists the active, open events with the highest trading volume in the last 24 hours, busiest first. Sona reads them from Polymarket's public Gamma API once a minute and keeps them in memory, so a list can trail Polymarket by about a minute. limit is how many events to return, 1 to 50, 20 by default.
An item has the event_id, slug and title of the event, volume_24h_usd, its all-time volume_total_usd (null when Polymarket sends none) and liquidity_usd, its end_date (null when it has none) and its markets, at most 10 open ones. A market is a question, its label (Polymarket's short name for the market within its event, such as a candidate, empty for the main market of a game), its outcomes (the name of each outcome) and outcome_prices, one price from 0 to 1 per outcome, in the same order as outcomes, with Yes first on a Yes or No market. The dollar amounts here are plain JSON numbers, because this is a live feed and not ledger data, so they are not exact ledger figures.
data.fetched_at says when Sona took the copy. data.stale is true when Polymarket could not be reached on the latest try and this is the last good copy. The history routes of this tag end on 2026-04-24, but this one shows the present, so it has no coverage object and meta.finality is none. data.source is polymarket-gamma. Polymarket's data is not affiliated with Sona.
Other venues. With venue=kalshi, polymarket-us or hyperliquid the answer is the most active markets of that venue from the recorded data, ranked by 24-hour volume (by total volume for polymarket-us, which reports no 24-hour figure). An item is a VenueMarket with market_id, title, status, result, close_time, yes_price, the volume and open interest in dollars (null when the venue reports none, never 0) and as_of. data.kind stays pm_top_markets and data.venue names the venue. Pass a market_id to /v1/pm/markets/{venue}/{id}/history. levr has no market list.
Venues. A venue other than polymarket is read from what Sona's collector recorded, so its answer has no block: meta.finality is none, meta.as_of is empty and no Sona-* header is sent. An answer for Levr Bet would be labelled eip155:143, the chain it runs on, if it ever carried a block. Every venue answer has its own data.coverage object (venue, since, last_ok, mode, wallets, gaps, note) in place of the Polymarket one, and says in note what is not recorded. Answers for a venue are kept for 30 seconds, and a stale one for 5 seconds. An unknown venue, or one the route cannot serve, is pm-api's 400 invalid_query, passed through. While the recorded data cannot be read a venue answer is 503 upstream_unavailable with Retry-After: 1.
Query parameters
| Name | Type | Description |
|---|---|---|
limit | integerDefault 20 | The most events to return, from 1 to 50. Anything else answers 400 |
venue | stringDefault polymarket | Which venue to read: |
Response
The answer, wrapped in the {data, meta, links} envelope.
| Field | Type | Description |
|---|---|---|
| fetched_at | string | When Sona took this copy from Polymarket, in UTC to the second. |
| items | array of objects | The events in order of 24-hour volume, highest first. |
| kind | string | Always |
| source | string | Where the data comes from. |
| stale | boolean |
|
| Field | Type | Description |
|---|---|---|
| as_of | string | null | The time of the newest snapshot among the items, |
| coverage | object | What a recorded venue holds, from when, and how complete it is. It replaces the Polymarket |
| items | array of objects | The markets in order of 24-hour volume, highest first (total volume for |
| kind | string | Always |
| source | string | Where the collector reads the venue's data. |
| venue | string | The venue of the markets. |
Cost
1 credit. The time limit is 5 seconds. Answers are kept for 30 seconds, and a stale one for 5 seconds.
Errors
| Status | Code |
|---|---|
| 400 | invalid_query |
| 429 | rate_limitedcredits_exhausted |
| 500 | internal |
| 503 | upstream_unavailable |
| 504 | deadline_exceeded |
400 invalid_query for a bad limit, a venue that has no market list (levr) or any other query key, 429 rate_limited or credits_exhausted, 503 upstream_unavailable while Sona has not yet read Polymarket once (retry after a few seconds), and 504 deadline_exceeded when the budget runs out.