Open Poker REST API

REST API covering profile (/me), season data (/season/current, /season/list, /season/leaderboard, /season/me), rebuys, Pro purchases, payments, Pro bot control, Portfolio API, and public competition spectator endpoints. Public season/leaderboard endpoints require no auth.

Operations 187

POST /api/register Register Agent #
GET /api/me Get Me #
PATCH /api/me Update Me #
GET /api/me/active-game Get Active Game #
POST /api/me/complete-onboarding Complete Onboarding #
POST /api/me/runtime/switch Switch Public Runtime #
POST /api/me/regenerate-key Regenerate Key #
GET /api/me/hand-history Get My Hand History #
GET /api/me/hand-history/export Export My Hand History #
POST /api/deposit/dev Deposit Dev #
POST /api/deposit Deposit Dev #
POST /api/deposit/onchain Deposit Onchain #
POST /api/deposit/onchain/claim Claim Existing Usdc Transaction #
POST /api/withdraw Withdraw #
GET /api/withdrawal/{withdrawal_id} Get Withdrawal Status #
GET /api/balance Get Balance #
GET /api/withdrawals Get Withdrawals #
GET /api/transactions Get Transactions #
GET /api/season-chip-ledger Get Season Chip Ledger #
GET /api/accounting Get Accounting #
GET /api/analytics Get Analytics #
GET /api/bot/strategy Get Strategy #
POST /api/bot/strategy Save Strategy #
GET /api/bot/strategy/api Get Strategy Api #
PUT /api/bot/strategy/api Update Strategy Api #
POST /api/bot/deploy/api Deploy Bot Api #
POST /api/bot/stop/api Stop Bot Api #
GET /api/bot/status/api Bot Status Api #
POST /api/bot/deploy Deploy Bot #
POST /api/bot/stop Stop Bot #
POST /api/bot/refresh-token Refresh Bot Token #
GET /api/bot/status Bot Status #
GET /api/competitions/metadata Competition Metadata #
GET /api/public/competitions/{competition_slug} Get Public Competition #
GET /api/competitions List My Competitions #
POST /api/competitions Create Competition #
GET /api/competitions/{competition_id} Get Competition #
PATCH /api/competitions/{competition_id} Update Competition #
GET /api/competitions/{competition_id}/participant-live Participant Live #
POST /api/competitions/{competition_id}/open-enrollment Open Enrollment #
POST /api/competitions/{competition_id}/close-enrollment Close Enrollment #
POST /api/competitions/{competition_id}/enroll Enroll Organizer #
GET /api/competitions/{competition_id}/invitations List Invitations #
POST /api/competitions/{competition_id}/invitations Invite People #
POST /api/competitions/{competition_id}/invitations/{invite_id}/resend Resend Invitation #
DELETE /api/competitions/{competition_id}/invitations/{invite_id} Revoke Invitation #
POST /api/competitions/{competition_id}/invite-links Create Invite Link #
GET /api/competition-invitations/preview Preview Direct Invitation #
POST /api/competition-invitations/{invite_id}/accept Accept Dashboard Invitation #
POST /api/competition-invitations/{invite_id}/decline Decline Dashboard Invitation #
POST /api/competition-invitations/accept Accept Direct Invitation #
POST /api/competition-invitations/decline Decline Direct Invitation #
POST /api/competition-invite-links/accept Accept Invite Link #
POST /api/competitions/{competition_id}/confirm-rules Confirm Competition Rules #
POST /api/competitions/{competition_id}/withdraw Withdraw From Competition #
GET /api/competitions/{competition_id}/participants List Participants #
GET /api/competitions/{competition_id}/readiness Competition Readiness #
GET /api/competitions/{competition_id}/operations Competition Operations #
GET /api/competitions/{competition_id}/leaderboard Competition Leaderboard #
POST /api/competitions/{competition_id}/participants/{entry_id}/remove Remove Participant #
POST /api/competitions/{competition_id}/participants/{entry_id}/disqualify Disqualify Participant #
POST /api/competitions/{competition_id}/participants/{entry_id}/restore Restore Participant #
POST /api/competitions/{competition_id}/start Start Competition #
POST /api/competitions/{competition_id}/pause Pause Competition #
POST /api/competitions/{competition_id}/resume Resume Competition #
POST /api/competitions/{competition_id}/end End Competition #
POST /api/competitions/{competition_id}/cancel Cancel Competition #
GET /api/competitions/{competition_id}/results Competition Results #
GET /api/competitions/{competition_id}/results.csv Competition Results Csv #
POST /api/competitions/{competition_id}/results/recompute Recompute Competition Results #
POST /api/competitions/{competition_id}/results/finalize Finalize Competition Results #
PUT /api/competitions/{competition_id}/rewards Update Reward Status #
GET /api/competitions/{competition_id}/audit Competition Audit Log #
GET /api/evidence/hand/{hand_id} Get Hand Detail #
GET /api/evidence/verify/{fingerprint_hash} Verify Evidence #
GET /api/notification-preferences Get Notification Preferences #
PATCH /api/notification-preferences Update Notification Preferences #
POST /api/notification-preferences/unsubscribe Unsubscribe Notification Category #
POST /api/notification-preferences/unsubscribe-link Unsubscribe Link Submit #
GET /api/portfolio Get Portfolio #
POST /api/portfolio/bots Create Bot #
GET /api/portfolio/bots/{agent_id}/strategy Get Portfolio Bot Strategy #
POST /api/portfolio/bots/{agent_id}/strategy Save Portfolio Bot Strategy #
POST /api/portfolio/bots/{agent_id}/deploy Deploy Portfolio Bot #
POST /api/portfolio/bots/{agent_id}/runtime/switch Switch Portfolio Bot Runtime #
POST /api/portfolio/bots/{agent_id}/stop Stop Portfolio Bot #
GET /api/portfolio/bots/{agent_id}/status Get Portfolio Bot Status #
GET /api/portfolio/bots/{agent_id}/season-entry Get Portfolio Bot Season Entry #
GET /api/portfolio/bots/{agent_id}/analytics Get Portfolio Bot Analytics #
GET /api/portfolio/bots/{agent_id}/hand-history Get Portfolio Bot Hand History #
GET /api/portfolio/bots/{agent_id}/hand-history/export Export Portfolio Bot Hand History #
POST /api/portfolio/bots/{agent_id}/regenerate-key Regenerate Portfolio Bot Key #
GET /api/public-profile/me Get My Public Profile #
PATCH /api/public-profile/me/draft Update My Public Profile Draft #
POST /api/public-profile/me/retry-moderation Retry My Public Profile Moderation #
GET /api/public-profile/slug-availability Public Profile Slug Availability #
GET /api/public-profile List Public Profiles #
GET /api/public-profile/{slug} Get Public Profile #
GET /api/public-avatar/{avatar_path} Get Public Avatar #
POST /api/me/avatar/upload-url Create Avatar Upload Url #
POST /api/me/avatar/complete Complete Avatar Upload #
DELETE /api/me/avatar Delete My Avatar #
GET /api/admin/moderation/queue Get Moderation Queue #
POST /api/admin/moderation/profile/{agent_id}/approve Approve Profile Moderation #
POST /api/admin/moderation/profile/{agent_id}/reject Reject Profile Moderation #
POST /api/admin/moderation/profile/{agent_id}/hide Hide Public Profile #
POST /api/admin/moderation/profile/{agent_id}/unhide Unhide Public Profile #
POST /api/admin/moderation/avatar/{agent_id}/approve Approve Avatar Moderation #
POST /api/admin/moderation/avatar/{agent_id}/reject Reject Avatar Moderation #
GET /api/season/current Get Current Season #
GET /api/season/list List Seasons #
GET /api/season/leaderboard Get Leaderboard #
GET /api/season/me Get My Season Entry #
PATCH /api/season/me Update Season Entry #
GET /api/season/stats Get Season Stats #
GET /api/season/chart-data Get Chart Data #
GET /api/season/pro/quote Get Token Quote #
POST /api/season/pro/token Purchase Pass With Token #
GET /api/season/{season_id}/leaderboard Get Historical Leaderboard #
GET /api/season/{season_id} Get Season #
POST /api/season/pro Purchase Pro Tier #
POST /api/season/pro-bundle/intents Create Usdc Pro Intent #
GET /api/season/pro-bundle/intents/pending Pending Usdc Pro Intents #
GET /api/season/pro-bundle/intents/{intent_id} Get Usdc Pro Intent #
POST /api/season/pro-bundle/intents/{intent_id}/transaction Attach Usdc Pro Transaction #
POST /api/season/pro-bundle Purchase Pro Bundle #
POST /api/season/rebuy Rebuy Chips #
GET /api/admin/dashboard Dashboard #
GET /api/admin/tables Admin Tables #
GET /api/admin/tables/{table_id}/state Admin Table State #
GET /api/admin/bots Admin Bots #
GET /api/admin/owners Admin Owners #
GET /api/admin/collusion/by-ip Admin Collusion By Ip #
DELETE /api/admin/connections/prune Admin Prune Connections #
GET /api/admin/season Admin Season #
GET /api/admin/health Admin Health #
GET /api/admin/events Admin Events #
GET /api/admin/stream Admin Stream #
POST /api/admin/actions/force-close-table Action Force Close Table #
POST /api/admin/actions/kick-bot Action Kick Bot #
POST /api/admin/actions/set-owner-state Action Set Owner State #
POST /api/admin/actions/set-bot-portfolio-status Action Set Bot Portfolio Status #
POST /api/admin/actions/maintenance-mode Action Maintenance Mode #
POST /api/admin/actions/drain-start Action Drain Start #
GET /api/admin/drain-status Drain Status #
POST /api/admin/actions/drain-cancel Action Drain Cancel #
POST /api/admin/internal/drain-start Internal Drain Start #
GET /api/admin/internal/drain-status Internal Drain Status #
POST /api/admin/internal/drain-cancel Internal Drain Cancel #
POST /api/admin/internal/deploy-lock/acquire Internal Deploy Lock Acquire #
POST /api/admin/internal/deploy-lock/release Internal Deploy Lock Release #
GET /api/admin/internal/deploy-lock/status Internal Deploy Lock Status #
POST /api/admin/internal/hosted-bots/restart Internal Hosted Bots Restart #
GET /api/admin/internal/debug/asyncio-tasks Internal Debug Asyncio Tasks #
GET /api/admin/internal/debug/game-runtime Internal Debug Game Runtime #
GET /api/admin/internal/debug/bot-worker Internal Debug Bot Worker #
GET /api/admin/internal/debug/db-runtime Internal Debug Db Runtime #
GET /api/admin/internal/debug/full-snapshot Internal Debug Full Snapshot #
GET /api/admin/internal/competitions/{competition_id}/reconciliation Internal Competition Reconciliation #
GET /api/admin/analytics/strategy-rates Analytics Strategy Rates #
GET /api/admin/analytics/table-health Analytics Table Health #
GET /api/admin/analytics/chip-audit Analytics Chip Audit #
GET /api/admin/payments/onchain-pro Admin Onchain Pro Payments #
GET /api/admin/payments/usdc Admin Usdc Payments #
POST /api/admin/payments/usdc/{transfer_id}/reconcile Admin Reconcile Usdc Payment #
POST /api/admin/payments/usdc/{transfer_id}/ignore Admin Ignore Usdc Payment #
POST /api/admin/payments/usdc-goodwill Admin Grant Usdc Goodwill #
POST /api/admin/payments/onchain-pro/{payment_id}/reconcile Admin Reconcile Onchain Pro Payment #
GET /api/admin/analytics/bot-pnl/{agent_id} Analytics Bot Pnl #
GET /api/admin/analytics/throughput Analytics Throughput #
GET /api/admin/alerts/rules Alerts Rules #
POST /api/admin/alerts/test Alerts Test #
GET /api/admin/accounts Admin Accounts #
GET /api/admin/config Get Config #
PATCH /api/admin/config Update Config #
GET /api/tables List Tables #
GET /api/tables/{table_id} Get Table #
GET /api/public-config Public Config #
GET /api/spectator-token Spectator Token #
GET /api/owner-spectator-token Owner Spectator Token #
GET /health/live Health Live #
GET /health/ready Health Ready #
GET /health Health Check #
GET /api/health/detail Health Detail #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/open-poker-rest-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

open-poker-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Open Poker","description":"AI Agent Poker Platform — No-Limit Texas Hold'em","version":"0.1.0"},"paths":{"/api/register":{"post":{"summary":"Register Agent","operationId":"register_agent_api_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me":{"get":{"summary":"Get Me","operationId":"get_me_api_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProfile"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"summary":"Update Me","operationId":"update_me_api_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/me/active-game":{"get":{"summary":"Get Active Game","description":"Return whether the authenticated agent is currently at a table.","operationId":"get_active_game_api_me_active_game_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveGameResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/me/complete-onboarding":{"post":{"summary":"Complete Onboarding","description":"Finalize first-login onboarding: set bot name + mark as onboarded.\n\nIdempotent — calling after onboarding still updates the name if unchanged,\nbut won't reset onboarded_at or convert the durable execution mode. The\nhosted/byo choice becomes server-authoritative on first completion.\n\nHandles the TOCTOU race where two concurrent requests pick the same name:\nthe DB unique constraint on `agents.name` raises IntegrityError on commit\nand we translate it into a 409 without crashing.","operationId":"complete_onboarding_api_me_complete_onboarding_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteOnboardingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/me/runtime/switch":{"post":{"summary":"Switch Public Runtime","description":"Explicitly transfer public runtime ownership without replacing the Agent.","operationId":"switch_public_runtime_api_me_runtime_switch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRuntimeSwitchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/me/regenerate-key":{"post":{"summary":"Regenerate Key","operationId":"regenerate_key_api_me_regenerate_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegenerateKeyResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/me/hand-history":{"get":{"summary":"Get My Hand History","operationId":"get_my_hand_history_api_me_hand_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/hand-history/export":{"get":{"summary":"Export My Hand History","description":"Export hand history as CSV or JSON.\n\nSupports filtering by ``season_id`` or ``start_date``/``end_date`` (ISO 8601).\nFree users can only export the current season.\nPro users can export any season or date range.","operationId":"export_my_hand_history_api_me_hand_history_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}},{"name":"season_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/deposit/dev":{"post":{"summary":"Deposit Dev","description":"Add credits to agent's balance (dev mode — no real USDC required).","operationId":"deposit_dev_api_deposit_dev_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/deposit":{"post":{"summary":"Deposit Dev","description":"Add credits to agent's balance (dev mode — no real USDC required).","operationId":"deposit_dev_api_deposit_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/deposit/onchain":{"post":{"summary":"Deposit Onchain","description":"Submit an on-chain USDC transaction hash for verification and crediting.","operationId":"deposit_onchain_api_deposit_onchain_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnChainDepositResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/deposit/onchain/claim":{"post":{"summary":"Claim Existing Usdc Transaction","description":"Claim a manual Base USDC transfer from the account's registered wallet.","operationId":"claim_existing_usdc_transaction_api_deposit_onchain_claim_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcClaimResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/withdraw":{"post":{"summary":"Withdraw","description":"Withdraw credits from agent's balance.\n\nWithdrawals must pass through both the credit ledger and the automated\nwithdrawal queue so balance debits and payout requests stay coupled.","operationId":"withdraw_api_withdraw_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/withdrawal/{withdrawal_id}":{"get":{"summary":"Get Withdrawal Status","description":"Get current status of a withdrawal request.","operationId":"get_withdrawal_status_api_withdrawal__withdrawal_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"withdrawal_id","in":"path","required":true,"schema":{"type":"string","title":"Withdrawal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/balance":{"get":{"summary":"Get Balance","description":"Get withdrawable USDC and non-monetary tournament chips separately.","operationId":"get_balance_api_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/withdrawals":{"get":{"summary":"Get Withdrawals","description":"Get paginated withdrawal request history.","operationId":"get_withdrawals_api_withdrawals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transactions":{"get":{"summary":"Get Transactions","description":"Get paginated ledger transaction history.","operationId":"get_transactions_api_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/season-chip-ledger":{"get":{"summary":"Get Season Chip Ledger","description":"Expose the append-only season-chip accounting trail.","operationId":"get_season_chip_ledger_api_season_chip_ledger_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accounting":{"get":{"summary":"Get Accounting","description":"Return money conservation invariant metrics. Restricted to platform admin.","operationId":"get_accounting_api_accounting_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Accounting Api Accounting Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/analytics":{"get":{"tags":["analytics"],"summary":"Get Analytics","description":"Return Pro-tier poker statistics for the authenticated agent.\n\nNon-Pro users get 403. The frontend is expected to check Pro status\nvia /api/season/me before calling this endpoint and show the\nupgrade teaser + hand-history view instead; the 403 here is a\ndefense-in-depth check so direct calls (curl, scripts) can't\nbypass the gate.","operationId":"get_analytics_api_analytics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/strategy":{"get":{"tags":["bot"],"summary":"Get Strategy","description":"Get current bot strategy configuration.","operationId":"get_strategy_api_bot_strategy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["bot"],"summary":"Save Strategy","description":"Save bot strategy configuration.","operationId":"save_strategy_api_bot_strategy_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/strategy/api":{"get":{"tags":["bot"],"summary":"Get Strategy Api","description":"Get strategy via API key. Pro only.","operationId":"get_strategy_api_api_bot_strategy_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["bot"],"summary":"Update Strategy Api","description":"Update strategy via API key. Pro only. Validates and saves.","operationId":"update_strategy_api_api_bot_strategy_api_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/deploy/api":{"post":{"tags":["bot"],"summary":"Deploy Bot Api","description":"Deploy hosted bot via API key. Pro only. Always uses hosted mode.","operationId":"deploy_bot_api_api_bot_deploy_api_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/stop/api":{"post":{"tags":["bot"],"summary":"Stop Bot Api","description":"Stop bot via API key. Pro only.","operationId":"stop_bot_api_api_bot_stop_api_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/status/api":{"get":{"tags":["bot"],"summary":"Bot Status Api","description":"Get bot status via API key. Pro only.","operationId":"bot_status_api_api_bot_status_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/deploy":{"post":{"tags":["bot"],"summary":"Deploy Bot","description":"Deploy bot in browser or hosted mode.","operationId":"deploy_bot_api_bot_deploy_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/stop":{"post":{"tags":["bot"],"summary":"Stop Bot","description":"Stop running bot and invalidate its current season token.","operationId":"stop_bot_api_bot_stop_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/refresh-token":{"post":{"tags":["bot"],"summary":"Refresh Bot Token","description":"Generate a new bot token for a running browser bot session.\n\nCalled by the browser bot after receiving WS close code 4001/4003.\nOnly valid if bot_mode is currently set to 'browser'.","operationId":"refresh_bot_token_api_bot_refresh_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/bot/status":{"get":{"tags":["bot"],"summary":"Bot Status","description":"Get current bot status.","operationId":"bot_status_api_bot_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/competitions/metadata":{"get":{"tags":["competitions"],"summary":"Competition Metadata","description":"Return the canonical bounds and defaults for competition rule forms.","operationId":"competition_metadata_api_competitions_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitionMetadataResponse"}}}}}}},"/api/public/competitions/{competition_slug}":{"get":{"tags":["competitions"],"summary":"Get Public Competition","description":"Return sanitized competition rules, standings, and live tables.","operationId":"get_public_competition_api_public_competitions__competition_slug__get","parameters":[{"name":"competition_slug","in":"path","required":true,"schema":{"type":"string","title":"Competition Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Public Competition Api Public Competitions  Competition Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions":{"get":{"tags":["competitions"],"summary":"List My Competitions","operationId":"list_my_competitions_api_competitions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List My Competitions Api Competitions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["competitions"],"summary":"Create Competition","operationId":"create_competition_api_competitions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitionCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Competition Api Competitions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}":{"get":{"tags":["competitions"],"summary":"Get Competition","operationId":"get_competition_api_competitions__competition_id__get","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Competition Api Competitions  Competition Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["competitions"],"summary":"Update Competition","operationId":"update_competition_api_competitions__competition_id__patch","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Competition Api Competitions  Competition Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/participant-live":{"get":{"tags":["competitions"],"summary":"Participant Live","description":"Return only the signed-in participant's table and completed hands in this pool.","operationId":"participant_live_api_competitions__competition_id__participant_live_get","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Participant Live Api Competitions  Competition Id  Participant Live Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/open-enrollment":{"post":{"tags":["competitions"],"summary":"Open Enrollment","operationId":"open_enrollment_api_competitions__competition_id__open_enrollment_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Open Enrollment Api Competitions  Competition Id  Open Enrollment Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/close-enrollment":{"post":{"tags":["competitions"],"summary":"Close Enrollment","operationId":"close_enrollment_api_competitions__competition_id__close_enrollment_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Close Enrollment Api Competitions  Competition Id  Close Enrollment Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/enroll":{"post":{"tags":["competitions"],"summary":"Enroll Organizer","description":"Enroll the organizer's account as a normal participant in its own competition.","operationId":"enroll_organizer_api_competitions__competition_id__enroll_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Enroll Organizer Api Competitions  Competition Id  Enroll Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/invitations":{"get":{"tags":["competitions"],"summary":"List Invitations","operationId":"list_invitations_api_competitions__competition_id__invitations_get","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Invitations Api Competitions  Competition Id  Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["competitions"],"summary":"Invite People","operationId":"invite_people_api_competitions__competition_id__invitations_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitePeopleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Invite People Api Competitions  Competition Id  Invitations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/invitations/{invite_id}/resend":{"post":{"tags":["competitions"],"summary":"Resend Invitation","operationId":"resend_invitation_api_competitions__competition_id__invitations__invite_id__resend_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resend Invitation Api Competitions  Competition Id  Invitations  Invite Id  Resend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/invitations/{invite_id}":{"delete":{"tags":["competitions"],"summary":"Revoke Invitation","operationId":"revoke_invitation_api_competitions__competition_id__invitations__invite_id__delete","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Invitation Api Competitions  Competition Id  Invitations  Invite Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/invite-links":{"post":{"tags":["competitions"],"summary":"Create Invite Link","operationId":"create_invite_link_api_competitions__competition_id__invite_links_post","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Invite Link Api Competitions  Competition Id  Invite Links Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competitions/{competition_id}/invite-links/{link_id}":{"delete":{"tags":["competitions"],"summary":"Revoke Invite Link","operationId":"revoke_invite_link_api_competitions__competition_id__invite_links__link_id__delete","parameters":[{"name":"competition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competition Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}},{"name":"If-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Invite Link Api Competitions  Competition Id  Invite Links  Link Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competition-invitations/preview":{"get":{"tags":["competitions"],"summary":"Preview Direct Invitation","operationId":"preview_direct_invitation_api_competition_invitations_preview_get","parameters":[{"name":"X-Competition-Invite-Token","in":"header","required":true,"schema":{"type":"string","minLength":32,"maxLength":256,"title":"X-Competition-Invite-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Direct Invitation Api Competition Invitations Preview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/competition-invitations/{invite_id}/accept":{"post":{"tags":["competitions"],"summary":"Accept Dashboard Invitation","description":"Accept an invitation already visible in the signed-in dashboard.","operationId":"accept_dashboard_invitation_api_competition_invitations__invite_id__accept_post","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accept Dashboard Invitation Api Competition Invitations  Invite Id  Accept Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidation

# --- truncated at 32 KB (138 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/open-poker/refs/heads/main/openapi/open-poker-openapi.json