{"openapi":"3.1.0","info":{"title":"One Move API","description":"Public API for One Move, the weekly chess and poker improvement loop. Public reads are anonymous. OAuth 2.0 client credentials are available for attributable limits. The stable surface is /v1; breaking changes move to /v2. Every response carries RateLimit headers; writes accept an Idempotency-Key.","contact":{"name":"One Move support","url":"https://getonemove.app/support"},"license":{"name":"Proprietary"},"version":"1.0.0","x-api-version":"v1","x-deprecation-policy":"https://api.getonemove.app/v1/deprecation"},"servers":[{"url":"https://api.getonemove.app","description":"Production"}],"paths":{"/checkout":{"post":{"summary":"Start Checkout","description":"From a chess Free report (site + username), a poker one (site=pokerstars, no username), or a Lapsed\nPlayer's account page. Signed in, the Player's Stripe customer is reused, so the webhook finds them again.\nClosed (403) unless CHECKOUT_OPEN=1: opening it to strangers is the go-live Ask.","operationId":"start_checkout_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/stripe/webhook":{"post":{"summary":"Webhook","operationId":"webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/messages":{"post":{"summary":"Message","description":"The Support and Feature requests forms: emailed to SUPPORT_EMAIL (server-side only; no address on the site).","operationId":"message_messages_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/sign-in":{"post":{"summary":"Request Link","operationId":"request_link_sign_in_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/sessions":{"post":{"summary":"Redeem Link","operationId":"redeem_link_sessions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/portal":{"post":{"summary":"Open Portal","operationId":"open_portal_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/settings":{"post":{"summary":"Settings","description":"Browser form: time_zone, chesscom, lichess (blank unlinks), time_control (blank = most played).","operationId":"settings_settings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/unsubscribe/{token}":{"post":{"summary":"Unsubscribe","description":"One click, no sign-in: the Player becomes Lapsed (Stripe cancelled) and gets no more Reviews.","operationId":"unsubscribe_unsubscribe__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sign-out":{"post":{"summary":"Sign Out","description":"End the session: delete its row and clear the cookie. POST only, so a prefetched link can't sign a Player out.","operationId":"sign_out_sign_out_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/account/delete":{"post":{"summary":"Delete Account","operationId":"delete_account_account_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/me":{"get":{"summary":"Me","operationId":"me_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/reviews":{"get":{"summary":"Reviews","description":"Every Review, newest first, each with its Verdict (what the history page shows: numbers, cue, lesson,\nDrill summary, whether a Lesson page exists and whether that week's Drill set is finished, the chess time\nclass it measured, and for a Broken Review the next Constraint's name/what/metric/target/lower; no Evidence\nrows), and per Subject the trend: the unbroken run of latest Reviews on the latest Review's Constraint,\noldest first. A Skipped review is a point with no number, so the chart shows the gap. A Skipped review also\ncarries the Evidence count and minimum behind its shortfall, so the page can say \"4 of 10\" without\ninventing it.","operationId":"reviews_reviews_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/reviews/{week}":{"get":{"summary":"Review","description":"One stored Review for the signed-in Player, with the cue, lesson, Lesson page and Evidence positions\nthe Review page shows, and whether that week's Drill set is finished (the Lesson waits for it).\nAnother Player's week is a 404, and so is a week that was never reviewed.","operationId":"review_reviews__week__get","parameters":[{"name":"week","in":"path","required":true,"schema":{"type":"string","title":"Week"}},{"name":"subject","in":"query","required":false,"schema":{"enum":["chess","poker"],"type":"string","default":"chess","title":"Subject"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/drills/{week}":{"get":{"summary":"Drill Set","description":"The current item appears only once the Prediction is in; its answer and engine scores never leave.","operationId":"drill_set_drills__week__get","parameters":[{"name":"week","in":"path","required":true,"schema":{"type":"string","title":"Week"}},{"name":"subject","in":"query","required":false,"schema":{"enum":["chess","poker"],"type":"string","default":"chess","title":"Subject"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/drills/{week}/prediction":{"post":{"summary":"Predict","operationId":"predict_drills__week__prediction_post","parameters":[{"name":"week","in":"path","required":true,"schema":{"type":"string","title":"Week"}},{"name":"subject","in":"query","required":false,"schema":{"enum":["chess","poker"],"type":"string","default":"chess","title":"Subject"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/drills/{week}/answers":{"post":{"summary":"Answer","operationId":"answer_drills__week__answers_post","parameters":[{"name":"week","in":"path","required":true,"schema":{"type":"string","title":"Week"}},{"name":"subject","in":"query","required":false,"schema":{"enum":["chess","poker"],"type":"string","default":"chess","title":"Subject"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rechecks":{"post":{"summary":"Opt In","description":"Browser form from a chess Free report: site, username, time_class, email, consent=1 (an unticked box).","operationId":"opt_in_rechecks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/rechecks/{token}/stop":{"post":{"summary":"Stop","operationId":"stop_rechecks__token__stop_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poker-uploads":{"post":{"summary":"Upload Week","description":"A signed-in Player's whole hand-history folder for Monday's poker Review (enrols them in poker) -> 303 back\nto /poker/week with ?uploaded=<Hands> or ?error=. Only the latest 300 Hands not yet reviewed are kept.","operationId":"upload_week_poker_uploads_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/poker-week":{"get":{"summary":"Poker Week Status","description":"This week's Hands so far for the signed-in Player: {hands, minimum, enough} where hands counts what the\nnext poker Review will use (including a Skipped Review's carried Hands).","operationId":"poker_week_status_poker_week_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/v1/free-reports/{site}/{username}":{"get":{"summary":"Get a public chess Free report","description":"Read or queue a Free report for a chess.com or Lichess username. 200 with the report, 202 with an async job, 404 not enough games, 429 rate limited.","operationId":"free_report_v1_free_reports__site___username__get","parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string","title":"Site"}},{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"time_class","in":"query","required":false,"schema":{"anyOf":[{"enum":["rapid","blitz"],"type":"string"},{"type":"null"}],"title":"Time Class"}}],"responses":{"200":{"description":"The Free report is ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeReport"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"202":{"description":"The report is queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}},"headers":{"Location":{"schema":{"type":"string","format":"uri"}}}}}}},"/free-reports/{site}/{username}":{"get":{"summary":"Get a public chess Free report","description":"Read or queue a Free report for a chess.com or Lichess username. 200 with the report, 202 with an async job, 404 not enough games, 429 rate limited.","operationId":"free_report_free_reports__site___username__get","parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string","title":"Site"}},{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"time_class","in":"query","required":false,"schema":{"anyOf":[{"enum":["rapid","blitz"],"type":"string"},{"type":"null"}],"title":"Time Class"}}],"responses":{"200":{"description":"The Free report is ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeReport"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"202":{"description":"The report is queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}},"headers":{"Location":{"schema":{"type":"string","format":"uri"}}}}}}},"/v1/free-reports/{site}/{username}/drill":{"get":{"summary":"Free Drill","description":"Grade a move (UCI) on a chess Free report's sample Drill item from its stored scores. Reports built\nbefore it existed have none: 404.","operationId":"free_drill_v1_free_reports__site___username__drill_get","parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string","title":"Site"}},{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"answer","in":"query","required":true,"schema":{"type":"string","title":"Answer"}},{"name":"time_class","in":"query","required":false,"schema":{"anyOf":[{"enum":["rapid","blitz"],"type":"string"},{"type":"null"}],"title":"Time Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/free-reports/{site}/{username}/drill":{"get":{"summary":"Free Drill","description":"Grade a move (UCI) on a chess Free report's sample Drill item from its stored scores. Reports built\nbefore it existed have none: 404.","operationId":"free_drill_free_reports__site___username__drill_get","parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string","title":"Site"}},{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"answer","in":"query","required":true,"schema":{"type":"string","title":"Answer"}},{"name":"time_class","in":"query","required":false,"schema":{"anyOf":[{"enum":["rapid","blitz"],"type":"string"},{"type":"null"}],"title":"Time Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notify":{"post":{"summary":"Notify","description":"Browser form from a queued Free report: site, username, time_class ('' = the default; poker has none), email.\nOne email when that report is ready -> 303 back to the report page with ?notify=1 (or =invalid).","operationId":"notify_notify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/poker-reports":{"post":{"summary":"Upload Hands","description":"Browser form (multipart: screen_name, files) -> 303 to the private report page, or back with ?error=.","operationId":"upload_hands_poker_reports_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/v1/poker-reports/{id}":{"get":{"summary":"Get a private poker Free report","description":"Whoever holds the id is the owner. 200 report (with its share token, if any) | 202 progress | 404.","operationId":"private_poker_report_v1_poker_reports__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"The private poker report.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeReport"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poker-reports/{id}":{"get":{"summary":"Get a private poker Free report","description":"Whoever holds the id is the owner. 200 report (with its share token, if any) | 202 progress | 404.","operationId":"private_poker_report_poker_reports__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"The private poker report.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeReport"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poker-reports/{id}/share":{"post":{"summary":"Share Poker Report","operationId":"share_poker_report_poker_reports__id__share_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poker-reports/{id}/share/revoke":{"post":{"summary":"Revoke Poker Share","description":"Stop sharing: the share link 404s from now on. The private report and its URL are untouched.","operationId":"revoke_poker_share_poker_reports__id__share_revoke_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/shared-poker-reports/{token}":{"get":{"summary":"Shared Poker Report","operationId":"shared_poker_report_v1_shared_poker_reports__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/shared-poker-reports/{token}":{"get":{"summary":"Shared Poker Report","operationId":"shared_poker_report_shared_poker_reports__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1":{"get":{"tags":["Discovery"],"summary":"Versioned API entry point","description":"The versioned API root. Public endpoints are under /v1; protected writes answer 401 here.","operationId":"v1_root_v1_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/v1/health":{"get":{"tags":["Discovery"],"summary":"Health check","description":"Liveness and version. Safe to poll.","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health V1 Health Get"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/v1/constraints":{"get":{"tags":["Constraints"],"summary":"List the Constraint catalog","description":"List constraints with Targets by Band. Cursor pagination: limit (1-50), cursor, subject.","operationId":"constraints_v1_constraints_get","parameters":[{"name":"subject","in":"query","required":false,"schema":{"anyOf":[{"enum":["chess","poker"],"type":"string"},{"type":"null"}],"title":"Subject"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConstraintPage"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/constraints/{slug}":{"get":{"tags":["Constraints"],"summary":"Get one Constraint","description":"One Constraint by slug, with its metric definition, direction and Targets.","operationId":"constraint_v1_constraints__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Constraint"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["Reports"],"summary":"Get an async report job","description":"Async-job status: queued, running, done or failed, with status_url and result_url.","operationId":"job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports":{"post":{"tags":["Reports"],"summary":"Queue a chess Free report","description":"Queue a public chess Free report. Supports Idempotency-Key. Returns a job and status_url.","operationId":"queue_report_v1_reports_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequest"}}},"required":true},"responses":{"202":{"description":"The report is queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/v1/batch":{"post":{"tags":["Batch"],"summary":"Run up to 10 reads in one call","description":"Batch read operations: constraints.get, constraints.list and report.get. Supports Idempotency-Key.","operationId":"batch_v1_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/v1/sandbox/reports/{site}/{username}":{"get":{"tags":["Sandbox"],"summary":"Read a synthetic sandbox report","description":"A stable synthetic report for schema tests. Never reads a real account, queues work or calls Claude.","operationId":"sandbox_report_v1_sandbox_reports__site___username__get","parameters":[{"name":"site","in":"path","required":true,"schema":{"enum":["chesscom","lichess"],"type":"string","title":"Site"}},{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sandbox Report V1 Sandbox Reports  Site   Username  Get"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deprecation":{"get":{"tags":["Discovery"],"summary":"Versioning and deprecation policy","description":"The stable version, how breaking changes are signalled, and the notice window.","operationId":"deprecation_v1_deprecation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeprecationOut"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}}},"/v1/clients":{"post":{"tags":["Authentication"],"summary":"Register an OAuth client","description":"Self-serve client registration. The secret is shown once. Public reads need no client.","operationId":"register_client_v1_clients_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/oauth2/token":{"post":{"tags":["Authentication"],"summary":"Exchange credentials for a bearer token","description":"OAuth 2.0 client_credentials and the auth.md anonymous identity assertion grant.","operationId":"token_oauth2_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/oauth2/revoke":{"post":{"tags":["Authentication"],"summary":"Revoke a bearer token","description":"RFC 7009 token revocation. Idempotent: 200 even when the token was already gone.","operationId":"revoke_oauth2_revoke_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/agent/identity":{"get":{"tags":["Authentication"],"summary":"Agent identity endpoint description","description":"Anonymous registration for the auth.md profile: returns a short-lived identity assertion.","operationId":"identity_agent_identity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}},"post":{"tags":["Authentication"],"summary":"Register an anonymous agent identity","description":"Anonymous registration for the auth.md profile: returns a short-lived identity assertion.","operationId":"identity_agent_identity_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/agent/identity/claim":{"get":{"tags":["Authentication"],"summary":"Claim ceremony status","description":"The claim endpoint is present for auth.md clients; anonymous public reads do not need it.","operationId":"claim_agent_identity_claim_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}},"post":{"tags":["Authentication"],"summary":"Start a claim ceremony","description":"The claim endpoint is present for auth.md clients; anonymous public reads do not need it.","operationId":"claim_agent_identity_claim_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/agent/events":{"post":{"tags":["Authentication"],"summary":"Agent security events","description":"Compatibility endpoint for the auth.md events URI. No events are accepted today.","operationId":"agent_events_agent_events_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/ask":{"get":{"tags":["NLWeb"],"summary":"Ask the docs in natural language (NLWeb v0.55, GET)","description":"GET form of NLWeb ask: ?query= or ?q= or ?text=, plus ?streaming=true for SSE.","operationId":"ask_get_ask_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}}},"post":{"tags":["NLWeb"],"summary":"Ask the docs in natural language (NLWeb v0.55)","description":"NLWeb v0.55: query.text -> _meta + results. prefer.streaming=true returns SSE events.","operationId":"ask_ask_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/a2a":{"post":{"tags":["A2A"],"summary":"A2A JSON-RPC endpoint","description":"Minimal A2A JSON-RPC surface. message/send returns a text message pointing at the report API.","operationId":"a2a_a2a_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/mcp":{"post":{"tags":["MCP"],"summary":"One Move product MCP server","description":"Streamable HTTP MCP: initialize, tools/list and tools/call. Public tools need no auth.","operationId":"mcp_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}},"/docs/mcp":{"post":{"tags":["MCP"],"summary":"One Move documentation MCP server","description":"Streamable HTTP MCP for documentation: search_docs, get_doc and resources.","operationId":"docs_mcp_docs_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Replays with the same key and body return the first response for 24 hours."}]}}},"components":{"schemas":{"BatchOperation":{"properties":{"id":{"type":"string","title":"Id"},"tool":{"type":"string","enum":["constraints.get","constraints.list","report.get"],"title":"Tool"},"arguments":{"additionalProperties":true,"type":"object","title":"Arguments"}},"type":"object","required":["id","tool"],"title":"BatchOperation"},"BatchRequest":{"properties":{"operations":{"items":{"$ref":"#/components/schemas/BatchOperation"},"type":"array","maxItems":10,"minItems":1,"title":"Operations"}},"type":"object","required":["operations"],"title":"BatchRequest"},"BatchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BatchResult"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"BatchResponse"},"BatchResult":{"properties":{"id":{"type":"string","title":"Id"},"ok":{"type":"boolean","title":"Ok"},"result":{"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","ok"],"title":"BatchResult"},"ClientOut":{"properties":{"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"token_endpoint":{"type":"string","title":"Token Endpoint"}},"type":"object","required":["client_id","client_secret","scopes","token_endpoint"],"title":"ClientOut"},"ClientRequest":{"properties":{"client_name":{"type":"string","maxLength":80,"minLength":1,"title":"Client Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"}},"type":"object","required":["client_name"],"title":"ClientRequest"},"Constraint":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable URL slug, e.g. conversion-from-plus-2."},"subject":{"type":"string","enum":["chess","poker"],"title":"Subject"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"what":{"type":"string","title":"What"},"lower":{"type":"boolean","title":"Lower","description":"True when a lower metric is better."},"targets":{"additionalProperties":{"type":"number"},"type":"object","title":"Targets","description":"Target by Band: chess rating brackets or poker table size."},"url":{"type":"string","title":"Url"}},"type":"object","required":["slug","subject","key","name","what","lower","targets","url"],"title":"Constraint"},"ConstraintPage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Constraint"},"type":"array","title":"Data"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["data","has_more"],"title":"ConstraintPage"},"DeprecationOut":{"properties":{"stable":{"type":"string","title":"Stable"},"breaking":{"type":"string","title":"Breaking"},"notice_days":{"type":"integer","title":"Notice Days"},"headers":{"items":{"type":"string"},"type":"array","title":"Headers"},"changelog":{"type":"string","title":"Changelog"}},"type":"object","required":["stable","breaking","notice_days","headers","changelog"],"title":"DeprecationOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobOut":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"status":{"type":"string","enum":["queued","running","done","failed"],"title":"Status"},"site":{"type":"string","title":"Site"},"username":{"type":"string","title":"Username"},"time_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Class"},"created":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created"},"code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Code"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_url":{"type":"string","title":"Status Url"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"}},"type":"object","required":["job_id","status","site","username","status_url"],"title":"JobOut"},"ReportRequest":{"properties":{"site":{"type":"string","enum":["chesscom","lichess"],"title":"Site"},"username":{"type":"string","maxLength":50,"minLength":1,"title":"Username"},"time_class":{"anyOf":[{"type":"string","enum":["rapid","blitz"]},{"type":"null"}],"title":"Time Class"}},"type":"object","required":["site","username"],"title":"ReportRequest"},"TokenOut":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","const":"Bearer","title":"Token Type","default":"Bearer"},"expires_in":{"type":"integer","title":"Expires In"},"scope":{"type":"string","title":"Scope"}},"type":"object","required":["access_token","expires_in","scope"],"title":"TokenOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"JobAccepted":{"type":"object","description":"A queued async report job.","required":["status","job_id","status_url"],"properties":{"status":{"type":"string","enum":["queued","running"]},"job_id":{"type":"integer"},"status_url":{"type":"string","format":"uri"},"ahead":{"type":"integer","description":"Jobs ahead in the queue."},"minutes":{"type":"integer","description":"Rough wait in minutes."}}},"FreeReport":{"type":"object","description":"A chess Free report: the one Constraint, its metric, the Target and the evidence.","required":["name","metric","target","lower","band","games","site","username"],"properties":{"subject":{"type":"string","enum":["chess","poker"]},"constraint":{"type":"string"},"name":{"type":"string"},"what":{"type":"string"},"lower":{"type":"boolean"},"metric":{"type":["number","null"]},"target":{"type":"number"},"band":{"type":"integer"},"games":{"type":"integer"},"site":{"type":"string","enum":["chesscom","lichess","pokerstars"]},"username":{"type":"string"},"time_class":{"type":["string","null"],"enum":["rapid","blitz",null]},"default_time_class":{"type":"string"},"rating":{"type":"integer"},"skipped":{"type":"boolean"},"broken":{"type":"boolean"},"shortfall":{"type":"integer"},"writeup":{"type":"string"},"examples":{"type":"array","items":{"type":"object","additionalProperties":true}},"drill":{"type":["object","null"],"additionalProperties":true}}}},"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.0 client credentials and the auth.md anonymous assertion.","flows":{"clientCredentials":{"tokenUrl":"https://api.getonemove.app/oauth2/token","scopes":{"reports:read":"Read public reports, jobs and constraints.","reports:write":"Queue a report or submit a batch.","docs:read":"Read documentation through the MCP docs server."}},"authorizationCode":{"authorizationUrl":"https://api.getonemove.app/oauth2/authorize","tokenUrl":"https://api.getonemove.app/oauth2/token","scopes":{"reports:read":"Read public reports, jobs and constraints.","reports:write":"Queue a report or submit a batch.","docs:read":"Read documentation through the MCP docs server."}}}},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque"}}},"tags":[{"name":"Discovery","description":"Health, API root and deprecation policy."},{"name":"Constraints","description":"The chess and poker Constraint catalog."},{"name":"Reports","description":"Public Free reports and async jobs."},{"name":"Batch","description":"Several reads in one request."},{"name":"Sandbox","description":"Synthetic data for schema tests."},{"name":"Authentication","description":"OAuth 2.0 and the auth.md profile."},{"name":"NLWeb","description":"Natural-language documentation search."},{"name":"MCP","description":"Streamable HTTP MCP servers."},{"name":"A2A","description":"Agent-to-agent JSON-RPC surface."}],"security":[{"oauth2":["reports:read"]},{}],"externalDocs":{"description":"Human API documentation","url":"https://getonemove.app/docs/api"}}