{"openapi":"3.1.0","info":{"title":"Apology Craft API","version":"0.1.0","description":"A fully local apology-writing structure and technique guide: a five-part original outline, context-specific nuance, phrase-starter techniques, a common-mistakes guide, amends ideas, a self-review checklist, timing/delivery guidance, a receiving-an-apology guide and a glossary.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://apologycraft.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/apologycraft/docs"},"termsOfService":"https://connectorbay.com/apologycraft/terms"},"servers":[{"url":"https://apologycraft.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/apologycraft/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/apology_outline":{"post":{"operationId":"apology_outline","summary":"The five-part apology structure — acknowledge specifically, take responsibility with no excuses, name the","description":"The five-part apology structure — acknowledge specifically, take responsibility with no excuses, name the\n    impact, make amends or propose a change, ask what they need — each with guidance and bracketed prompt-\n    starters. Pass a context (partner, friend, family, colleague, acquaintance) to also get context-specific\n    nuance. Use for \"what's the structure for a good apology\", \"how do I apologize to my partner properly\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"context":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An optional relationship context to attach nuance for.","examples":["partner","friend","colleague"],"title":"Context"}},"title":"apology_outlineArguments","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/context_guide":{"post":{"operationId":"context_guide","summary":"Relationship-specific nuance for apologizing to a partner, friend, family member, colleague, or","description":"Relationship-specific nuance for apologizing to a partner, friend, family member, colleague, or\n    acquaintance — what changes about the apology depending on who it's for. Use for \"how is apologizing to a\n    coworker different from a partner\", \"what should I know about apologizing to family\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"context":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A relationship context; omit to list all.","title":"Context"}},"title":"context_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/phrase_starters":{"post":{"operationId":"phrase_starters","summary":"Original opening-line techniques for starting an apology, grouped by tone (direct, warm, brief) —","description":"Original opening-line techniques for starting an apology, grouped by tone (direct, warm, brief) —\n    techniques and approaches, not finished sentences to copy verbatim. Use for \"give me some ways to start an\n    apology\", \"I want a warmer tone for this apology\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A tone: direct, warm, or brief. Omit for all three.","title":"Tone"}},"title":"phrase_startersArguments","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_guide":{"post":{"operationId":"common_mistakes_guide","summary":"The most common ways apologies fail to land — the conditional apology (\"sorry you feel that way\"), the","description":"The most common ways apologies fail to land — the conditional apology (\"sorry you feel that way\"), the\n    buried apology, leading with \"but\", over-apologizing for reassurance, minimizing, the performance apology,\n    and demanding immediate forgiveness — each with why it fails. Use for \"what shouldn't I say in an apology\",\n    \"why didn't my apology work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"common_mistakes_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/amends_ideas":{"post":{"operationId":"amends_ideas","summary":"General categories of making amends alongside an apology's words — corrective action, changed behavior","description":"General categories of making amends alongside an apology's words — corrective action, changed behavior\n    over time, asking directly what would help, a small gesture, and giving space. Use for \"what can I actually\n    do to make this right, not just say sorry\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"amends_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/apology_checklist":{"post":{"operationId":"apology_checklist","summary":"A self-review checklist to run a drafted apology through before sending it — specificity, no buried","description":"A self-review checklist to run a drafted apology through before sending it — specificity, no buried\n    \"buts\", naming the impact, not fishing for reassurance, and a concrete next step. Use for \"check my apology\n    before I send it\", \"what should I look for before I say sorry\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"apology_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/timing_and_delivery_guide":{"post":{"operationId":"timing_and_delivery_guide","summary":"Guidance on in-person versus written apologies, whether to wait until things have cooled down, why","description":"Guidance on in-person versus written apologies, whether to wait until things have cooled down, why\n    mixing an apology with re-litigating fault undoes it, and matching the apology's formality to the scale of\n    what happened. Use for \"should I apologize by text or in person\", \"should I wait until we're both calmer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"timing_and_delivery_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/receiving_an_apology_guide":{"post":{"operationId":"receiving_an_apology_guide","summary":"Tips for responding well when someone apologizes to you — that you can take time before responding, that","description":"Tips for responding well when someone apologizes to you — that you can take time before responding, that\n    accepting an apology isn't the same as declaring everything resolved, and how to name what's still missing\n    from a partial apology. Use for \"how should I respond to an apology\", \"someone apologized but it didn't\n    feel like enough, what do I do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"receiving_an_apology_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/glossary":{"post":{"operationId":"glossary","summary":"Definitions of terms used elsewhere in this connector — non-apology, accountability, defensiveness,","description":"Definitions of terms used elsewhere in this connector — non-apology, accountability, defensiveness,\n    stonewalling, repair attempt, reassurance-seeking, amends. Use for \"what's a non-apology\", \"what does\n    stonewalling mean\".","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.","title":"Term"}},"title":"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}}}}