---
title: "Recent trades for one outcome of an event"
method: GET
path: "/api/prediction-markets/event/{source}/{slug}/trades"
tags: ["public-pm-data"]
---

# Recent trades for one outcome of an event

`GET /api/prediction-markets/event/{source}/{slug}/trades`

## Request

- Base URL: `https://api.coinrithm.com`
- URL: `https://api.coinrithm.com/api/prediction-markets/event/{source}/{slug}/trades`
- Auth: none required

Keyless recent-trades tape for the same single outcome
`price-history`/`orderbook` describe. Always returns the most recent
trades up to a fixed server cap of 20; there is no limit/offset
parameter and none is read from the query string. Polymarket and
Kalshi only; other sources answer 200 with `trades: []`, which means
"not served here", not "no trading" — an event with genuinely no
recent trades on a supported source also answers 200 with
`trades: []`.

`price` is a probability 0-1 (a fraction), NOT the 0-100 scale used
by `PublicPmOutcome.probability` elsewhere in this API. `usdValue` is
`size * price`. `who` is a public trader handle only where the venue
exposes one (Polymarket pseudonym); Kalshi trades always report
`who: null`, and an empty Polymarket handle is also served as null.
When a Polymarket market's condition id is unavailable, the tape falls
back to the whole event's trades (every outcome), and a row whose
outcome cannot be identified carries `outcome: null`.

## Path parameters

- `source` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
- `slug` string, required

## Response `200`

Up to 20 most recent trades for one outcome

- PublicPmTradesResponse
  - `source` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
  - `slug` string, required
  - `outcome` PublicPmMicrostructureOutcome, nullable, required: Which outcome this microstructure read describes; null when the event has neither an outcome name nor id.
    - `name` string, nullable
    - `externalMarketId` string, nullable
  - `trades` PublicPmTrade[], required: Most recent trades, fixed server cap of 20; not client-configurable.
    - `side` string, required: Normalized direction: buy/sell (Polymarket) or the venue's own taker-side label, e.g. yes/no (Kalshi). Plain string — new venues may add new labels.
    - `price` number, required: Probability 0-1, a fraction.
    - `size` number, required: Size in shares (Polymarket) or contracts (Kalshi).
    - `usdValue` number, required: Notional USD value, size * price.
    - `outcome` string, nullable, required: Outcome label when the venue reports one on the trade row, else null.
    - `who` string, nullable, required: Public trader handle when the venue exposes one (Polymarket pseudonym); Kalshi trades always report null.
    - `timestamp` string, date-time, required

## Other responses

- `400`: Invalid or missing parameters. On a route with a query allowlist, an undocumented query parameter returns `{"error": "unsupported_query_parameter", "message": "Unsupported query parameter: <key>. Supported: <keys>."}`.
- `404`: Resource not found. A path the API does not serve at all returns `{"error": "not_found", "message": "not_found"}` with `Cache-Control: no-store`.
- `500`: Server error
- `503`: The route already has its cap of venue requests in flight and refused this one at once (`error: "temporarily_busy"`), without queueing it. Sent with `Retry-After: 5` and `Cache-Control: no-store`; retry after `retryAfterSeconds`. Cached responses are never refused this way.

---

[API](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api.md) · [All operations](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/llms.txt) · [OpenAPI document](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/revisions/28fb59f285fe?raw)
