Errors
Every error from the API has the same shape, and its docs_url links to the section of this page for its code, for example https://docs.skewtape.com/errors#invalid_request. The MCP server's data tools return the same envelope as their tool error.
The error shape
{
"error": {
"code": "invalid_request",
"message": "[Which parameter to fix, and why]",
"docs_url": "https://docs.skewtape.com/errors#invalid_request",
"request_id": "[request id]",
"plan": null,
"resets_at": null,
"upgrade_url": null,
"block_reason_code": null
}
}| Field | What it holds |
|---|---|
code | The error code: one of the sections below. |
message | A plain sentence saying what to do. |
docs_url | The section of this page for the code. |
request_id | The same value as the X-Request-Id response header. Quote it when you write to us. |
plan | On forbidden_plan: the plan that unlocks the request. Null otherwise. |
resets_at | On quota_exceeded: when the monthly quota resets, in UTC. Null otherwise. |
upgrade_url | On quota_exceeded: where to change plan. Null otherwise. |
block_reason_code | On blocked: why the data policy withholds the venue's data. Null otherwise. |
unauthorized
HTTP 401.
What happened: the X-API-Key header is missing, holds a key we do not know, or holds a key that was revoked.
What to do: send an active key in the X-API-Key header. If the key was revoked, use another key on your account or create a new one in the dashboard.
forbidden_plan
HTTP 403.
What happened: your plan does not include this request.
What to do: the plan field names the plan that unlocks it. Compare plans.
blocked
HTTP 403.
What happened: the data policy withholds this venue's data. block_reason_code says why: licence_undecided, licence_derived_only or geo_policy. A read of one of the venue's markets answers blocked whether or not the market exists.
What to do: read the other venues. Lists leave a withheld venue out, or show its fields as null with blocked: true. Matched event fields are Skewtape's own data and are never withheld; a member on a withheld venue keeps its ids.
not_found
HTTP 404.
What happened: the resource you asked for does not exist, or your plan does not show it. The answer never says which.
What to do: check the id and the path in your request.
invalid_request
HTTP 400.
What happened: a parameter is missing, or has a value we cannot use.
What to do: the message says which parameter to fix. Fix it and send the request again.
rate_limited
HTTP 429.
What happened: too many requests in a short time for your plan's calls a second.
What to do: wait the number of seconds in the Retry-After header, then retry.
quota_exceeded
HTTP 429.
What happened: your account has used all the API calls in its monthly limit. Calls from all your keys count toward the same limit.
What to do: resets_at says when the count starts again, and upgrade_url links to the plans.
internal
HTTP 500.
What happened: something failed on our side, not in your request.
What to do: if it keeps happening, write to hello@skewtape.com with the request_id from the error.
Powered by Kalshi Research
Monthly deltas
Keep a local copy of the History snapshot current. Each month's delta takes last month's snapshot to this month's, with new month files whole and the reference tables as changed rows. Apply it with DuckDB.
API reference
Every route of the public Skewtape API, generated from its OpenAPI spec. Send your key in the X-API-Key header; every list answers a page of rows in data, with next_cursor for the next page.