{"openapi":"3.1.0","info":{"title":"Paddle API","version":"0.1.0","description":"A fully local, hand-curated table tennis (ping pong) reference: rule lookups (serving, lets, scoring, the expedite system, doubles order, obstruction), a rules glossary, technique how-tos (strokes, serves, grips) with situational suggestions, equipment specs (blades, rubbers, balls, tables), singles/doubles/mixed/team/para format explainers, a scoring summary, and beginner tips.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://paddle.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/paddle/docs"},"termsOfService":"https://connectorbay.com/paddle/terms"},"servers":[{"url":"https://paddle.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/paddle/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/rule_lookup":{"post":{"operationId":"rule_lookup","summary":"Full detail on one table tennis rule topic (serving, let, scoring to 11, match format, service","description":"Full detail on one table tennis rule topic (serving, let, scoring to 11, match format, service\n    rotation/deuce, the expedite system, doubles order, edge vs side balls, the two-bounce rule, net/post\n    contact, table touch and obstruction, changing ends, the two-color racket rule); omit to list all\n    topics. Use for \"what's a let\", \"how does the expedite system work\", \"how does scoring work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A rule topic name or alias; omit to list every topic.","examples":["serving","let","expedite system","scoring to 11","doubles order"],"title":"Topic"}},"title":"rule_lookupArguments","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 table tennis terms — rally, let, deuce, topspin/backspin/sidespin, block,","description":"Definitions of common table tennis terms — rally, let, deuce, topspin/backspin/sidespin, block,\n    push, chop, loop, smash, flick, chiquita, lob, shakehand/penhold grips, sandwich rubber, pips, edge\n    ball, obstruction, third-ball attack, footwork, and more. Use for \"what's a let\", \"what does chiquita\n    mean\", \"what's the difference between a block and a push\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","examples":["let","deuce","topspin","chiquita","penhold"],"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/technique_info":{"post":{"operationId":"technique_info","summary":"Step-by-step how-to for one stroke, serve, or grip: forehand/backhand drive, push, block, topspin","description":"Step-by-step how-to for one stroke, serve, or grip: forehand/backhand drive, push, block, topspin\n    loop, backspin chop, smash, flick/flip, lob, counter-drive, sidespin shot, pendulum/reverse-pendulum/\n    tomahawk/backspin/topspin/high-toss serves, and shakehand, penhold, and reverse-penhold-backhand grips;\n    omit to list all techniques. Use for \"how do I hit a topspin loop\", \"how do you tie a pendulum serve\",\n    \"what's the shakehand grip\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A stroke, serve, or grip name or alias; omit to list all.","examples":["forehand drive","topspin loop","chop","pendulum serve","shakehand grip"],"title":"Name"}},"title":"technique_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/technique_for_situation":{"post":{"operationId":"technique_for_situation","summary":"Suggests 1-4 suitable strokes/serves/grips for a stated situation, keyword-matched against each","description":"Suggests 1-4 suitable strokes/serves/grips for a stated situation, keyword-matched against each\n    technique's tagged use cases. Use for \"what shot do I use against a smash\", \"how do I attack a short\n    serve\", \"best technique to end a rally\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"situation":{"description":"A situation to handle, in plain language.","examples":["defending a smash","attacking a short backspin serve","returning a heavy topspin loop","a shot to end the rally"],"minLength":1,"title":"Situation","type":"string"}},"required":["situation"],"title":"technique_for_situationArguments","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/equipment_overview":{"post":{"operationId":"equipment_overview","summary":"Specs and notes for one piece of equipment: blade, inverted/short-pips/long-pips/anti-spin rubber,","description":"Specs and notes for one piece of equipment: blade, inverted/short-pips/long-pips/anti-spin rubber,\n    ball, table, net and posts, handle/grip shapes, apparel, footwear, and practice ball machines; omit to\n    list all items. Use for \"what's the difference between inverted and pips rubber\", \"how big is a table\n    tennis table\", \"what's the standard ball spec\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"item":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An equipment item name or alias; omit to list all.","examples":["blade","inverted rubber","ball","table","net"],"title":"Item"}},"title":"equipment_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/format_info":{"post":{"operationId":"format_info","summary":"Explains one competitive format — singles, doubles, mixed doubles, team events, and para table","description":"Explains one competitive format — singles, doubles, mixed doubles, team events, and para table\n    tennis — including its key serving/rotation rules; omit to list all formats. Use for \"how does doubles\n    serving work\", \"what's mixed doubles\", \"how does para table tennis classification work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A format name or alias; omit to list all.","examples":["singles","doubles","mixed doubles","team event","para table tennis"],"title":"Name"}},"title":"format_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/scoring_summary":{"post":{"operationId":"scoring_summary","summary":"A fixed, compact overview of how table tennis games and matches are scored and won: game-win","description":"A fixed, compact overview of how table tennis games and matches are scored and won: game-win\n    condition, match format, rally-point scoring, service rotation, changing ends, the expedite trigger,\n    and the doubles rotation note. Use for \"how does scoring work in ping pong\", \"how many points to win a\n    game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"scoring_summaryArguments","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, ranked shortlist of the most useful tips for a brand-new table tennis player, each with a","description":"A curated, ranked shortlist of the most useful tips for a brand-new table tennis player, each with a\n    short reason why it matters. Use for \"tips for a beginner\", \"what should I learn first\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":5,"description":"How many tips to return.","maximum":10,"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}}}}