The Rundown V1 Lines API

Moneyline, spread, total, best-line endpoints (V1 legacy)

OpenAPI Specification

therundown-v1-lines-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TheRundown Sports V1 Delta V1 Lines API
  version: 2.0.0
  description: '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. Pass your API key using one of:

    - **Query parameter**: `?key=YOUR_API_KEY`

    - **Header**: `X-Therundown-Key: YOUR_API_KEY`

    ## 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:
- ApiKeyQuery: []
- ApiKeyHeader: []
tags:
- name: V1 Lines
  description: Moneyline, spread, total, best-line endpoints (V1 legacy)
paths:
  /api/v1/lines/best:
    get:
      operationId: v1GetBestLineMulti
      tags:
      - V1 Lines
      summary: Get best lines for multiple events
      parameters:
      - name: event_ids
        in: query
        required: true
        schema:
          type: string
        description: Comma-separated event IDs
      - name: period
        in: query
        schema:
          type: string
          default: period_full_game
          enum:
          - period_full_game
          - period_first_half
          - period_second_half
          - period_first_period
          - period_second_period
          - period_third_period
          - period_fourth_period
          - period_live_full_game
          - period_live_first_half
          - period_live_second_half
          - period_live_first_period
          - period_live_second_period
          - period_live_third_period
          - period_live_fourth_period
      - $ref: '#/components/parameters/AffiliateIDsQuery'
      responses:
        '200':
          description: Best lines keyed by event ID
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/BestLineResponse'
              example:
                09bfa53f8484a63e584398545c035932:
                  event_id: 09bfa53f8484a63e584398545c035932
                  moneyline:
                    moneyline_away: 155
                    moneyline_home: -170
                    best_affiliate_away:
                      affiliate_id: 23
                      affiliate_name: FanDuel
                      updated_at: '2026-02-12T00:10:00Z'
                    best_affiliate_home:
                      affiliate_id: 19
                      affiliate_name: DraftKings
                      updated_at: '2026-02-12T00:10:00Z'
                  spread:
                    point_spread_away: 4.5
                    point_spread_home: -4.5
                    point_spread_away_money: -105
                    point_spread_home_money: -108
                    best_affiliate_away:
                      affiliate_id: 3
                      affiliate_name: Pinnacle
                      updated_at: '2026-02-12T00:08:00Z'
                    best_affiliate_home:
                      affiliate_id: 23
                      affiliate_name: FanDuel
                      updated_at: '2026-02-12T00:10:00Z'
                  total:
                    total_over: 224.5
                    total_under: 224.5
                    total_over_money: -108
                    total_under_money: -105
                    best_affiliate_over:
                      affiliate_id: 19
                      affiliate_name: DraftKings
                      updated_at: '2026-02-12T00:10:00Z'
                    best_affiliate_under:
                      affiliate_id: 3
                      affiliate_name: Pinnacle
                      updated_at: '2026-02-12T00:08:00Z'
  /api/v1/lines/{id}/moneyline:
    get:
      operationId: v1GetMoneylines
      tags:
      - V1 Lines
      summary: Get moneylines for an event
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Event ID
      - name: include
        in: query
        schema:
          type: string
          enum:
          - all_periods
      responses:
        '200':
          description: Moneylines
          content:
            application/json:
              schema:
                type: object
                properties:
                  moneylines:
                    type: array
                    items:
                      $ref: '#/components/schemas/V1Moneyline'
              example:
                moneylines:
                - affiliate_id: 4
                  moneyline_away: -105
                  moneyline_away_delta: 5
                  moneyline_home: -115
                  moneyline_home_delta: -5
                  moneyline_draw: 0.0001
                  date_updated: '2026-02-11T22:00:00Z'
                - affiliate_id: 19
                  moneyline_away: -110
                  moneyline_away_delta: 0
                  moneyline_home: -110
                  moneyline_home_delta: 0
                  moneyline_draw: 0.0001
                  date_updated: '2026-02-11T21:30:00Z'
        '404':
          description: Not found
  /api/v1/lines/{id}/spread:
    get:
      operationId: v1GetSpreads
      tags:
      - V1 Lines
      summary: Get spreads for an event
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: include
        in: query
        schema:
          type: string
          enum:
          - all_periods
      responses:
        '200':
          description: Spreads
          content:
            application/json:
              schema:
                type: object
                properties:
                  spreads:
                    type: array
                    items:
                      $ref: '#/components/schemas/V1Spread'
              example:
                spreads:
                - affiliate_id: 4
                  point_spread_away: 1.5
                  point_spread_away_money: -110
                  point_spread_home: -1.5
                  point_spread_home_money: -110
                  date_updated: '2026-02-11T22:00:00Z'
                - affiliate_id: 19
                  point_spread_away: 2
                  point_spread_away_money: -108
                  point_spread_home: -2
                  point_spread_home_money: -112
                  date_updated: '2026-02-11T21:30:00Z'
        '404':
          description: Not found
  /api/v1/lines/{id}/total:
    get:
      operationId: v1GetTotals
      tags:
      - V1 Lines
      summary: Get totals (over/under) for an event
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: include
        in: query
        schema:
          type: string
          enum:
          - all_periods
      responses:
        '200':
          description: Totals
          content:
            application/json:
              schema:
                type: object
                properties:
                  totals:
                    type: array
                    items:
                      $ref: '#/components/schemas/V1Total'
              example:
                totals:
                - affiliate_id: 4
                  total_over: 235.5
                  total_over_money: -110
                  total_under: 235.5
                  total_under_money: -110
                  date_updated: '2026-02-11T22:00:00Z'
                - affiliate_id: 19
                  total_over: 234.5
                  total_over_money: -108
                  total_under: 234.5
                  total_under_money: -112
                  date_updated: '2026-02-11T21:30:00Z'
        '404':
          description: Not found
  /api/v1/lines/{id}/team_total:
    get:
      operationId: v1GetTeamTotals
      tags:
      - V1 Lines
      summary: Get team totals for an event
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: include
        in: query
        schema:
          type: string
          enum:
          - all_periods
      responses:
        '200':
          description: Team totals
          content:
            application/json:
              schema:
                type: object
              example:
                team_totals:
                - affiliate_id: 4
                  team_total_away_over: 118.5
                  team_total_away_over_money: -110
                  team_total_away_under: 118.5
                  team_total_away_under_money: -110
                  team_total_home_over: 117
                  team_total_home_over_money: -110
                  team_total_home_under: 117
                  team_total_home_under_money: -110
                  date_updated: '2026-02-11T22:00:00Z'
components:
  schemas:
    V1Moneyline:
      type: object
      properties:
        moneyline_away:
          type: number
          description: Away team moneyline. 0.0001 = off the board.
          example: 150
        moneyline_away_delta:
          type: number
        moneyline_home:
          type: number
          example: -180
        moneyline_home_delta:
          type: number
        moneyline_draw:
          type: number
          description: Draw moneyline (soccer, UFC)
        moneyline_draw_delta:
          type: number
        date_updated:
          type: string
          format: date-time
          nullable: true
        format:
          type: string
          example: American
    BestLineResponse:
      type: object
      properties:
        event_id:
          type: string
        moneyline:
          $ref: '#/components/schemas/BestMoneyline'
        spread:
          $ref: '#/components/schemas/BestSpread'
        total:
          $ref: '#/components/schemas/BestTotal'
        periods:
          type: object
          description: Period-specific best lines keyed by period name
          additionalProperties:
            type: object
            properties:
              moneyline:
                $ref: '#/components/schemas/BestMoneyline'
              spread:
                $ref: '#/components/schemas/BestSpread'
              total:
                $ref: '#/components/schemas/BestTotal'
    V1Spread:
      type: object
      properties:
        point_spread_away:
          type: number
          example: 3.5
        point_spread_away_delta:
          type: number
        point_spread_home:
          type: number
          example: -3.5
        point_spread_home_delta:
          type: number
        point_spread_away_money:
          type: number
          example: -110
        point_spread_away_money_delta:
          type: number
        point_spread_home_money:
          type: number
          example: -110
        point_spread_home_money_delta:
          type: number
        date_updated:
          type: string
          format: date-time
          nullable: true
        format:
          type: string
        extended_spreads:
          type: array
          items:
            $ref: '#/components/schemas/V1Spread'
    BestAffiliateInfo:
      type: object
      properties:
        affiliate_id:
          type: integer
        affiliate_name:
          type: string
        updated_at:
          type: string
          format: date-time
    BestSpread:
      type: object
      properties:
        point_spread_home:
          type: number
          nullable: true
        point_spread_away:
          type: number
          nullable: true
        point_spread_home_money:
          type: number
          nullable: true
        point_spread_away_money:
          type: number
          nullable: true
        best_affiliate_home:
          $ref: '#/components/schemas/BestAffiliateInfo'
        best_affiliate_away:
          $ref: '#/components/schemas/BestAffiliateInfo'
    BestMoneyline:
      type: object
      properties:
        moneyline_home:
          type: number
          nullable: true
        moneyline_away:
          type: number
          nullable: true
        moneyline_draw:
          type: number
          nullable: true
        best_affiliate_home:
          $ref: '#/components/schemas/BestAffiliateInfo'
        best_affiliate_away:
          $ref: '#/components/schemas/BestAffiliateInfo'
        best_affiliate_draw:
          $ref: '#/components/schemas/BestAffiliateInfo'
    V1Total:
      type: object
      properties:
        total_over:
          type: number
          example: 47.5
        total_over_delta:
          type: number
        total_under:
          type: number
          example: 47.5
        total_under_delta:
          type: number
        total_over_money:
          type: number
          example: -110
        total_over_money_delta:
          type: number
        total_under_money:
          type: number
          example: -110
        total_under_money_delta:
          type: number
        date_updated:
          type: string
          format: date-time
          nullable: true
        format:
          type: string
        extended_totals:
          type: array
          items:
            $ref: '#/components/schemas/V1Total'
    BestTotal:
      type: object
      properties:
        total_over:
          type: number
          nullable: true
        total_under:
          type: number
          nullable: true
        total_over_money:
          type: number
          nullable: true
        total_under_money:
          type: number
          nullable: true
        best_affiliate_over:
          $ref: '#/components/schemas/BestAffiliateInfo'
        best_affiliate_under:
          $ref: '#/components/schemas/BestAffiliateInfo'
  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), Bovada (2), Pinnacle (3).
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: key
      description: API key as query parameter
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-Therundown-Key
      description: API key as request header