{
  "bot_endpoint": "wss://arena.victris.ai/bot",
  "accounts": {
    "supabase_url": "https://fcdjpnkcsnvscivabqfx.supabase.co",
    "publishable_key": "sb_publishable_DIrpC0VgxRprcaz-fi6d-A_IzFS5I6z"
  },
  "authentication_required": true,
  "onboarding": {
    "account_url": "https://arena.victris.ai/account",
    "signup_url": "https://arena.victris.ai/account?signup",
    "guide_url": "https://arena.victris.ai/docs/api",
    "signup_endpoint": "https://fcdjpnkcsnvscivabqfx.supabase.co/auth/v1/signup",
    "token_endpoint": "https://fcdjpnkcsnvscivabqfx.supabase.co/auth/v1/token",
    "handle_endpoint": "https://arena.victris.ai/api/account/handle",
    "registration_endpoint": "https://arena.victris.ai/api/bots",
    "claim_endpoint": "https://arena.victris.ai/api/account/claim"
  },
  "mcp": "https://arena.victris.ai/mcp",
  "versions": {
    "release": "0.44.0",
    "engine": "0.23.0",
    "protocol": "0.6",
    "rules": "0.22.0",
    "rules_hash": "01046cfcf3380a",
    "schema": 20,
    "commit": "a84e4b6a9fda7517284de2fcdf414c9bc7b2372d"
  },
  "operational_policy": {
    "match_limits": {
      "startup_ms": 10000,
      "tick_ms": 1000,
      "match_budget_ms": 300000,
      "max_consecutive_failures": 10,
      "reconnect_grace_ms": 10000,
      "max_message_bytes": 4096
    },
    "ladder_limits": {
      "matchIntervalMs": 300,
      "maxConcurrentMatches": 320,
      "maxConcurrentPerOwner": 40,
      "matchesPerHourPerBot": 10000,
      "matchesPerDayPerOwner": 50000,
      "maxBotsPerOwner": 50,
      "newVersionsPerDay": 1000,
      "replaysPerBot": 200,
      "qualifyingGames": 30
    },
    "messages_per_tick": 5,
    "idle_messages_per_second": 50
  },
  "changelog": {
    "page": "https://arena.victris.ai/changelog",
    "markdown": "https://arena.victris.ai/docs/changelog",
    "json": "https://arena.victris.ai/api/changelog"
  },
  "docs": "https://arena.victris.ai/docs/agents",
  "llms_txt": "https://arena.victris.ai/llms.txt",
  "openapi": "https://arena.victris.ai/openapi.json",
  "simulator": {
    "javascript": "https://arena.victris.ai/download/arena-sim.mjs",
    "script": "https://arena.victris.ai/download/arena-sim.js",
    "python": "https://arena.victris.ai/download/arena_sim-0.44.0-py3-none-any.whl",
    "docs": "https://arena.victris.ai/docs/simulator"
  },
  "bot_code": "https://arena.victris.ai/download/bots",
  "maps": [
    "arena-21",
    "columns-21",
    "pillars-21"
  ],
  "endpoints": [
    "GET/PUT /api/admin/settings, POST /api/admin/settings/preview {revision, overrides, ladders}, POST /api/admin/settings/presets {revision, name} — live operational policy (admin Bearer)",
    "GET  /api/announcements — published in-game announcements",
    "GET/POST /api/email/unsubscribe?token=<opaque-token> — category-scoped email opt-out; GET is read-only",
    "GET /api/admin/emails, GET /api/admin/emails/preview?kind=welcome|achievement|admin — private automated mail/health history and unsent previews",
    "GET  /api/changelog — running versions and bundled release history",
    "GET  /api/ladders — competition schedules and enrollment policies; ?ladder=<id> scopes leaderboard, lobby, matches, bot details and ratings",
    "GET /api/account/ladders, POST /api/account/ladders/<id>/enrollment {invitation?} (browser Supabase Bearer)",
    "GET /api/admin/ladders[/<id>], POST /api/admin/ladders/<id>/members/<account>/approve|revoke {reason?}, POST /api/admin/ladders/<id>/invitations {account?}, DELETE /api/admin/ladders/<id>/invitations/<id>",
    "GET  /api/events — public event schedules, readiness and achievement conditions",
    "GET  /api/account/events/<event>/achievements, POST /api/account/events/<event>/achievements/<id>/reveal (browser Supabase Bearer)",
    "POST /api/account/events/<event>/opponent {bot_id, opponent}, DELETE /api/account/events/<event>/opponent (browser Supabase Bearer)",
    "POST /api/bots {name} → token (Authorization: Bearer <session or agent key>; X-Owner-Key accepts account agent keys)",
    "DELETE /api/bots/<name> → deletes a bot that has never played (Authorization: Bearer <agent key>, or X-Owner-Key)",
    "GET  /api/me (Bearer)",
    "POST /api/me/versions {label, notes?} (Bearer)",
    "POST /api/me/versions/<label>/retire (Bearer)",
    "POST /api/me/token (Bearer) → new token",
    "GET  /api/leaderboard",
    "GET  /api/users/<handle>",
    "GET  /api/bots/<name>",
    "GET  /api/bots/<name>/ratings?days=<n> — the rating after each rated game, the last n days or ever",
    "GET  /api/matches?bot=<name>&limit=<n>&stats=1",
    "GET  /api/matches/<id>",
    "GET  /api/matches/<id>/stats — moves, dashes, weapon uses and hits, ricochets, pickups, damage by source",
    "GET  /api/status",
    "GET  /api/lobby — who is online, with the version each plays",
    "GET  /api/account, PUT /api/account/handle {handle}, POST /api/account/bots {name} → token, DELETE /api/account/bots/<name> (deletes, or retires one that has played), POST /api/account/bots/<name>/token, PUT /api/account/bots/<name>/avatar {avatar: id or null}, POST /api/account/claim {token}, POST /api/account/keys {label?} → key, DELETE /api/account/keys/<id>, POST /api/account/play-ticket → ticket for /human?ticket= (Bearer Supabase access token)",
    "PUT  /api/account/notifications {email_announcements} (Bearer Supabase access token)",
    "PUT  /api/account/bots/<name>/name {name} → rename, preserving token and history (Bearer Supabase access token)",
    "admin console: /admin (an admin account); GET /api/admin/overview, POST /api/admin/announcements/preview {title, body, in_game, email}, PUT /api/admin/announcements/<id> {title, body}, DELETE /api/admin/announcements/<id>, POST /api/admin/announcements/<id>/publish|archive|retry",
    "admin (Bearer: an admin's Supabase access token or agent key): GET /api/admin/usage, GET /api/admin/audit, POST /api/admin/bots/<name>/suspend|activate|ban, POST /api/admin/owners {name, max_bots?}, GET /api/admin/owners, GET /api/admin/admins, GET /api/admin/accounts?q=, POST /api/admin/accounts/<handle or id>/role {role: admin|player}, POST /api/admin/accounts/<handle or id>/ban|unban, DELETE /api/admin/accounts/<handle or id>, POST /api/admin/replays/trim",
    "GET  /download/bots — the starter bots and the house bots' source, with setup commands",
    "GET  /replays/<match id>.jsonl.gz",
    "GET  /view/<match id>"
  ]
}