Get recent large Polymarket trades
/v1/pm/trades/largeCall this to show the big bets on Polymarket as they happen. data.items lists recent trades worth at least $10,000, newest first. Sona reads them from Polymarket's public Data API once a minute and keeps the newest 200 in memory, so a list can trail Polymarket by about a minute. limit is how many trades to return, 1 to 100, 50 by default. min_usd raises the floor above the venue's own, up to 1000000000000. It filters the kept trades, so a high floor can give a short or empty list.
An item has the transaction hash tx (several fills can share one), the time of the trade, the trading wallet (Polymarket's proxy wallet), the market question, the side (BUY or SELL) and outcome, and size in shares, price per share from 0 to 1 and usd, the size times the price rounded to cents. The amounts here are plain JSON numbers, because this is a live feed and not ledger data.
data.fetched_at and data.stale work as on /v1/pm/markets/top. This route shows the present, so it has no coverage object and meta.finality is none. data.source is polymarket-data.
Other venues. With venue=kalshi or hyperliquid the answer is the newest recorded trades of at least min_usd, and an item is a VenueTrade (id, time, market_id, question, side, wallet, size, yes_price, usd). Kalshi keeps only the prints that cost the taker at least $10,000 and publishes no trader ids, so wallet is null. Hyperliquid fills are smaller, so its tape starts at $1,000. The server enforces each venue's floor, and a venue answer carries data.min_usd, the floor it applied (the one you asked for, or the venue's default). levr and polymarket-us have no trade tape and answer 400 invalid_query.
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 50 | The most trades to return, from 1 to 100. Anything else answers 400 |
min_usd | numberDefault 10000 | The smallest trade to return, in US dollars, as a plain decimal number from 1000 to 1000000000000, with no exponent. Each venue has its own floor and its own default: 10000 on Polymarket and Kalshi, and 1000 on Hyperliquid. A value below the venue's floor 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 trades, newest first. |
| kind | string | Always |
| source | string | Where the data comes from. |
| stale | boolean |
|
| Field | Type | Description |
|---|---|---|
| coverage | object | What a recorded venue holds, from when, and how complete it is. It replaces the Polymarket |
| items | array of objects | The trades, newest first. It may be empty. |
| kind | string | Always |
| min_usd | number | The floor of this list in dollars: the one asked for, or the venue's default (10000 on Kalshi, 1000 on Hyperliquid). |
| source | string | Where the collector reads the venue's data. |
| venue | string | The venue of the trades. |
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 min_usd below the venue's floor (10000 on Polymarket and Kalshi, 1000 on Hyperliquid) or not a plain number, a venue that has no trade tape 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.