{"openapi":"3.1.0","info":{"title":"Letter Grid Words API","version":"0.1.0","description":"A real, playable, fully local letter-grid word-finding game — stateless: the caller holds and passes the game state between calls.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://bogglewords.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/bogglewords/docs"},"termsOfService":"https://connectorbay.com/bogglewords/terms"},"servers":[{"url":"https://bogglewords.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/bogglewords/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":"Generate a fresh letter grid (size x size), weighted by realistic English letter frequency. Returns","description":"Generate a fresh letter grid (size x size), weighted by realistic English letter frequency. Returns\n    the game `state` — hold onto it and pass it into every other tool. Use for \"start a letter grid game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"size":{"default":4,"description":"Grid side length: 4, 5, or 6.","maximum":6,"minimum":4,"title":"Size","type":"integer"},"min_word_length":{"default":3,"description":"Shortest word that counts.","maximum":6,"minimum":3,"title":"Min Word Length","type":"integer"}},"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_word":{"post":{"operationId":"submit_word","summary":"Try one word against the current grid. Validates real-dictionary membership AND actually searches","description":"Try one word against the current grid. Validates real-dictionary membership AND actually searches\n    the grid for a valid adjacent, non-reused-cell path spelling it; scores it by length if valid. Returns\n    the updated `state` (pass THAT into the next call) and the `path` found, as [row, col] cells.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state returned by new_game or any other tool — pass it back in unchanged except for whatever the tool itself asks you to submit.","title":"State","type":"object"},"word":{"description":"The word the player wants to try.","minLength":1,"title":"Word","type":"string"}},"required":["state","word"],"title":"submit_wordArguments","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_all_words":{"post":{"operationId":"find_all_words","summary":"Run a real trie/DFS solver over the whole grid and list every valid dictionary word it contains,","description":"Run a real trie/DFS solver over the whole grid and list every valid dictionary word it contains,\n    each with the path that spells it, marking which were already found. A \"show me every word\" mode.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state returned by new_game or any other tool — pass it back in unchanged except for whatever the tool itself asks you to submit.","title":"State","type":"object"}},"required":["state"],"title":"find_all_wordsArguments","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/get_hint":{"post":{"operationId":"get_hint","summary":"A nudge toward one unfound word — its length and rough grid location only, never the whole word.","description":"A nudge toward one unfound word — its length and rough grid location only, never the whole word.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state returned by new_game or any other tool — pass it back in unchanged except for whatever the tool itself asks you to submit.","title":"State","type":"object"}},"required":["state"],"title":"get_hintArguments","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":{"post":{"operationId":"render","summary":"A human-readable rendering of the current grid, found words, and score.","description":"A human-readable rendering of the current grid, found words, and score.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The full game state returned by new_game or any other tool — pass it back in unchanged except for whatever the tool itself asks you to submit.","title":"State","type":"object"}},"required":["state"],"title":"renderArguments","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}}}}