{"openapi":"3.1.0","info":{"title":"Coverletter API","version":"0.1.0","description":"A fully local cover-letter structure and drafting toolkit: a section-by-section outline, original example opening/body/closing paragraphs across six tones, a full draft assembled from stated strengths, a tone guide, cover-letter-specific mistakes, length/formatting guidance, per-industry tailoring tips, and a follow-up email template.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://coverletter.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/coverletter/docs"},"termsOfService":"https://connectorbay.com/coverletter/terms"},"servers":[{"url":"https://coverletter.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/coverletter/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/outline_builder":{"post":{"operationId":"outline_builder","summary":"The section-by-section structure a cover letter should follow (opening, body, optional second body,","description":"The section-by-section structure a cover letter should follow (opening, body, optional second body,\n    closing), each with what it should accomplish, plus a target length and tone notes. Use for \"give me a\n    cover letter outline for a PM role\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role being applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"tone":{"default":"conversational","description":"formal | conversational | enthusiastic | direct | storytelling | analytical","title":"Tone","type":"string"}},"required":["role","company"],"title":"outline_builderArguments","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/tone_guide":{"post":{"operationId":"tone_guide","summary":"Describes one of six cover-letter tones (formal, conversational, enthusiastic, direct, storytelling,","description":"Describes one of six cover-letter tones (formal, conversational, enthusiastic, direct, storytelling,\n    analytical) — its voice, what it's best suited for, and what to avoid — or lists all six. Use for \"what\n    tone should my cover letter use\", \"what's a direct cover letter tone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific tone name; omit to list all six.","title":"Tone"}},"title":"tone_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/opening_paragraph":{"post":{"operationId":"opening_paragraph","summary":"An original example opening paragraph in the chosen tone, built around one stated strength plus the","description":"An original example opening paragraph in the chosen tone, built around one stated strength plus the\n    role and company. Use for \"write me an enthusiastic cover letter opener about this achievement\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role being applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"strength":{"description":"One specific, concrete achievement or strength to lead with, e.g. 'I rebuilt our onboarding flow and cut drop-off 18%'.","minLength":1,"title":"Strength","type":"string"},"tone":{"default":"conversational","description":"formal | conversational | enthusiastic | direct | storytelling | analytical","title":"Tone","type":"string"}},"required":["role","company","strength"],"title":"opening_paragraphArguments","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/body_paragraph":{"post":{"operationId":"body_paragraph","summary":"An original example body paragraph that weaves 1-3 stated strengths together in the chosen tone. Use","description":"An original example body paragraph that weaves 1-3 stated strengths together in the chosen tone. Use\n    for \"turn these three achievements into a cover letter paragraph\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role being applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"key_strengths":{"description":"1-3 concrete strengths/achievements to weave into the paragraph.","items":{"type":"string"},"minItems":1,"title":"Key Strengths","type":"array"},"tone":{"default":"conversational","description":"formal | conversational | enthusiastic | direct | storytelling | analytical","title":"Tone","type":"string"}},"required":["role","company","key_strengths"],"title":"body_paragraphArguments","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_paragraph":{"post":{"operationId":"closing_paragraph","summary":"An original example closing paragraph with a call to action (standard, low-key, or a direct ask for a","description":"An original example closing paragraph with a call to action (standard, low-key, or a direct ask for a\n    call) and a matching sign-off, in the chosen tone. Use for \"write me a cover letter closing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role being applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"tone":{"default":"conversational","description":"formal | conversational | enthusiastic | direct | storytelling | analytical","title":"Tone","type":"string"},"call_to_action":{"default":"standard","description":"standard | low_key | direct_ask","title":"Call To Action","type":"string"}},"required":["role","company"],"title":"closing_paragraphArguments","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/full_draft":{"post":{"operationId":"full_draft","summary":"A complete three-paragraph example cover letter (opening, body, closing plus sign-off) assembled from","description":"A complete three-paragraph example cover letter (opening, body, closing plus sign-off) assembled from\n    a list of stated strengths, in one tone. Use for \"write me a full cover letter draft for X at Y\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role being applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"key_strengths":{"description":"1-3 concrete strengths/achievements, strongest first.","items":{"type":"string"},"minItems":1,"title":"Key Strengths","type":"array"},"tone":{"default":"conversational","description":"formal | conversational | enthusiastic | direct | storytelling | analytical","title":"Tone","type":"string"},"call_to_action":{"default":"standard","description":"standard | low_key | direct_ask","title":"Call To Action","type":"string"}},"required":["role","company","key_strengths"],"title":"full_draftArguments","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/common_mistakes":{"post":{"operationId":"common_mistakes","summary":"Cover-letter-specific common mistakes with fixes, by category, or every category if none is given —","description":"Cover-letter-specific common mistakes with fixes, by category, or every category if none is given —\n    distinct from general resume mistakes. Use for \"what are common cover letter mistakes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"content | formatting | tone | strategy; omit for all categories.","title":"Category"}},"title":"common_mistakesArguments","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/length_and_format_guide":{"post":{"operationId":"length_and_format_guide","summary":"Word-count target, section structure, and formatting norms (font matching, salutation, file naming,","description":"Word-count target, section structure, and formatting norms (font matching, salutation, file naming,\n    PDF export) for a cover letter, plus which industries expect an exception. Use for \"how long should my\n    cover letter be\", \"how should I format my cover letter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"length_and_format_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/industry_tailoring_tips":{"post":{"operationId":"industry_tailoring_tips","summary":"Tailoring guidance for a cover letter aimed at a specific industry — what to lead with, register, and","description":"Tailoring guidance for a cover letter aimed at a specific industry — what to lead with, register, and\n    what to avoid. Use for \"how do I tailor my cover letter for a finance job\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"industry":{"description":"technology | finance | creative | nonprofit | healthcare_admin | academic | government | sales","title":"Industry","type":"string"}},"required":["industry"],"title":"industry_tailoring_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/follow_up_email":{"post":{"operationId":"follow_up_email","summary":"A follow-up email template to send after a stated number of days since applying, with subject line and","description":"A follow-up email template to send after a stated number of days since applying, with subject line and\n    body. Use for \"write a follow-up email after applying for a job\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"role":{"description":"The job title/role applied for.","minLength":1,"title":"Role","type":"string"},"company":{"description":"The company name.","minLength":1,"title":"Company","type":"string"},"days_since_applying":{"default":7,"description":"How many days have passed since you applied.","maximum":90,"minimum":1,"title":"Days Since Applying","type":"integer"}},"required":["role","company"],"title":"follow_up_emailArguments","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}}}}