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

# Get Outrights

> Returns tournaments that have **outright (futures) markets** — long-term bets
like "Who will win the Premier League?" or "Ballon d'Or winner".

These are NOT match-by-match odds. They are season/tournament-level markets
with many selections (e.g., all teams or players).

**Available across all sports**: Soccer, Basketball, Tennis, Ice Hockey, CS2, and more.
Use `/v1/outrights/sports` to discover which sports currently have outrights.

**Live Feed** — data is fetched live from the provider with a 5-minute cache.
Not part of the real-time polling cycle.




## OpenAPI

````yaml GET /v1/outrights
openapi: 3.0.3
info:
  title: FieldFunded Sports API
  description: >
    Real-time sports data API covering **30+ sports & esports** and **1,000+
    betting markets** per event. Built for low-latency live odds, settlement,
    and quantitative analysis.


    ## Official SDK

    The fastest way to integrate is using our official [TypeScript SDK](/sdk).
    It handles authentication, retries, and provides full type safety for all
    1,000+ markets.


    ## Features

    - **Sub-second latency** — Data refreshed every 300ms from live feeds

    - **30+ sports & esports** — Soccer, Basketball, Tennis, Ice Hockey,
    Baseball, American Football, Rugby, Cricket, MMA, Handball, Volleyball, and
    more

    - **Full Esports Coverage** — Counter-Strike, Dota 2, LoL, Valorant, Rainbow
    Six, King of Glory, Call of Duty, Mobile Legends

    - **1,000+ Markets per game** — Match Winner, Over/Under, BTTS, Handicaps,
    Corners, Cards, Player Props, Map Winner, Round Winner, and more (major
    leagues like NBA, NFL, Premier League)

    - **Live Scores** — Real-time scoreboards with period scores, serving
    indicators, and match clocks

    - **Outrights/Futures** — Long-term futures and season-level markets (e.g.,
    League Winner, Top Goalscorer, Most Assists, Tournament MVP)

    - **Settlement Results** (Automatic) — Per-market settlement outcomes
    (won/lost/refund) for ended events, with gradual market-by-market
    resolution. No developer action required — markets begin resolving within
    seconds after game end. Send `stake` to get instant `payout` calculation
    (currency-agnostic). Poll regularly after the game ends to capture all
    market resolutions as they arrive.

    - **Parlay Resolution** (Exclusive) — Submit multi-leg parlays (singles,
    combos) and get combined result + payout calculation with optional `stake`.
    Refund legs are treated as odds 1.00 in the combined calculation.

    - **Featured Games** — Curated top matches from priority leagues (Premier
    League, La Liga, Champions League, Europa League, Bundesliga, Serie A, Ligue
    1, NBA, NFL, MLB, NHL), live-first sorted.

    - **Rich Visual Assets** — PNG team logos (~85% coverage), PNG & SVG team
    logos for featured leagues, SVG league logos, 182 SVG country flags and
    custom SVG sport icons.

    - **Global Coverage** — Premier League, La Liga, NBA, NFL, NHL, MLB,
    Champions League, and thousands of worldwide leagues including 3rd
    divisions, regional cups, ITF tournaments, and youth/female leagues, etc.


    ## Pricing

    Free tier with 10,000 requests/month. Paid plans from $29/mo. All features
    included at every tier. See [full pricing comparison](/compare/pricing).



    ## Learn More

    - [Quick Start Guide](/quickstart) — First API call in 5 minutes

    - [Authentication](/authentication) — API key setup

    - [Rate Limits](/rate-limits) — Per-plan limits and quota monitoring

    - [Supported Sports](/reference/supported-sports) — Full sport key reference

    - [Market Types](/reference/market-types) — 1,000+ market catalogue

    - [Event Statuses](/reference/event-statuses) — Lifecycle and 48-hour rule

    - [Visual Assets](/reference/visual-assets) — Logos, flags, and icons

    - [SDK Reference](/sdk) — TypeScript SDK installation and usage



    ## Sport-Specific Live Data

    Detail endpoints include a `sport_data` object with sport-specific fields:

    - **Tennis/Volleyball**: `home_serving`, `away_serving` (who is serving),
    `home_game_score`/`away_game_score` (values: `0`, `15`, `30`, `40`, `AD`),
    `is_tiebreak`

    - **Ice Hockey**: `home_suspend`/`away_suspend` (players in penalty box =
    power play indicator)

    - **All sports**: Period-by-period scoreboards via `scoreboard` object


    The `scoreboard` object contains:

    - `headers`: Column labels (e.g. `["", "1st", "2nd", "T", "Corner", "YC",
    "RC"]`)

    - `home`/`away`: Stats arrays matching the headers


    **Sport-specific scoreboard detail:**


    | Sport | Scoreboard Columns | Extra Fields |

    |-------|-------------------|--------------|

    | **Football (Soccer)** | 1st Half, 2nd Half, Total, Corners, Yellow Cards
    (YC), Red Cards (RC) | `period` (1H, 2H, HT, ET, PEN) |

    | **Tennis** | Set 1, Set 2, Set 3, Set 4, Set 5, Total |
    `home_game_score`/`away_game_score` (0, 15, 30, 40, AD), `is_tiebreak`,
    `home_serving`/`away_serving` |

    | **Basketball (NBA)** | Q1, Q2, Q3, Q4, OT, Total | `period` (Q1-Q4,
    OT1-OT3) |

    | **Ice Hockey (NHL)** | P1, P2, P3, OT, Total |
    `home_suspend`/`away_suspend` (power play) |

    | **American Football (NFL)** | Q1, Q2, Q3, Q4, OT, Total | `period`,
    `down_and_distance` |

    | **Baseball (MLB)** | Inn 1-9+, Total, Hits, Errors | `period` (Top/Bot
    1-9+), `bases`, `outs` |

    | **Volleyball** | Set 1-5, Points, Total | `home_serving`/`away_serving` |

    | **Table Tennis** | Set 1-7, Total | `home_serving`/`away_serving` |

    | **CS2 / Valorant** | Map 1, Map 2, Map 3, Rounds | `current_map`,
    `map_score`, `round_score` |

    | **Dota 2 / LoL** | Game 1, Game 2, Game 3, Total | `current_game`,
    `game_duration` |

    | **Cricket** | Innings 1, Innings 2, Overs, Wickets | `run_rate`, `target`
    |

    | **Handball** | 1st Half, 2nd Half, Total | `period` |

    | **Rugby** | 1st Half, 2nd Half, Total | `period`, `try_count` |

    | **Darts** | Set/Leg scores | `current_set`, `current_leg` |

    | **Snooker** | Frame scores, Total | `current_frame`, `frame_score` |

    | **MMA / Boxing** | Round 1-12, Total | `current_round` |


    ## Prematch Odds

    - Prematch events include full market odds (up to 1,000+ markets per event
    on major leagues)

    - Odds are refreshed via incremental cursor — 10 prematch games per 300ms
    cycle (~10-30s full pass depending on total game count)

    - Detail data (markets, scoreboards) polled every ~16-20s per event

    - All odds formats supported: `decimal`, `american`, `fractional`


    ### Fixture Horizon

    Prematch fixture depth is **league-dependent** — major leagues (e.g. Premier
    League, NBA) typically appear further ahead than niche or regional events.
    There is no fixed global limit; it reflects when the data provider publishes
    upcoming matches. Use `GET /v1/events?starts_within=2h` or
    `starts_within=1d` to filter by time window. Every event includes a
    `commence_time` (ISO 8601) field for precise scheduling.



    ## Market Suspension & Locked Odds

    Individual selections or entire markets can become temporarily **locked**
    (`is_locked: true`).

    This happens during:

    - **Goal/score events** — markets lock for 30-60 seconds while odds are
    recalculated

    - **Dangerous moments** — e.g. penalty kicks, red cards, break points in
    tennis

    - **End of game** — as a match approaches final minutes, the provider
    progressively locks markets

    - **Half-time / period breaks** — some markets lock between periods


    When `is_locked: true`, the odds value is still present (last known value)
    but the selection

    **cannot be bet on**. Your UI should grey out or disable these selections.


    ### Empty Markets (End of Game)

    Near the end of a live match, the `markets` array may become **empty**
    (`[]`) or return

    with **all outcomes locked**. This is normal — the provider stops accepting
    bets in the

    final minutes. The `markets_count` field will reflect `0` in this case.


    After the game finishes (`status: "ended"`), markets are no longer returned.

    Use `/v1/events/{eventId}/result` or `/v1/settlements` for final settlement
    data.


    ### ended Game Snapshot (Endgame Data)

    When a game finishes (or is cancelled/postponed), the API archives the final
    score permanently and provides settlement data in a rolling window. This
    applies to **all sports & esports** (Soccer, NBA, CS2, LoL, Tennis, etc.).


    **Two tiers of post-game data:**


    | Endpoint | Data | Retention |

    |----------|------|-----------|

    | `/v1/events/{eventId}/result` | Final score, status | **Permanent** —
    archived indefinitely |

    | `/v1/settlements` | Market resolutions (won/lost/refund), team names,
    scores, logos | **Recent** — poll regularly after game end to capture all
    market resolutions as they arrive gradually |

    | `/v1/bets/check` | Bet resolution against settlement data | **Recent**
    (same as settlements) |


    > **Important**: Process settlements promptly by polling every 60 seconds.
    Final scores remain permanently available via `/v1/events/{eventId}/result`.


    ## Team Side Identification

    Market outcomes include an optional `team_side` field:

    - `"home"` — this selection refers to the home team

    - `"away"` — this selection refers to the away team

    - `null` or absent — neutral selection (Draw, Over/Under totals, etc.)


    This is useful for mapping selections to team names without parsing the
    `label` string.

    Available on 1X2, Handicap, Double Chance, and similar two-sided markets.



    ### Prematch → Live Transition

    Detected automatically. When a game kicks off, its status changes from
    `prematch` to `live` and it appears in `/v1/live`. No action needed from the
    developer.



    All IDs, scores, and timestamps in endpoint examples are **synthetic**. Use
    /v1/events to discover real event IDs.
  version: 1.0.0
  termsOfService: https://docs.fieldfunded.com/terms
  contact:
    name: FieldFunded API Support
    url: https://docs.fieldfunded.com
    email: support@fieldfunded.com
servers:
  - url: https://api.fieldfunded.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Sports
    description: Discover available sports and leagues
  - name: Events
    description: Browse and search sports events
  - name: Live
    description: Real-time live event data and scores
  - name: Odds
    description: Current betting odds
  - name: Results
    description: Automatic match settlement and outcomes
  - name: Settlement
    description: >
      Fully automatic bet settlement — markets resolve on their own as soon as a
      game ends. No developer action required.

      Also includes bet-check endpoints: submit your users' selections to verify
      outcomes against automatic results.

      Supports single bets and multi-leg parlays/combos.

      The 48-hour rule applies: postponed/suspended games that don't resume
      within 48h are auto-refunded.


      #### Accurate Settlement Using IDs

      Every market and selection has a unique ID (`market_id` and
      `selection_id`). Use these IDs for bet placement and settlement to
      guarantee 100% accuracy. Market names and labels are also available for
      display purposes.
  - name: Outrights
    description: |
      Season-level winner markets (e.g., League Winner).
      Updated every 3 hours.
  - name: System
    description: API health and status
  - name: Usage Monitoring
    description: >-
      Track your API usage, quota status, and active warnings. Data available
      via the Developer Portal at `/portal`.
paths:
  /v1/outrights:
    get:
      tags:
        - Outrights
      summary: Outright Tournaments — Season-level futures across all sports
      description: >
        Returns tournaments that have **outright (futures) markets** — long-term
        bets

        like "Who will win the Premier League?" or "Ballon d'Or winner".


        These are NOT match-by-match odds. They are season/tournament-level
        markets

        with many selections (e.g., all teams or players).


        **Available across all sports**: Soccer, Basketball, Tennis, Ice Hockey,
        CS2, and more.

        Use `/v1/outrights/sports` to discover which sports currently have
        outrights.


        **Live Feed** — data is fetched live from the provider with a 5-minute
        cache.

        Not part of the real-time polling cycle.
      operationId: getOutrights
      parameters:
        - name: sport_id
          in: query
          description: >-
            Sport ID to filter outrights (default: 124 = Soccer). Use
            /v1/outrights/sports to discover IDs.
          schema:
            type: integer
            default: 124
            example: 124
        - name: country
          in: query
          description: >-
            Filter by country name or country code (e.g. `ENG`, `USA`,
            `England`)
          schema:
            type: string
            example: ENG
      responses:
        '200':
          description: >-
            A list of tournaments that currently have active outright/futures
            betting markets.
          content:
            application/json:
              schema:
                type: object
                properties:
                  outrights:
                    type: array
                    items:
                      type: object
                      properties:
                        tournament_id:
                          type: integer
                        name:
                          type: string
                        sport_id:
                          type: integer
                        country:
                          type: string
                        country_code:
                          type: string
                        outright_count:
                          type: integer
                        category:
                          type: string
                          description: >-
                            Tournament category (e.g. 'International Clubs',
                            'England')
                  total:
                    type: integer
                  sport_id:
                    type: integer
              example:
                outrights:
                  - tournament_id: 95
                    name: Premier League
                    sport_id: 124
                    country: England
                    country_code: ENG
                    outright_count: 1
                    category: England
                  - tournament_id: 74
                    name: UEFA Champions League
                    sport_id: 124
                    country: International Clubs
                    country_code: INT
                    outright_count: 1
                    category: International Clubs
                total: 48
                sport_id: 124
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  responses:
    RateLimited:
      description: Rate limit exceeded
      headers:
        Retry-After:
          description: Seconds until rate limit resets
          schema:
            type: integer
        X-RateLimit-Limit:
          schema:
            type: integer
        X-RateLimit-Remaining:
          schema:
            type: integer
        X-RateLimit-Reset:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: rate_limited
            message: Rate limit exceeded. Upgrade your plan for higher limits.
    InternalServerError:
      description: |
        Internal server error. Something went wrong on our end.
        Usually transient — please retry after a short delay.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: server_error
            message: Internal server error
    ServiceUnavailable:
      description: >
        Backend data store temporarily unavailable. The `Retry-After` header
        indicates

        how many seconds to wait before retrying. The `component` field
        identifies

        which service is degraded (`realtime_data` for live odds/scores,
        `historical_data` for settlements).
      headers:
        Retry-After:
          description: Recommended wait time in seconds before retrying
          schema:
            type: integer
            example: 30
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: service_unavailable
              message:
                type: string
                example: Data store temporarily unavailable
              component:
                type: string
                enum:
                  - realtime_data
                  - historical_data
                description: Which service is temporarily degraded
                example: realtime_data
          example:
            error: service_unavailable
            message: Data store temporarily unavailable
            component: realtime_data
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error type
        message:
          type: string
          description: Human-readable error message
      example:
        error: not_found
        message: Event not found. For historical results, use /v1/settlements.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your FieldFunded API Key

````