GameQuery Docs

Errors and Limits

Every status code, error code and constraint the v1 API applies.

View as Markdown

HTTP status codes

StatusWhenBody
400servers missing or not an array{"error":"POST_2","message":"Invalid request format"}
400More than 1000 addresses in one request{"error":"POST_3","message":"Exceeded maximum server request limit (1000)"}
400Body is not valid JSON{"error":"POST_4","message":"Invalid JSON format"}
401An auth header is missing or the credentials do not resolve{"message":"API token is required"}
403The key's whitelist rejected the request origin{"message":"Request origin is blocked by API key whitelist settings"}
405GET on /v1/post/fetch{"error":"POST_1","message":"Method Not Allowed. Only POST requests are accepted."}
405Anything but GET/OPTIONS on /v1/get/games{"error":"GET_1","message":"Method Not Allowed. Only GET requests are accepted."}
429Rolling 24-hour quota exhausted{"message":"Daily quota exceeded for this API key","quota":1440,"used":1440}
500Database or Redis failure{"message":"Internal server error"}

Error codes

Codes are stable strings; the messages beside them are not a contract. Branch on error, and on the HTTP status, never on message text.

CodeMeaning
GET_1Wrong method on /v1/get/games.
POST_1Wrong method on /v1/post/fetch.
POST_2servers is absent or is not an array.
POST_3More than 1000 addresses across all groups.
POST_4Malformed JSON body.

401 and 403 responses carry message only, with no error code.

The four 401 messages

MessageCause
API token is requiredX-API-Token header absent.
API token Type is requiredX-API-Token-Type header absent.
API token Type is invalidType is not FREE or PRO.
API token Email is requiredX-API-Token-Email header absent.
Invalid/Stopped API Credentials. Check token email/type (FREE or PRO).Headers present but the key, email, package, key status or account status does not match.

Retry policy

StatusRetry
400, 401, 403, 405No. The request is wrong; retrying burns quota.
429Only after backing off. Read quota and used first.
500Yes, with exponential backoff and jitter.

Limits

  • 1000 addresses per request, counted across every group in servers.
  • Request bodies are capped at 1 MB.
  • Addresses must match IPv4 ip:port. Hostnames, IPv6 and bare IPs are rejected.
  • POST /v1/post/fetch requires Content-Type: application/json.
  • Quota is per key over a rolling 24-hour window, 1440 by default, unlimited for PRO.

Partial success is the normal case

A batch never fails because some rows are bad. Invalid rows are separated out and the rest is served, with 200:

  • _meta.invalid_servers - rows that were rejected, with the reason implied by the shape (unknown game_id, empty group, or malformed address).
  • _meta.inserted_servers - game_id + address pairs newly registered by this request.
  • _meta.auto_inserted - the count of those pairs.

If your ingestion pipeline only checks the HTTP status, silent data loss is the default outcome. Treat these three fields as first-class output.

On this page