Skip to content

Sport events API

The Sport events API provides per-event content for sport events: market names, settlement rules, and statistics. Currently it serves the events of the predictions feed. The feed carries everything you need to offer and accept bets - identity, English display strings, odds, statuses, and timings. Content that is localized or display-enriching is fetched from this API on demand. This API is the source of prediction market names and settlement rules, and it never carries betting state: odds, market statuses, and bet stop signals are delivered only by the feed.

Authorization

The same x.509 client certificate as for the Odds Feed is used. See Authorization.

Conventions

  • Every route is prefixed with /feeds/{feed_id}, where feed_id is 1 for the predictions feed. Sport event ids are unique within a feed: the pair of feed_id and sport_event_id identifies a sport event globally.
  • Localizations are keyed by RFC 5646 locale codes. All locales are returned in one response. The en locale is always present; fall back to en for missing locales.
  • Any display string present in the feed equals its en localization in this API.
  • Timestamps use RFC 3339 (2026-07-31T12:00:00Z). Monetary and decimal values are strings.

Market localizations

To fetch the localizations of all markets of a sport event, send GET /feeds/{feed_id}/sport-events/{sport_event_id}/markets. One call returns the content of every market, so it is also the initial synchronization unit - one request per sport event.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "markets": {
    "701491": {
      "id": "701491",
      "updated_at": "2026-07-29T18:40:11Z",
      "localizations": {
        "en": {
          "locale": "en",
          "template": "$150,000 by March 31",
          "settlement_rules": "This market resolves to Yes if the price of Bitcoin reaches $150,000 on any major exchange before 2026-03-31 23:59 UTC."
        },
        "uk": {
          "locale": "uk",
          "template": "$150,000 до 31 березня",
          "settlement_rules": "Ринок розраховується як Yes, якщо ціна Bitcoin досягне $150,000 на будь-якій великій біржі до 2026-03-31 23:59 UTC."
        }
      }
    }
  }
}

To fetch a single market - for example, right after a new market arrives in the markets_updated feed event - send GET /feeds/{feed_id}/sport-events/{sport_event_id}/markets/{market_id}.

Content is available as soon as the market appears in the feed

Any market delivered by the feed is immediately available in this API, so you can fetch its content right after receiving the feed event. A 404 response with the code market_not_found means the market id is unknown - do not retry.

Statistics

To fetch the traded volume and liquidity of a sport event, send GET /feeds/{feed_id}/sport-events/{sport_event_id}/stats.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "stats": {
    "updated_at": "2026-07-31T12:00:00Z",
    "volume_usd": "12345678.90",
    "markets": {
      "701491": {
        "volume_usd": "2345678.90",
        "liquidity_usd": "150000.00"
      }
    }
  }
}

Statistics are for display only and are never a betting limit. Only restrictions returned by the Managed trading services API are authoritative.

Caching and change detection

Content responses include an ETag header. Revalidate with If-None-Match to receive 304 Not Modified when nothing changed. Market names and settlement rules can be corrected after creation, but corrections are infrequent - revalidating open sport events once every 5 minutes is enough. The updated_at field of each market shows what changed. Statistics responses also include an ETag header and are cached for 30 seconds.

For the initial synchronization of the whole feed, request markets for each sport event with up to 8 parallel requests.

Swagger