Skip to content

Get started

General

Marketing Feed API returns a denormalized sport line feed (sport → category → tournament → event → market → outcome) for marketing and SEO consumers, with localized names and cursor-based pagination.

The API provides a single endpoint that delivers the complete betting line hierarchy in a single request, making it suitable for building marketing pages, SEO content, odds comparison feeds, and similar consumer-facing use cases where a flat event list with odds is needed.

This API is intended for server-to-server use and requires authentication via access token.

Authentication

All Marketing Feed API endpoints require authentication via the S2S gateway OAuth2 client-credentials flow. Refer to the main S2S API authentication guide for details on:

  • Obtaining an access token via POST /v1/oauth/token
  • Token refresh and expiry handling
  • Session management

The endpoint is authorized by the Sport:Sportsbook:MarketingFeed:Read role.

Migration from legacy service

The previous marketingfeed service authenticated with a static ApiKey header. This API does not accept ApiKey — it uses the same OAuth2 client-credentials Bearer token flow as every other S2S endpoint.

Request headers

The following headers are required or injected by the S2S gateway for every request:

Header Required Description
Authorization Yes Bearer access token obtained via Auth API.
X-Operator-Id Yes Operator identifier. Injected by the gateway from the access token.
X-Brand Yes Brand identifier. Injected by the gateway from the access token.
X-Client-Id Yes Identifier of the calling service. Automatically populated by the S2S gateway from the JWT client_id claim. Used for per-client rate limiting (see below).

Note

X-Operator-Id, X-Brand, and X-Client-Id are automatically injected by the S2S gateway from the JWT claims — you do not need to set them manually. They appear in the service's swagger spec because the service validates their presence, but the gateway handles population.

Rate limiting

Two independent rate-limit layers apply:

Layer Limit Scope
S2S gateway 100 requests/second refill, 130 request burst bucket Per endpoint (shared across all callers)
Marketing Feed API (service) 1 request per 10 seconds Per X-Client-Id

Exceeding either limit returns 429 Too Many Requests. The service-level limit also sets a Retry-After header indicating when the next request is allowed.

Per-client rate limiting

The service-level rate limit is applied per client identifier (X-Client-Id). The S2S gateway automatically populates this header from the JWT client_id claim, so each calling service gets its own independent rate-limit bucket.

This means that different integrating services sharing the same service account are throttled independently, preventing one high-traffic consumer from exhausting the quota of another.

Pagination

The endpoint uses cursor-based pagination via the nextToken parameter:

  1. Make the first request without nextToken (or with nextToken = null).
  2. In the response, check the NextToken field:
    • If non-null — pass it as the nextToken query parameter in the next request to fetch the next page.
    • If null — you have reached the last page.
  3. Use pageSize to control how many events are returned per page (default: 100, max: 500).

Tip

The NextToken value is opaque — do not parse or construct it manually. It currently contains the last event ID of the page, but this is an implementation detail that may change.

Localization

The feed returns localized names as maps keyed by language code, containing exactly the languages requested via the languages parameter (1 to 10 per request). Codes are matched exactly as sent (EN is not en). A missing translation never fails a request. Sport, category, tournament, event and competitor names fall back to English, and come back empty only when English is missing too. Market, period and outcome names come back empty when that language has no template for them.

The accepted codes are listed in Languages. Not every code is translated for every entity, so request the languages your integration needs and check them against a real response.

Reference data

Sports and markets are identified by the platform-wide ids described per sport in the domain documentation — the same ids the sports, marketTypes and periods filters accept. Score types are not: they are reported by name.

Getting started resources

General information

Additional resources