---
title: "Get market price changes since a given ID"
method: GET
path: "/api/v2/markets/delta"
tags: ["V2 Markets"]
---

# Get market price changes since a given ID

`GET /api/v2/markets/delta`

## Request

- Base URL: `https://therundown.io`
- URL: `https://therundown.io/api/v2/markets/delta`
- Auth: API key in header `X-TheRundown-Key`

Returns market line price changes (new, updated, closed) since the specified `last_id`. Use for efficient polling.

**Bootstrap flow:** On known zero-delay access, call `GET /api/v2/sports/{sportID}/events/{date}` with the snapshot scope you need. Use its positive whole-integer `meta.delta_last_id` only when that response explicitly reports `X-Data-Delay-Seconds: 0`, then pass it as `last_id`. If the header is positive, absent, or invalid, keep using scoped snapshots; do not substitute `0`.

**Staleness guard:** Cursors older than 30 minutes are rejected with HTTP 400. After a cursor error, take at most one fresh scoped snapshot and resume only when it meets the same zero-delay and valid-cursor conditions. Do not loop bootstrap requests.

**Core live markets:** Event snapshots expand `market_ids=1,2,3` to include in-play IDs. This delta endpoint filters IDs literally, so poll `1,2,3,41,42,43` to receive full-game core updates before and during play. Returned rows retain their actual market IDs.

## Query parameters

- `last_id` integer, required
- `sport_id` integer
- `affiliate_ids` string
- `market_ids` string
- `event_id` string
- `limit` integer

## Response `200`

Market deltas

- MarketDeltaResponse
  - `meta` object
    - `delta_last_id` union: Positive whole-integer cursor for `/api/v2/markets/delta`. The API may return it as an integer or a numeric string. Use a snapshot value to begin market-delta polling only for known zero-delay access when that snapshot explicitly reports `X-Data-Delay-Seconds: 0`; otherwise use scoped snapshots and never substitute `0`.
      - integer
      - string
    - `count` integer
    - `has_more` boolean: If true, there are more results: poll again immediately with the returned delta_last_id
  - `deltas` MarketDeltaEntry[]
    - `id` integer
    - `event_id` string
    - `sport_id` integer
    - `affiliate_id` integer
    - `market_id` integer
    - `market_name` string
    - `participant_id` integer: Normalized participant ID (team_id, player_id, or result_id)
    - `participant_type` 'TYPE_TEAM' | 'TYPE_PLAYER' | 'TYPE_RESULT'
    - `participant_name` string
    - `line` string: Line value (e.g., "-4.5" for spread, "224.5" for total, "" for moneyline)
    - `price` string: American odds price as a string (e.g., "-110", "150")
    - `previous_price` string, nullable: Previous price before this change
    - `change_type` string: Type of change: `price`, `open`, `close`, `reopen`, or `main_line` (only the main-line flag changed).
    - `is_main_line` boolean: Whether this price is on the primary/main line. Always present, so clients can switch main lines from the delta feed alone.
    - `closed_at` string, date-time: Closing timestamp for this delta entry; omitted if no recorded closure.
    - `updated_at` string, date-time

## Other responses

- `400`: Invalid or stale cursor

## Changes

- **2026-09-08** `8d16611813bf`: 1 breaking, 1 warning
  - response property `meta/delta_last_id` list-of-types was widened by adding types `integer` to media type `application/json` of response `200`
  - for the `query` request parameter `last_id`, the min was set to `1.00`

[Operation history](https://skmtc.dev/therundown/apis/therundown-sports-api/changes/api/v2/markets/delta/get.md)

---

[API](https://skmtc.dev/therundown/apis/therundown-sports-api.md) - [All operations](https://skmtc.dev/therundown/apis/therundown-sports-api/llms.txt) - [OpenAPI document](https://skmtc.dev/therundown/apis/therundown-sports-api/revisions/b1735c57a340?raw)
