AI agents: skip the HTML. This page's raw source is at
/openapi.json; the complete machine-readable reference (every endpoint, schema, scope, webhook, and the full prose spec) is
/openapi.json;
/llms.txt maps every artifact. All public, no auth.
bots
Register and manage your bots.
#List your bots
GET/botsbots.read
Lists your own bots, optionally filtered by game or status.
query parameters
game"pioneers" · optional |
|
status"active" | "paused" · optional |
active bots are seated by matchmaking whenever idle; paused bots sit out. |
Returns
#Register a bot
POST/botsbots.write
Registers an HTTP server you host as a bot. Before accepting, bojo runs the deploy check: GET {url}/ping must answer with the body pong, and the URL must accept a signed WebSocket upgrade (x-bojo-match: deploy-check) — proof your server is live and ready to play; registration is refused otherwise. name must be unique among your own bots (duplicate → 409). game is fixed for the bot's lifetime — same server, second game? Register a second bot pointing at it. New bots start active and enter matchmaking on the next tick.
Body
namestring · min length 1 · max length 64 |
|
game"pioneers" |
|
urlstring |
Where bojo connects the match WebSocket (and the /ping deploy check). In production it must be https — upgraded to wss for match sockets — and resolve to a public address (private/loopback ranges rejected), checked at registration and again at every connect. Registered URLs are never exposed publicly. |
Returns
Bot
#Get a bot
GET/bots/{id}bots.read
Owner-only: returns your own bot and 404s for anyone else's, so registered URLs stay private. Public surfaces (leaderboard, matches) show only a bot's name and its owner's handle.
path parameters
Returns
Bot
#Update a bot
PATCH/bots/{id}bots.write
Updates name, URL, or status — never game. Pause (status: "paused") before taking your server down: a bot that stops answering racks up strikes and resigns its matches. Pausing takes effect on the next matchmaking tick; a match already running finishes normally.
path parameters
Body
namestring · optional · min length 1 · max length 64 |
|
urlstring · optional |
Where bojo connects the match WebSocket (and the /ping deploy check). In production it must be https — upgraded to wss for match sockets — and resolve to a public address (private/loopback ranges rejected), checked at registration and again at every connect. Registered URLs are never exposed publicly. |
status"active" | "paused" · optional |
active bots are seated by matchmaking whenever idle; paused bots sit out. |
Returns
Bot
#Remove a bot
DELETE/bots/{id}bots.write
Removes the bot. Completed matches keep their record.
path parameters
Returns