{"openapi":"3.1.0","info":{"title":"Frametime API","version":"0.1.0","description":"A fully local, hand-curated speedrunning technique & terminology reference: run categories, timing conventions, generic technique classes, community terminology, a generic verification/submission process overview, genre-to-category suggestions, a short history of the hobby, and beginner tips. Original content, no step-by-step exploits for any specific real game.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://frametime.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/frametime/docs"},"termsOfService":"https://connectorbay.com/frametime/terms"},"servers":[{"url":"https://frametime.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/frametime/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/category_info":{"post":{"operationId":"category_info","summary":"Full detail for one speedrunning category: what counts as meeting it, common community debates about","description":"Full detail for one speedrunning category: what counts as meeting it, common community debates about\n    its definition, and related categories. Use for \"what does any% mean\", \"what's the difference between\n    glitchless and no major skips\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A run category's name or alias.","examples":["any%","100%","glitchless","low%","individual level"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"category_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/timing_method":{"post":{"operationId":"timing_method","summary":"Explains one speedrunning timing convention: how it's measured and when it's typically used. Use for","description":"Explains one speedrunning timing convention: how it's measured and when it's typically used. Use for\n    \"what's RTA\", \"what's the difference between RTA and IGT\", \"what is loadless timing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A timing convention's name or alias.","examples":["RTA","IGT","loadless","frame time"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"timing_methodArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/technique_class_info":{"post":{"operationId":"technique_class_info","summary":"Explains one generic speedrunning technique class conceptually — what it is, how it generically works,","description":"Explains one generic speedrunning technique class conceptually — what it is, how it generically works,\n    whether it's TAS-only, and a legality note — never step-by-step exploit instructions for a specific real\n    game. Use for \"what is sequence breaking\", \"what's a wrong warp\", \"is arbitrary code execution allowed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"A technique class's name or alias.","examples":["sequence breaking","clipping","wrong warp","TAS vs human","RNG manipulation"],"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"technique_class_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/term_glossary":{"post":{"operationId":"term_glossary","summary":"Definitions of common speedrunning community terms — PB, WR, splits, autosplitter, verifier, meta, sum","description":"Definitions of common speedrunning community terms — PB, WR, splits, autosplitter, verifier, meta, sum\n    of best, and more. Use for \"what does PB mean\", \"what's a ghost in a speedrun\", \"what's an autosplitter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific community term to look up; omit to list all.","title":"Term"}},"title":"term_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/verification_process_overview":{"post":{"operationId":"verification_process_overview","summary":"A generic overview of how a submitted speedrun gets verified and accepted onto a community leaderboard:","description":"A generic overview of how a submitted speedrun gets verified and accepted onto a community leaderboard:\n    the typical steps, common rejection reasons, the roles involved (runner, verifier, moderator), and how\n    appeals usually work. Describes the shared pattern across communities, not any one platform's exact\n    process. Use for \"how does speedrun verification work\", \"why would a run get rejected\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"verification_process_overviewArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/find_category_for_game_type":{"post":{"operationId":"find_category_for_game_type","summary":"Suggests which run categories and technique classes are typically relevant for a stated game genre, with","description":"Suggests which run categories and technique classes are typically relevant for a stated game genre, with\n    a short note on why. Use for \"what categories fit a metroidvania\", \"what techniques matter for racing\n    games\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game_type":{"description":"A game genre or type.","examples":["platformer","metroidvania","RPG","racing game","puzzle","FPS","open world"],"minLength":1,"title":"Game Type","type":"string"}},"required":["game_type"],"title":"find_category_for_game_typeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/history_note":{"post":{"operationId":"history_note","summary":"Short, qualitative notes on the history of speedrunning as a hobby and community practice — competitive","description":"Short, qualitative notes on the history of speedrunning as a hobby and community practice — competitive\n    time-trialing's origins, the rise of tool-assisted runs, charity marathons, and centralized leaderboards.\n    Use for \"how did speedrunning start\", \"when did speedrunning marathons begin\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"history_noteArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/beginner_tips":{"post":{"operationId":"beginner_tips","summary":"A curated, ordered shortlist of practical tips for someone just starting to speedrun, from picking a","description":"A curated, ordered shortlist of practical tips for someone just starting to speedrun, from picking a\n    game through submitting a first run. Use for \"tips for a beginner speedrunner\", \"how do I start\n    speedrunning\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":5,"description":"How many tips to return.","maximum":12,"minimum":1,"title":"Count","type":"integer"}},"title":"beginner_tipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}