Odds337Docs
    Odds337BackGet API key
    Getting started
    • Introduction
    • Authentication
    • Quickstart
    • Tokens & pricing
    • Limits
    • Errors
    • Odds formats
    Reference
    • GET/sports
    • GET/books
    • GET/teams
    • GET/players
    • Logos & headshots
    • GET/events
    • GET/odds
    • GET/scores
    • GET/history
    • GET/clv
    • POST /clv
    • GET/usage
    • GET/_health
    • WebSocket
    • Specs & SDKs
    Racing
    • GET/racing/meetings
    • GET/racing/race
    • GET/racing/history
    • race_id and status
    Concepts
    • event_id
    • selection_key
    • team_id & player_id
    • Open & close prices
    • 337 model price
    • Event links
    • Statuses
    Getting started
    • Introduction
    • Authentication
    • Quickstart
    • Tokens & pricing
    • Limits
    • Errors
    • Odds formats
    Reference
    • GET/sports
    • GET/books
    • GET/teams
    • GET/players
    • Logos & headshots
    • GET/events
    • GET/odds
    • GET/scores
    • GET/history
    • GET/clv
    • POST /clv
    • GET/usage
    • GET/_health
    • WebSocket
    • Specs & SDKs
    Racing
    • GET/racing/meetings
    • GET/racing/race
    • GET/racing/history
    • race_id and status
    Concepts
    • event_id
    • selection_key
    • team_id & player_id
    • Open & close prices
    • 337 model price
    • Event links
    • Statuses

    Getting started

    Errors

    One error shape for every endpoint, and what each status means.

    Error shape

    All errors share one shape:

    {"error": {"code": "invalid_api_key", "message": "missing or invalid X-API-Key"}}

    Status codes

    StatusCodeWhen
    400bad_requestA parameter is malformed
    401invalid_api_keyMissing or unknown key
    402tokens_exhaustedAllowance and top-up used up
    403demo_not_allowedThe demo key asked for /usage
    403plan_requiredThe key's plan does not include this; see below
    404unknown_eventNo such event_id (finished, withdrawn or never listed)
    429rate_limitedOver the per-key rate; see Retry-After
    503unavailableTemporary; retry after Retry-After

    plan_required

    A request outside the key's plan answers 403 plan_required before any token is charged. The demo key is on the Free plan, so it gets this on /history, /clv, /racing/history, the WebSocket, tier=extended, finished events and races outside the next 3.

    {"error": {"code": "plan_required", "message": "price history needs the Business plan (this key is on Free)",
               "plan": "free", "plan_name": "Free", "required_plan": "plus",
               "required_plan_name": "Business", "feature": "history"}}

    plan and required_plan are stable ids (free, core, plus, max); plan_name and required_plan_name are what to show a person (Free, Developer, Business, Enterprise). Do not retry: upgrade the plan or drop the feature.

    Retrying

    • 429 and 503: wait Retry-After seconds, then retry.
    • 404 unknown_event: the event has left the list. Drop it; it is not charged.
    • 400, 401, 403: fix the request; retrying the same one fails the same way.
    PreviousLimitsNextOdds formats

    On this page

    • Error shape
    • Status codes
    • plan_required
    • Retrying