{"openapi":"3.1.0","info":{"title":"Rhyme Duel API","version":"0.1.0","description":"A fully local, stateless rhyming word game — validate a chain of genuine rhymes with a curated ending-sound dataset, or get an assist suggestion.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://rhymeduel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/rhymeduel/docs"},"termsOfService":"https://connectorbay.com/rhymeduel/terms"},"servers":[{"url":"https://rhymeduel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/rhymeduel/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/new_game":{"post":{"operationId":"new_game","summary":"Starts a new rhyme chain. Use for \"let's play a rhyming game\", \"start with the word light\".","description":"Starts a new rhyme chain. Use for \"let's play a rhyming game\", \"start with the word light\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"prompt_word":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A word to start the rhyme chain with; must be in the rhyme dataset. Omit for a random start.","title":"Prompt Word"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Optional RNG seed for a reproducible random start word.","title":"Seed"}},"title":"new_gameArguments","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/submit_rhyme":{"post":{"operationId":"submit_rhyme","summary":"Validates and (if valid) appends the player's rhyme: must be recognized, unused, and share an ending-sound","description":"Validates and (if valid) appends the player's rhyme: must be recognized, unused, and share an ending-sound\n    group with the chain's last word. Use for \"I say 'flight'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state object as previously returned by new_game or a gameplay tool. Pass it back unmodified except through this API.","title":"State","type":"object"},"word":{"description":"Your rhyming word for the chain's current last word.","minLength":1,"title":"Word","type":"string"}},"required":["state","word"],"title":"submit_rhymeArguments","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/assist":{"post":{"operationId":"assist","summary":"\"Give me a rhyme\" assist mode: suggests one valid, unused rhyme WITHOUT applying it. Use for \"give me a","description":"\"Give me a rhyme\" assist mode: suggests one valid, unused rhyme WITHOUT applying it. Use for \"give me a\n    rhyme\", \"what rhymes with cough\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state object as previously returned by new_game or a gameplay tool. Pass it back unmodified except through this API.","title":"State","type":"object"},"word":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Get a rhyme for this specific word instead of the chain's last word.","title":"Word"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Optional RNG seed for a reproducible suggestion.","title":"Seed"}},"required":["state"],"title":"assistArguments","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/render_chain":{"post":{"operationId":"render_chain","summary":"Plain-text view of the rhyme chain so far, its length, and score. Use for \"show me the chain\".","description":"Plain-text view of the rhyme chain so far, its length, and score. Use for \"show me the chain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state object as previously returned by new_game or a gameplay tool. Pass it back unmodified except through this API.","title":"State","type":"object"}},"required":["state"],"title":"render_chainArguments","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/group_list":{"post":{"operationId":"group_list","summary":"Lists the built-in rhyme-family groups (an ending sound and how many words each has). Use for \"what rhyme","description":"Lists the built-in rhyme-family groups (an ending sound and how many words each has). Use for \"what rhyme\n    families do you know\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"group_listArguments","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/dataset_stats":{"post":{"operationId":"dataset_stats","summary":"Summary stats of the bundled rhyme dataset (word count, rhyme-family group count). Use for \"how many words","description":"Summary stats of the bundled rhyme dataset (word count, rhyme-family group count). Use for \"how many words\n    can you rhyme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"dataset_statsArguments","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}}}}