{"openapi":"3.1.0","info":{"title":"Podium API","version":"0.1.0","description":"A fully local public-speaking skill-building toolkit: speech structure templates, a filler-word checker, a speech timer planner, opening/closing line ideas, nervousness tips, a pace calculator, a Toastmasters-style roles glossary, and a rhetorical-device glossary.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://podium.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/podium/docs"},"termsOfService":"https://connectorbay.com/podium/terms"},"servers":[{"url":"https://podium.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/podium/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/speech_structure_guide":{"post":{"operationId":"speech_structure_guide","summary":"The section-by-section structure for one of five common speech types (informative, persuasive, toast,","description":"The section-by-section structure for one of five common speech types (informative, persuasive, toast,\n    eulogy, TED-style), what each section/beat is for, and why that shape works. Use for \"how should I\n    structure a eulogy\", \"what's the structure of a TED talk\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"speech_type":{"description":"informative | persuasive | toast | eulogy | ted","title":"Speech Type","type":"string"}},"required":["speech_type"],"title":"speech_structure_guideArguments","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/filler_word_checker":{"post":{"operationId":"filler_word_checker","summary":"Genuine local text analysis: scans a transcript for common filler words/phrases (um, uh, like, so,","description":"Genuine local text analysis: scans a transcript for common filler words/phrases (um, uh, like, so,\n    basically, actually, you know, I mean, kind of, sort of, and 'right' used as a checking-in tag), and\n    returns the total word count, the filler count, a filler rate per 100 words, and which specific fillers\n    appeared most. Use for \"check my speech for filler words\", \"how many times did I say um\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"text":{"description":"A speech transcript or draft to scan for filler words/phrases.","minLength":1,"title":"Text","type":"string"}},"required":["text"],"title":"filler_word_checkerArguments","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/speech_timer_planner":{"post":{"operationId":"speech_timer_planner","summary":"Allocates a total speaking time across named sections — proportional to each section's optional","description":"Allocates a total speaking time across named sections — proportional to each section's optional\n    relative weight, or split evenly if no weights are given — and returns a rundown with each section's\n    duration and start/end timestamps. Use for \"help me time a 10-minute speech with an opening, three main\n    points, and a close\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_minutes":{"description":"Total speaking time in minutes.","exclusiveMinimum":0,"title":"Total Minutes","type":"number"},"sections":{"description":"Named sections in order, e.g. [{\"name\": \"Opening\"}, {\"name\": \"Main points\", \"weight\": 3}, {\"name\": \"Close\"}]. 'weight' is optional and defaults to 1 (an equal split when omitted for every section).","items":{"additionalProperties":true,"type":"object"},"title":"Sections","type":"array"}},"required":["total_minutes","sections"],"title":"speech_timer_plannerArguments","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/opening_line_ideas":{"post":{"operationId":"opening_line_ideas","summary":"Original, fill-in-the-blank opener idea templates — a question, a quote-shaped framework for a real","description":"Original, fill-in-the-blank opener idea templates — a question, a quote-shaped framework for a real\n    quote you supply, a striking-statistic framework, and a short story hook — plus a tip on which tends to\n    work best for the given speech type. Use for \"give me an opening line idea for a persuasive speech\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"speech_type":{"description":"informative | persuasive | toast | eulogy | ted","title":"Speech Type","type":"string"}},"required":["speech_type"],"title":"opening_line_ideasArguments","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/closing_line_ideas":{"post":{"operationId":"closing_line_ideas","summary":"Original, fill-in-the-blank closer idea templates — a call to action, circling back to your opener,","description":"Original, fill-in-the-blank closer idea templates — a call to action, circling back to your opener,\n    and a forward-looking statement — plus a tip on which tends to work best for the given speech type. Use\n    for \"give me a closing line idea for a TED-style talk\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"speech_type":{"description":"informative | persuasive | toast | eulogy | ted","title":"Speech Type","type":"string"}},"required":["speech_type"],"title":"closing_line_ideasArguments","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/nervousness_tips":{"post":{"operationId":"nervousness_tips","summary":"Practical, non-medical tips for managing ordinary public-speaking nerves: preparation, breathing","description":"Practical, non-medical tips for managing ordinary public-speaking nerves: preparation, breathing\n    before you start, starting slow, eye-contact anchors, reframing nerves as excitement, and physical\n    grounding. Use for \"how do I calm my nerves before a speech\", \"I get anxious right before presenting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"nervousness_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}},"/v1/tools/pace_calculator":{"post":{"operationId":"pace_calculator","summary":"Computes the exact words-per-minute a speech requires to fit a target time, compares it against the","description":"Computes the exact words-per-minute a speech requires to fit a target time, compares it against the\n    commonly-cited average conversational speaking rate of 130-150 wpm, and flags whether the required pace\n    is unusually fast or slow. Use for \"what pace do I need for a 5-minute, 700-word speech\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"word_count":{"description":"Total words in the speech or draft.","exclusiveMinimum":0,"title":"Word Count","type":"integer"},"target_minutes":{"description":"How long the speech should take, in minutes.","exclusiveMinimum":0,"title":"Target Minutes","type":"number"}},"required":["word_count","target_minutes"],"title":"pace_calculatorArguments","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/toastmasters_roles_glossary":{"post":{"operationId":"toastmasters_roles_glossary","summary":"A factual reference of standard meeting roles used in Toastmasters-style public-speaking clubs","description":"A factual reference of standard meeting roles used in Toastmasters-style public-speaking clubs\n    (Toastmaster of the Day, Timer, Ah-Counter, Grammarian, Table Topics Master, General Evaluator,\n    Individual Evaluator) and what each one does — general knowledge about how such clubs commonly run a\n    meeting, not official Toastmasters International content, and not affiliated with or endorsed by\n    Toastmasters International. Use for \"what does the Ah-Counter do\", \"who runs a Toastmasters meeting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"toastmasters_roles_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/rhetorical_device_glossary":{"post":{"operationId":"rhetorical_device_glossary","summary":"A glossary of about 14 rhetorical devices useful in speechwriting (anaphora, tricolon/rule of three,","description":"A glossary of about 14 rhetorical devices useful in speechwriting (anaphora, tricolon/rule of three,\n    antithesis, rhetorical question, alliteration, metaphor, hyperbole, chiasmus, epistrophe, anadiplosis,\n    asyndeton, polysyndeton, simile, parallelism), each with a plain-English example written for this\n    connector, never quoted from a real speech. Use for \"what's anaphora\", \"give me speechwriting devices\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific device to look up, e.g. 'anaphora'; omit to list all.","title":"Term"}},"title":"rhetorical_device_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}}}}