Sandbox key

A free key that reads a fixed sample of past CS2 matches, so you can build against real responses before you subscribe.

A sandbox key is a free API key for trying the API. It reads a fixed sample of past matches with the same endpoints and response shapes as a paid key, so the code you write against it works unchanged when you subscribe. No card is needed, and nothing is ever charged for it.

It is not a trial of a paid plan: it never turns into a subscription. Current and full data come with a paid plan.

Get one

Sign up at esportsodds.gg, accept the Terms, and click Create sandbox key in the dashboard. It shows the key with a first call in curl and Python to copy. Copy the key when it appears: it is shown once. Keys start with eo_sandbox_. There is one per account. Lost it? Email support@esportsodds.gg for a new one.

export ESPORTSODDS_API_KEY="eo_sandbox_..."
curl -H "Authorization: Bearer $ESPORTSODDS_API_KEY" \
  "https://api.esportsodds.gg/v1/cs2/matches?tournament=019f23d2-5a32-71d0-ac4b-dfc7eb5dd3f0&limit=5"

The Python client reads the same ESPORTSODDS_API_KEY.

What it reads

The sample is every completed match of two events, about a hundred matches in all:

EventTournament id
Esports World Cup 2026019f23d2-5a32-71d0-ac4b-dfc7eb5dd3f0
CCT Europe 2026 Series 7019ff0f2-3b3e-75ec-b89e-a9fefaeee00a

One event is top tier and one is lower tier, so you see what a full match looks like and what a thinner one looks like. We may change the sample; the events above are the current one.

A sandbox key can call:

EndpointInside the sample when
GET /v1/cs2/matches?tournament= is a sample event
GET /v1/cs2/matches/{id} and its /maps, /stats, /vetoes, /rounds, /history, /depth, /lineups, /streamsthe match is in the sample
GET /v1/cs2/tournaments/{id} and /tournaments/{id}/teamsthe id is a sample event
GET /v1/cs2/odds?match= is a sample match
GET /v1/cs2/coverage, GET /v1/cs2/model/metricsalways

Follow any match from that list into its sub-resources:

curl -H "Authorization: Bearer $ESPORTSODDS_API_KEY" \
  "https://api.esportsodds.gg/v1/cs2/matches/MATCH_ID/stats"

Limits

  • 2,000 requests in total, for the life of the key. It does not reset. X-Quota-Limit and X-Quota-Remaining on each counted response show where you are.
  • 5 requests per second, with a burst of 20 (X-RateLimit-* headers, as on any key).
  • No WebSocket: POST /v1/cs2/ws-token answers 403 sandbox_scope.
  • Once the 2,000 are used, every call answers 429 sandbox_quota_exceeded, inside the sample or not.

Errors you will only see on a sandbox key

StatusCodeMeaningWhat to do
403sandbox_scopeThe request is outside the sample (another event, a current match, a team or player route). Not counted against your 2,000. The message names the sample's events and a call that works, /v1/cs2/matches?tournament=<id>.Ask for something inside the sample, or subscribe for current data from your dashboard.
429sandbox_quota_exceededAll 2,000 requests are used. There is no Retry-After: the allowance does not come back.Subscribe for a monthly allowance from your dashboard.

Every other error behaves as on a paid key: see Errors.

Moving to a paid key

When you subscribe, create a paid key in the dashboard and swap it in for ESPORTSODDS_API_KEY. Paths, parameters and response shapes do not change; the only difference is that every match, event, team and player is in reach.

On this page