Developer API
Error codes
When a request fails, the API tells you why. Every error links here from its doc_url field, straight to the code it hit.
What an error looks like
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "The 'limit' parameter must be between 1 and 100.",
"hint": "Nudge detected. Check your parameters.",
"param": "limit",
"doc_url": "https://www.kineticist.com/docs/api/errors#invalid_parameter"
}
}Go by the HTTP status and code. The message is for people and can change; hint is a bit of pinball flavor and is null when there is none. Which kind of fix each error needs:
- Fix the request. Change something and send it again. Repeating it unchanged will fail again.
- Check your key. The request was not accepted as coming from a working key.
- Wait and retry. The same request will work later. Wait the
Retry-Afterseconds when the response has that header, and back off if it fails again.
Authentication
The request did not carry a key we can accept. Nothing was counted against your limits.
missing_api_key
Check your keyThe request had no API key. Catalog reads need none; /me endpoints and file downloads need one in the Authorization header.
What to do: Send Authorization: Bearer ki_live_YOUR_KEY. You can create a key in Settings.
- Type
authentication_error- Hint
- Insert coin to continue.
invalid_api_key
Check your keyWe got a key, but it does not match any key we have.
What to do: Check for a typo, a cut-off paste, or a stray space or quote. If it still fails, create a new key in Settings.
- Type
authentication_error- Hint
- Insert coin to continue.
revoked_api_key
Check your keyThe key was real, but it has been revoked, so it no longer works.
What to do: Create a new key in Settings and swap it in. Retrying the old key will not help.
- Type
authentication_error- Hint
- This coin has been rejected by the machine.
Rate limits
You sent too many requests. Each of these comes back with a Retry-After header: the number of seconds to wait before the next request.
daily_limit_exceeded
Wait and retryYour key used up its requests for the day. The count resets at midnight UTC.
What to do: Stop until Retry-After has passed. If you need more room, the tier table on the main API page lists the limits.
- Type
rate_limit_error- Header
Retry-After- Hint
- You're tilting! Step away from the machine and come back tomorrow.
minute_limit_exceeded
Wait and retryYour key sent too many requests in the last minute.
What to do: Wait for Retry-After, then continue at a slower pace. The X-RateLimit-Remaining header on each response shows how much is left.
- Type
rate_limit_error- Header
Retry-After- Hint
- Slow down — you're nudging too hard.
burst_limit_exceeded
Wait and retryToo many requests landed in the same second.
What to do: Wait for Retry-After (usually one second) and space your requests out instead of firing them all at once.
- Type
rate_limit_error- Header
Retry-After- Hint
- Whoa, multiball! Ease off the flipper buttons.
Bad requests
Something in the request itself is wrong. Sending it again unchanged will fail the same way.
invalid_parameter
Fix the requestA query parameter or value is missing, the wrong shape, or out of range. The param field in the error names the culprit.
What to do: Read message and param, correct that value, and send the request again.
- Type
invalid_request_error- Hint
- Nudge detected. Check your parameters.
offset_too_large
Fix the requestThe offset is past 10,000. Lists do not page that deep.
What to do: Narrow the list with filters instead of paging further, then start again from offset 0.
- Type
invalid_request_error- Hint
- You've reached the end of the playfield. Try narrowing your filters.
Not found
not_found
Fix the requestThe game, person, manufacturer or other record you asked for is not in the database. A 404 or an empty list always means it really is not there. It never covers for a database hiccup.
What to do: Check the ID or slug. IDs can be sent with or without their prefix, such as gm_. Search the list endpoint if you are not sure of the slug.
- Type
not_found_error- Hint
- Ball drained. That resource doesn't exist.
Our side
Your request was fine. These are on us, and all of them are worth retrying.
server_error
Wait and retrySomething broke on our end that we did not expect. We have been notified.
What to do: Try again in a little while. If the same request keeps failing, tell us which endpoint and when.
- Type
api_error- Hint
- Machine malfunction. We've been notified.
Back to the API documentation or the API reference.