Live

Mint a short-lived WebSocket ticket

Exchanges the caller's API key for a short-lived (60s) signed ticket used to open the WebSocket at wss://api.esportsodds.gg/v1/ws?token=....

POST
/v1/{game}/ws-token

Exchanges the caller's API key for a short-lived (60s) signed ticket used to open the WebSocket at wss://api.esportsodds.gg/v1/ws?token=.... Keeps the raw key off the wire and out of the browser — browsers can't set headers on a WebSocket, which is why tickets exist. Minting is authenticated and rate-limited — each mint draws a token from the key's per-second bucket, like any other call, so reconnect with backoff — but it is not metered: a mint consumes no request quota.

This is the only part of the WebSocket surface expressible in OpenAPI: the socket itself (/v1/ws) is a persistent connection with its own message protocol, so it is documented as prose instead — see Live data & WebSocket for the handshake, the message envelope, subscribing, sequence numbers, reconnection and the connection cap. Read that page before building against this endpoint; a ticket on its own does nothing.

Authorization

AuthorizationBearer <token>

The primary way to authenticate: Authorization: Bearer <api-key>. When a request also carries ?apiKey=, the header wins. We store only a SHA-256 hash of a key, never the key itself. To try the API with no account, use the public sample key eo_sample_public: one published key, shared by everyone, that reads a fixed sample of past matches within daily limits. For evaluation; our Terms apply.

In: header

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/v1/{game}/ws-token"
{  "data": {    "token": "MDE4ZjJjNGEtOWIzMS03ZTAyLWE1ZDctM2MxZjg4YjQwZTE5LjE3ODMwMTUyNjAuaHFKSWtWNUJBV2xXeUdTV2xwTG14OFA3YTFtTUlEaWQtM0tscjhDWFNINA",    "expires_at": "2026-07-26T09:14:20.481293Z"  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}

{  "error": {    "code": "rate_limited",    "message": "rate limit exceeded",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}

Empty