> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therundown.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get market price changes since a given ID

> 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.




## OpenAPI

````yaml get /api/v2/markets/delta
openapi: 3.1.0
info:
  title: TheRundown Sports API
  version: 2.0.0
  description: >
    **Resolve the event first.** Ambiguous date, team, player, or timezone? The
    agent asks instead of guessing.


    **Every price carries evidence.** Event, market, affiliate ID, line, and the
    price update time. A fetch time is not freshness.


    **Missing stays missing.** No remembered odds, no synthetic prices, no
    filled gaps.


    **IDs come from the API.** Sports, markets, and affiliates are discovered at
    runtime. Retired affiliates stay out.


    Real-time and historical sports betting data, odds, lines, and statistics
    across major North American and international sports leagues.


    ## Authentication

    All endpoints (except `/sports` and `/affiliates`) require authentication.
    Send your API key from a private server-side environment variable in the
    `X-TheRundown-Key` header.

    The query-key security scheme is retained for compatibility with existing
    integrations and deprecated for new integrations; do not put keys in URLs,
    prompts, browser bundles, or public code.

    ## Off-the-Board Sentinel Value

    The value **0.0001** indicates a line is "off the board" — the sportsbook
    has temporarily removed pricing (e.g., pending injury news). This is NOT an
    error. Display as "Off Board" or "N/A" in your UI.


    ## Rate Limiting

    Requests are rate-limited per API key tier. Check response headers for
    current limits.


    ## Data Updates

    - Live odds update in real-time during games

    - Use delta endpoints for efficient polling of changes

    - WebSocket connections available for streaming updates


    ## V1 vs V2

    V2 endpoints use market-based data structures (market_id, participants, line
    prices). V1 endpoints use legacy line-based structures (moneyline, spread,
    total objects). V2 is recommended for new integrations.
  contact:
    name: TheRundown API Support
    url: https://therundown.io
    email: support@therundown.io
  termsOfService: https://therundown.io/terms
servers:
  - url: https://therundown.io
    description: Production
security:
  - ApiKeyHeader: []
tags:
  - name: V2 Sports
    description: Sport listings, dates, and teams (V2)
  - name: V2 Events
    description: Events with market-based odds (V2)
  - name: V2 Markets
    description: Market definitions, odds, deltas, and history (V2)
  - name: V2 Futures
    description: >-
      Futures/outright competition events — championship and tournament-winner
      boards (V2, early access)
  - name: V2 Teams
    description: Team data, players, and stats (V2)
  - name: V2 Players
    description: Player data (V2)
  - name: V2 Stats
    description: Team and player statistics (V2)
  - name: V2 WebSocket
    description: Real-time streaming via WebSocket (V2)
  - name: V2 Reference
    description: Reference data — affiliates, sportsbooks, season types (V2)
  - name: V1 Events
    description: Events with line-based odds (V1 legacy)
  - name: V1 Lines
    description: Moneyline, spread, total, best-line endpoints (V1 legacy)
  - name: V1 Sports
    description: Sport listings, dates, events, schedules (V1 legacy)
  - name: V1 Delta
    description: Delta/change feeds (V1 legacy)
  - name: V1 Reference
    description: Reference data (V1 legacy)
  - name: V1 WebSocket
    description: Real-time streaming via WebSocket (V1 legacy)
externalDocs:
  description: Build with AI guide
  url: https://therundown.io/build-with-ai
paths:
  /api/v2/markets/delta:
    get:
      tags:
        - V2 Markets
      summary: Get market price changes since a given ID
      description: >
        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.
      operationId: v2GetMarketsDelta
      parameters:
        - name: last_id
          in: query
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
          description: >-
            Return changes with ID greater than this value. On known zero-delay
            access, obtain a positive whole-integer initial cursor from
            `meta.delta_last_id` in a scoped v2 events snapshot that explicitly
            reports `X-Data-Delay-Seconds: 0`. Cursors older than 30 minutes are
            rejected; do not use `0` as a fallback.
        - name: sport_id
          in: query
          schema:
            type: integer
          description: Filter by sport ID
        - $ref: '#/components/parameters/AffiliateIDsQuery'
        - name: market_ids
          in: query
          schema:
            type: string
          description: >-
            Literal comma-separated market-ID filter. To poll full-game core
            updates before and during play, include `1,2,3,41,42,43`; event
            snapshots expand `1,2,3` to include the in-play IDs.
        - name: event_id
          in: query
          schema:
            type: string
          description: Filter by event ID
        - name: limit
          in: query
          schema:
            type: integer
            default: 1000
            maximum: 5000
      responses:
        '200':
          description: Market deltas
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketDeltaResponse'
              example:
                meta:
                  delta_last_id: '193500000'
                  count: 2
                  has_more: false
                deltas:
                  - id: 193499998
                    event_id: 09bfa53f8484a63e584398545c035932
                    sport_id: 4
                    affiliate_id: 19
                    market_id: 1
                    market_name: moneyline
                    participant_id: 11
                    participant_type: TYPE_TEAM
                    participant_name: Atlanta Hawks
                    line: ''
                    price: '-112'
                    previous_price: '-110'
                    change_type: price
                    updated_at: '2026-02-12T00:10:43Z'
                    is_main_line: true
                  - id: 193499999
                    event_id: 09bfa53f8484a63e584398545c035932
                    sport_id: 4
                    affiliate_id: 19
                    market_id: 3
                    market_name: totals
                    participant_id: 1001
                    participant_type: TYPE_RESULT
                    participant_name: Over
                    line: '235.5'
                    price: '-110'
                    previous_price: '-108'
                    change_type: price
                    updated_at: '2026-02-12T00:10:43Z'
                    is_main_line: true
        '400':
          description: Invalid or stale cursor
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                stale_cursor:
                  summary: Cursor older than 30 minutes
                  value:
                    error: >-
                      last_id is stale (>30 min), re-bootstrap from events
                      endpoint
                not_found:
                  summary: Cursor ID not found
                  value:
                    error: last_id not found, re-bootstrap from events endpoint
components:
  parameters:
    AffiliateIDsQuery:
      name: affiliate_ids
      in: query
      schema:
        type: string
      description: >
        Comma-separated sportsbook/affiliate IDs to filter. Common values
        include DraftKings (19), FanDuel (23), BetMGM (22), BookMaker (7),
        BetCRIS (9), Pinnacle (3), Polymarket US (31), Circa Sports (32), Bet105
        (33), and Heritage Sports (34). Availability varies by sport and market.

        On V2 event endpoints (`/api/v2/sports/{sportID}/events/{date}`,
        `/api/v2/events/{eventID}`, and their openers/closing siblings),
        `affiliate_ids=0` is a scores-only sentinel: the response keeps events,
        scores, and status and omits markets and price objects. Other endpoints
        that share this parameter treat `affiliate_ids` as a sportsbook filter
        only.
  schemas:
    MarketDeltaResponse:
      type: object
      properties:
        meta:
          type: object
          properties:
            delta_last_id:
              $ref: '#/components/schemas/MarketDeltaCursor'
            count:
              type: integer
            has_more:
              type: boolean
              description: >-
                If true, there are more results — poll again immediately with
                the returned delta_last_id
        deltas:
          type: array
          items:
            $ref: '#/components/schemas/MarketDeltaEntry'
    MarketDeltaCursor:
      description: >-
        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`.
      oneOf:
        - type: integer
          format: int64
          minimum: 1
        - type: string
          pattern: ^[1-9][0-9]*$
    MarketDeltaEntry:
      type: object
      description: A single market line price change entry from the delta feed
      properties:
        id:
          type: integer
          format: int64
        event_id:
          type: string
        sport_id:
          type: integer
        affiliate_id:
          type: integer
        market_id:
          type: integer
          format: int64
        market_name:
          type: string
        participant_id:
          type: integer
          description: Normalized participant ID (team_id, player_id, or result_id)
        participant_type:
          type: string
          enum:
            - TYPE_TEAM
            - TYPE_PLAYER
            - TYPE_RESULT
        participant_name:
          type: string
        line:
          type: string
          description: >-
            Line value (e.g., "-4.5" for spread, "224.5" for total, "" for
            moneyline)
        price:
          type: string
          description: American odds price as a string (e.g., "-110", "150")
        previous_price:
          type: string
          nullable: true
          description: Previous price before this change
        change_type:
          type: string
          description: >-
            Type of change: `price`, `open`, `close`, `reopen`, or `main_line`
            (only the main-line flag changed).
        is_main_line:
          type: boolean
          description: >-
            Whether this price is on the primary/main line. Always present, so
            clients can switch main lines from the delta feed alone.
        closed_at:
          type: string
          format: date-time
          description: >-
            Closing timestamp for this delta entry; omitted if no recorded
            closure.
        updated_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-TheRundown-Key
      description: Recommended API key request header for new integrations

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.