Skip to main content

Get a player

GET/api/v1/players/{username}/

One registered bonk.io player: their level in their latest archived replay, their peak level, when they were last seen, and how many replays they're in.

Path​

Parameter
usernameTheir bonk.io username, URL-encoded. Case doesn't matter. Spaces are real: " comet" and "comet" are different players.
Usernames "." and ".."

bonk.io allows the names . and .., which can't sit in a URL path. Write them as ~. and ~..: /api/v1/players/~../. A name that is only tildes and then one or two dots gets one more ~ in front (~.. → ~~..). Or use bulk lookup, which takes names in a JSON body and has no such rule.

Request​

curl "https://bonkverse.io/api/v1/players/Saucy%20Tulip/" \
-H "Authorization: Bearer $BONKVERSE_API_KEY"

Response​

{
"ok": true,
"data": {
"requested": "saucy tulip",
"username": "Saucy Tulip",
"status": "found",
"level": {
"value": 54,
"peak": 54,
"seen_at": "2026-11-07T03:10:00.000Z",
"seen_day": "2026-11-07",
"estimated": false,
"source": "replays",
"replay": { "cycle": 6, "id": "344000" }
},
"games": 120,
"account": { "dbid": 4513377, "joined": "2017-08-21", "joined_estimated": true },
"bonkverse_account": true,
"profile_url": "https://bonkverse.io/player/Saucy%20Tulip/"
}
}

The player object​

The same object appears in bulk lookup results.

FieldType
requestedstringThe name exactly as you sent it
usernamestringHow the player spells it
statusstringfound, private, not_found or unavailable (the last two only appear in bulk lookup; here they're errors)
levelobject or nullnull when status isn't found
level.valueintegerLevel in their latest archived replay
level.peakintegerHighest level seen in any replay
level.seen_atISO 8601 time or nullWhen that replay was collected. What this means
level.seen_dayYYYY-MM-DDDay of that replay. Always set when level is
level.estimatedbooleanseen_day is an estimate (older cycles)
level.source"replays"Where the level came from. More sources may be added
level.replay{cycle, id}The replay the level came from
gamesinteger or nullHow many archived replays they're in
accountobject or nullTheir bonk.io account, when Bonkverse knows it (from friend lists and logins). Can be set even when status is not_found
account.dbidintegerbonk.io account ID (DBID). Never changes, even if they rename, so it's the best key for linking accounts
account.joinedYYYY-MM-DD or nullDay the account was made, estimated from the DBID
account.joined_estimatedbooleanAlways true for now: bonk.io doesn't publish join dates
bonkverse_accountbooleanThey have a Bonkverse account
profile_urlURL or nullTheir Bonkverse profile. Link to it when you show their data

Private players​

A player who hid their Level section on Bonkverse comes back with "status": "private" and "level": null. Show them without a level.

Errors​

Statuserror
404player_not_foundNo replays for that registered name
503upstream_unavailableThe replay archive didn't answer; try later
400invalid_usernameEmpty or over 100 characters

Plus the errors every endpoint can return.

Answers are cached for about 5 minutes (Cache-Control: private, max-age=300).