The Musecat bot API automates arcade creation and information edits with your account's permissions. Open Manage keys on your Bots page, enter a name and create a key. The secret is shown only once.
Founding supporters, supporters, designers, moderators and developers can issue keys. The official arcade account role alone is insufficient. Your account must be active and fully registered; eligibility is checked on every request.
Append /bot/v1 to your backend origin and send Authorization: Bearer <bot-key>. These examples use a local backend. For a deployed environment, substitute its HTTPS backend origin, not the website origin or a web /api proxy.
Store the key in an environment variable or secret store. Never put it in URLs, query strings, public code or logs. It cannot be exchanged for a web session or used on normal account or PocketBase collection APIs.
Every path below requires the /bot/v1 prefix. Unlisted routes are unavailable.
Use URL query parameters for reads and JSON with Content-Type: application/json for ordinary edits. Photo uploads use multipart form data. Existing arcade visibility and creator permissions still apply.
The response's id identifies the arcade. Creation produces a private draft, not a published arcade. List your drafts with GET /arcade/drafts; read a draft with GET /arcade/draft?id=ARCADE_ID&expand=all. Read a public arcade with GET /arcade?id=ARCADE_ID&expand=all.
If a creation response is lost, check your drafts first. Blindly retrying may create a duplicate arcade.
Read basic.id from the detail response and send it as base_basic_id to edit the revision you inspected. Send only the fields you intend to change. Replace placeholder IDs with actual values.
PUT /arcade/hour accepts weekdays as shown below. Times are integers in 24-hour HHMM format. Omitted weekdays remain unchanged.
Read version IDs from GET /game/catalog?locale=en-US, then fetch arcade details with expand=game. The current state ID is game.state_id; use an empty base_state_id when no game state exists.
Send changes to PUT /arcade/game as add, modify and remove, not a full replacement games list. Each modify entry needs its existing item id; remove contains item IDs. The game field uses a catalog version ID, not a series ID.
On 409, fetch the latest state and recompute the changes. Do not attach a new state ID to an unchanged stale delta.
Upload up to 10 PNG, APNG or JPEG files per request using photos. Uploading alone does not change the arcade's photo list. Collect uploaded[].atomId and submit the final photo list to PUT /arcade/photo. Include existing atom IDs to retain existing photos. Retry only failed uploads when a batch partly succeeds.
Check requirements with GET /arcade/public?arcade=ARCADE_ID, then send {"arcade":"ARCADE_ID"} to PUT /arcade/public. Only the creator may publish. Registered games and the photo, contact or opening-hour requirements for the account's level must be satisfied.
The bot API does not provide GPS verification. Map coordinates are not proof of a visit. Keep the draft private if requirements remain unmet.
400: check required fields, IDs and JSON formatting.401: check revocation and the issuing account's eligibility and status. Do not automatically fall back to password login.403: check permission to edit or publish the arcade.404: check the route, resource ID and visibility.409: reload current state and recompute the delta.429: honor Retry-After; key-rate-limit responses specify 60 seconds.Account management, messaging, attendance, visit verification, memo editing and moderation are excluded.
The issuing account remains the editor. Arcade history displays a BOT badge beside its nickname. Bot names are visible only to their owner and are omitted from other viewers' API responses. Your Bots page filters history by bot. Bot work earns no XP.
Issue a replacement, update your bot's configuration, then revoke the old key in Manage keys. Revocation blocks later requests; already accepted requests may finish. Past edit history remains intact.
Key management requires a signed-in web session. A bot key cannot list, issue or revoke keys.