{"openapi":"3.1.0","info":{"title":"Handwriting Practice API","version":"0.1.0","description":"A text-based Latin-alphabet letter-formation reference, a b/d and p/q reversal-error guide, print-vs-cursive differences, and a practice-worksheet-line generator — all local.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://handwriting.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/handwriting/docs"},"termsOfService":"https://connectorbay.com/handwriting/terms"},"servers":[{"url":"https://handwriting.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/handwriting/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/list_letters":{"post":{"operationId":"list_letters","summary":"Lists the alphabet and which letters are commonly reversed by early writers (b, d, p, q).","description":"Lists the alphabet and which letters are commonly reversed by early writers (b, d, p, q).","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_lettersArguments","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/letter_formation":{"post":{"operationId":"letter_formation","summary":"Gives full stroke-by-stroke formation steps for one letter. Use for \"how do you write a lowercase b\".","description":"Gives full stroke-by-stroke formation steps for one letter. Use for \"how do you write a lowercase b\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"letter":{"description":"A single letter, a-z or A-Z.","examples":["b"],"title":"Letter","type":"string"},"case":{"default":"both","description":"both | upper | lower","title":"Case","type":"string"}},"required":["letter"],"title":"letter_formationArguments","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/letters_by_stroke_type":{"post":{"operationId":"letters_by_stroke_type","summary":"Groups letters by the type of their first stroke — useful for teaching letters with similar motor","description":"Groups letters by the type of their first stroke — useful for teaching letters with similar motor\n    patterns together. Use for \"which letters start with a curve\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stroke_type":{"description":"vertical | curve | diagonal | horizontal","title":"Stroke Type","type":"string"},"case":{"default":"lower","description":"upper | lower","title":"Case","type":"string"}},"required":["stroke_type"],"title":"letters_by_stroke_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/reversal_reference":{"post":{"operationId":"reversal_reference","summary":"Explains the b/d or p/q letter-reversal confusion: why it happens, the distinguishing feature, and","description":"Explains the b/d or p/q letter-reversal confusion: why it happens, the distinguishing feature, and\n    concrete correction tips. Use for \"why does my kid write d backwards\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pair":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"'b/d' or 'p/q'; omit for both.","title":"Pair"}},"title":"reversal_referenceArguments","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/print_vs_cursive":{"post":{"operationId":"print_vs_cursive","summary":"Compares print (manuscript) and cursive handwriting: letter connections, typical teaching order, shape","description":"Compares print (manuscript) and cursive handwriting: letter connections, typical teaching order, shape\n    differences, and slant. Use for \"what's the difference between print and cursive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"print_vs_cursiveArguments","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/worksheet_lines":{"post":{"operationId":"worksheet_lines","summary":"Builds a structured text-based 'trace this' style practice plan for a word or short phrase: one letter-","description":"Builds a structured text-based 'trace this' style practice plan for a word or short phrase: one letter-\n    practice line per distinct letter (with real stroke-order steps) followed by whole-word practice lines,\n    flagging any commonly-reversed letters. This describes the practice plan in text; it does not render a\n    worksheet image. Use for \"make a practice sheet for the word cat\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"text":{"description":"A word or short phrase to build a practice plan for.","examples":["cat"],"maxLength":40,"title":"Text","type":"string"},"repetitions":{"default":5,"description":"Times to practice each individual letter.","maximum":20,"minimum":1,"title":"Repetitions","type":"integer"},"word_repetitions":{"default":3,"description":"Times to practice each whole word.","maximum":10,"minimum":1,"title":"Word Repetitions","type":"integer"}},"required":["text"],"title":"worksheet_linesArguments","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}}}}