{"openapi":"3.1.0","info":{"title":"DuckDuckRob Public API","version":"1.0.0","description":"Read-only JSON for everything the DuckDuckRob profiler shows publicly. No authentication. 120 requests per 60 seconds per IP."},"servers":[{"url":"https://ogn.tropixmc.dev"}],"tags":[{"name":"Meta"},{"name":"Server"},{"name":"Players"},{"name":"Search"},{"name":"Leaderboards"},{"name":"Community"}],"paths":{"/api/v1":{"get":{"tags":["Meta"],"summary":"Index of every endpoint, plus the rate limit in force.","operationId":"getIndex","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/openapi.json":{"get":{"tags":["Meta"],"summary":"OpenAPI 3.1 description of this API, for code generators and clients.","operationId":"getOpenapiJson","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/health":{"get":{"tags":["Meta"],"summary":"Liveness check with the current row counts.","operationId":"getHealth","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/stats":{"get":{"tags":["Server"],"summary":"Site-wide totals: players, messages, donations, quotes, guilds, warps, crashes.","operationId":"getStats","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/online":{"get":{"tags":["Server"],"summary":"How many players are on the RPG server right now. Count only, never names.","operationId":"getOnline","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players":{"get":{"tags":["Players"],"summary":"The player directory, busiest first.","operationId":"getPlayers","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players/{name}":{"get":{"tags":["Players"],"summary":"One player: identity, activity, server figures, guild, donations, badges, joke stats.","operationId":"getPlayersName","parameters":[{"name":"name","in":"path","required":true,"description":"Minecraft username, or any nickname the player has been seen under.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players/{name}/activity":{"get":{"tags":["Players"],"summary":"Hour-of-day histogram, a message-count series, and the money/petals history.","operationId":"getPlayersNameActivity","parameters":[{"name":"name","in":"path","required":true,"description":"Minecraft username, or any nickname the player has been seen under.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"Window for the message series and the history: 1d, 7d, 30d or all. Default all.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players/{name}/words":{"get":{"tags":["Players"],"summary":"Vocabulary metrics with top words, bigrams and emojis. Off unless the player opted in.","operationId":"getPlayersNameWords","parameters":[{"name":"name","in":"path","required":true,"description":"Minecraft username, or any nickname the player has been seen under.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players/{name}/messages":{"get":{"tags":["Players"],"summary":"A deterministic sample of the player's stored messages. Off unless the player opted in.","operationId":"getPlayersNameMessages","parameters":[{"name":"name","in":"path","required":true,"description":"Minecraft username, or any nickname the player has been seen under.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/players/{name}/friends":{"get":{"tags":["Players"],"summary":"Friend edges: who this player added, who added them, plus the computed best friend.","operationId":"getPlayersNameFriends","parameters":[{"name":"name","in":"path","required":true,"description":"Minecraft username, or any nickname the player has been seen under.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/search":{"get":{"tags":["Search"],"summary":"Substring search over usernames and seen nicknames.","operationId":"getSearch","parameters":[{"name":"q","in":"query","required":true,"description":"Search term, 1 to 64 characters.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/traits":{"get":{"tags":["Search"],"summary":"The filterable joke traits and every value each one can take.","operationId":"getTraits","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/traits/{field}":{"get":{"tags":["Search"],"summary":"Every player whose trait matches a value.","operationId":"getTraitsField","parameters":[{"name":"field","in":"path","required":true,"description":"Trait key from /traits, e.g. starsign.","schema":{"type":"string"}},{"name":"value","in":"query","required":true,"description":"One of that trait's values. Matched case-insensitively; a unique substring works too.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/leaderboards":{"get":{"tags":["Leaderboards"],"summary":"Every public leaderboard and its key.","operationId":"getLeaderboards","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/leaderboards/{stat}":{"get":{"tags":["Leaderboards"],"summary":"One leaderboard, ranked. Accepts the aliases the site and the Discord bot accept.","operationId":"getLeaderboardsStat","parameters":[{"name":"stat","in":"path","required":true,"description":"Board key from /leaderboards, e.g. messages.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/guilds":{"get":{"tags":["Community"],"summary":"Tracked guilds, strongest first.","operationId":"getGuilds","parameters":[{"name":"q","in":"query","required":false,"description":"Filter by name substring.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/guilds/{name}":{"get":{"tags":["Community"],"summary":"One guild with its roster, allies and enemies.","operationId":"getGuildsName","parameters":[{"name":"name","in":"path","required":true,"description":"Guild name, case-insensitive.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/warps":{"get":{"tags":["Community"],"summary":"Player warps, most visited first.","operationId":"getWarps","parameters":[{"name":"q","in":"query","required":false,"description":"Filter by warp name or owner substring.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/warps/{name}":{"get":{"tags":["Community"],"summary":"One player warp in full.","operationId":"getWarpsName","parameters":[{"name":"name","in":"path","required":true,"description":"Warp name, case-insensitive.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/donations":{"get":{"tags":["Community"],"summary":"Donation totals with the ranked donor board and the recent feed.","operationId":"getDonations","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/quotes":{"get":{"tags":["Community"],"summary":"The quotebook, newest first.","operationId":"getQuotes","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Default 1.","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows per page. Default 20, max 100.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/wealth":{"get":{"tags":["Community"],"summary":"Balance distribution: median, mean, Gini, top shares, magnitude histogram, richest players.","operationId":"getWealth","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The player hid this section, or limits their profile to logged-in viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}