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:
- Make the first request without
nextToken(or withnextToken= null). - In the response, check the
NextTokenfield:- If non-null — pass it as the
nextTokenquery parameter in the next request to fetch the next page. - If null — you have reached the last page.
- If non-null — pass it as the
- Use
pageSizeto 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.
- Sports — sport codes (
F,T,B,HR, …); the feed returns only the sports enabled for your brand - Markets by sport — market types, periods, result kinds and their outcomes
- Outcome SelectionKey structure — how an outcome's
SelectionKeyis composed - Scores description — the score types each sport reports
Getting started resources¶
General information¶
- Accessing S2S API
- Integrating with S2S API
- Postman Workspace — Ready-to-use API collection for testing
Additional resources¶
- SportbookAPI Changelog — Latest updates and changes
- Additional Resources — Integration examples and best practices