{"openapi":"3.1.0","info":{"title":"Pitchcraft API","version":"0.1.0","description":"A fully local elevator-pitch structure builder: 10-second/30-second/2-minute pitch assembly, a length fitter, tagline generation, named pitch frameworks, a critique checklist, audience adaptation tips, objection prep, practice questions, and example pitches.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://pitchcraft.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/pitchcraft/docs"},"termsOfService":"https://connectorbay.com/pitchcraft/terms"},"servers":[{"url":"https://pitchcraft.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/pitchcraft/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/build_pitch":{"post":{"operationId":"build_pitch","summary":"Assembles a pitch at the given length from your product/audience/problem/solution, checking the result","description":"Assembles a pitch at the given length from your product/audience/problem/solution, checking the result\n    against that length's target word count. Use for \"give me a 30-second pitch for my product\", \"write a\n    2-minute pitch for investors\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"product":{"description":"Your product or service's name.","minLength":1,"title":"Product","type":"string"},"audience":{"description":"Who it's for.","examples":["small clinics","busy freelancers"],"minLength":1,"title":"Audience","type":"string"},"problem":{"description":"The problem, stated concretely.","minLength":1,"title":"Problem","type":"string"},"solution":{"description":"What you do about the problem.","minLength":1,"title":"Solution","type":"string"},"length":{"default":"30_second","description":"10_second | 30_second | 2_minute","title":"Length","type":"string"},"differentiator":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What makes it different from alternatives.","title":"Differentiator"},"cta":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The call to action / next step.","title":"Cta"}},"required":["product","audience","problem","solution"],"title":"build_pitchArguments","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/pitch_lengths_overview":{"post":{"operationId":"pitch_lengths_overview","summary":"What fits in 10 seconds vs. 30 seconds vs. 2 minutes: target word count, target speaking time, expected","description":"What fits in 10 seconds vs. 30 seconds vs. 2 minutes: target word count, target speaking time, expected\n    structure, and purpose. Use for \"how long should an elevator pitch be\", \"what goes in a 2-minute pitch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"length":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"10_second | 30_second | 2_minute; omit to compare all three.","title":"Length"}},"title":"pitch_lengths_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/pitch_framework_guide":{"post":{"operationId":"pitch_framework_guide","summary":"Explains a named pitch framework's structure, when to use it, and a worked example — or lists all of","description":"Explains a named pitch framework's structure, when to use it, and a worked example — or lists all of\n    them. Use for \"what's the PAS framework\", \"give me a framework for a mission-driven pitch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"framework":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A framework name, e.g. 'PAS' or 'Problem-Solution-CTA'; omit to list all.","title":"Framework"}},"title":"pitch_framework_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/pitch_critique_checklist":{"post":{"operationId":"pitch_critique_checklist","summary":"What makes a pitch land vs. fall flat: one core message, a hook in the first breath, concreteness,","description":"What makes a pitch land vs. fall flat: one core message, a hook in the first breath, concreteness,\n    jargon-free language, a named audience, a metric, a clear next step, and fitting its time. Use for \"review\n    my pitch structure\", \"what makes a good elevator pitch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"pitch_critique_checklistArguments","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/tagline_generator":{"post":{"operationId":"tagline_generator","summary":"Applies several one-line tagline formula patterns to your product/audience/differentiator. Use for \"give","description":"Applies several one-line tagline formula patterns to your product/audience/differentiator. Use for \"give\n    me a tagline for this product\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"product":{"description":"Your product/category name.","minLength":1,"title":"Product","type":"string"},"audience":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who it's for.","title":"Audience"},"differentiator":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What makes it different.","title":"Differentiator"}},"required":["product"],"title":"tagline_generatorArguments","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/audience_adaptation_tips":{"post":{"operationId":"audience_adaptation_tips","summary":"How to adapt the same pitch for an investor, a customer, an employer/recruiter, or a new acquaintance.","description":"How to adapt the same pitch for an investor, a customer, an employer/recruiter, or a new acquaintance.\n    Use for \"how should I pitch this differently to an investor vs. a customer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"audience":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"investor | customer | employer_recruiter | general_public; omit to list all.","title":"Audience"}},"title":"audience_adaptation_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/objection_anticipator":{"post":{"operationId":"objection_anticipator","summary":"Common objections to prepare for, by pitch type, with a response angle for each. Use for \"what will an","description":"Common objections to prepare for, by pitch type, with a response angle for each. Use for \"what will an\n    investor push back on\", \"what objections should I expect from a customer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pitch_type":{"default":"investor","description":"investor | customer","title":"Pitch Type","type":"string"}},"title":"objection_anticipatorArguments","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/pitch_practice_prompts":{"post":{"operationId":"pitch_practice_prompts","summary":"Likely follow-up questions to rehearse an answer for, by pitch type. Use for \"what questions should I","description":"Likely follow-up questions to rehearse an answer for, by pitch type. Use for \"what questions should I\n    practice answering after this pitch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pitch_type":{"default":"investor","description":"investor | customer | employer_recruiter | general_public","title":"Pitch Type","type":"string"}},"title":"pitch_practice_promptsArguments","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/pitch_length_fitter":{"post":{"operationId":"pitch_length_fitter","summary":"Estimates a draft's speaking time and checks it against a target length, estimating how many words to","description":"Estimates a draft's speaking time and checks it against a target length, estimating how many words to\n    cut if it runs long. Use for \"does this pitch fit in 30 seconds\", \"how much do I need to cut to hit 2\n    minutes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"draft":{"description":"Your pitch draft text.","minLength":1,"title":"Draft","type":"string"},"target_length":{"default":"30_second","description":"10_second | 30_second | 2_minute","title":"Target Length","type":"string"}},"required":["draft"],"title":"pitch_length_fitterArguments","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/elevator_pitch_examples":{"post":{"operationId":"elevator_pitch_examples","summary":"Original example pitches at each length, for inspiration and calibration. Use for \"show me an example","description":"Original example pitches at each length, for inspiration and calibration. Use for \"show me an example\n    30-second pitch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"length":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"10_second | 30_second | 2_minute; omit for all lengths.","title":"Length"}},"title":"elevator_pitch_examplesArguments","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}}}}