Skip to main content

Errors

Every reply has the same shape. On success:

{ "ok": true, "data": { "...": "..." } }

On failure, a stable, snake_case error code:

{ "ok": false, "error": "player_not_found" }

Branch on error, not on the HTTP status alone and never on wording. Error codes don't change within v1. Some errors carry extra fields (like retry_after); more may be added.

StatuserrorWhat happenedWhat to do
400invalid_jsonThe body isn't valid JSONSend Content-Type: application/json and a JSON body
400usernames_requiredusernames is missing, empty or not a listSend {"usernames": ["..."]}
400too_many_usernamesMore than 250 names; max says the limitSplit into several requests
400invalid_usernameA name is empty, not a string, or over 100 charactersCheck your list
401missing_api_keyNo key sentAdd Authorization: Bearer <key>
401invalid_api_keyKey wrong, malformed or revokedCheck the key; make a new one in the developer portal if it was revoked
403player_privateThe player hid their level on Bonkverse (level history only)Show nothing for them
404player_not_foundNo replays for that registered nameCheck spelling; they may not have played in an archived room
405method_not_allowedWrong HTTP method; Allow says whichUse the method in the docs
429rate_limitedOver your limit; retry_after is in secondsWait, then retry
503upstream_unavailableThe replay archive didn't answerRetry later; keep showing your stored data

Errors inside a bulk lookup​

Bulk lookup never fails because of one player. Each player gets a status instead: found, not_found, private or unavailable. Only a bad request as a whole (bad JSON, too many names, a bad key) gets an error reply.