{"openapi":"3.1.0","info":{"title":"Outofoffice API","version":"0.1.0","description":"Out-of-office message generation: computed duration/return-date math plus original auto-reply compositions across 8 reason categories, 3 tones and 3 lengths.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://outofoffice.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/outofoffice/docs"},"termsOfService":"https://connectorbay.com/outofoffice/terms"},"servers":[{"url":"https://outofoffice.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/outofoffice/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/generate_ooo":{"post":{"operationId":"generate_ooo","summary":"Generate an original out-of-office message for a date range, reason, tone and length, with the computed","description":"Generate an original out-of-office message for a date range, reason, tone and length, with the computed\n    duration attached. Use for \"write a formal OOO for vacation Oct 5-9\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day out, YYYY-MM-DD.","examples":["2026-10-05"],"title":"Start Date","type":"string"},"end_date":{"description":"Last day out, YYYY-MM-DD.","examples":["2026-10-09"],"title":"End Date","type":"string"},"reason_category":{"description":"vacation | sick | conference | parental_leave | personal | business_trip | sabbatical | holiday","title":"Reason Category","type":"string"},"tone":{"default":"formal","description":"formal | casual | friendly","title":"Tone","type":"string"},"length":{"default":"standard","description":"short | standard | detailed","title":"Length","type":"string"},"coverage_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who to contact while you're out.","title":"Coverage Name"},"coverage_contact":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Their email or phone.","title":"Coverage Contact"},"urgent_only":{"default":false,"description":"Frame the coverage contact as for urgent matters only.","title":"Urgent Only","type":"boolean"}},"required":["start_date","end_date","reason_category"],"title":"generate_oooArguments","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/list_reason_categories":{"post":{"operationId":"list_reason_categories","summary":"List every supported reason category. Use for \"what OOO reasons do you support\".","description":"List every supported reason category. Use for \"what OOO reasons do you support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_reason_categoriesArguments","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/list_tones":{"post":{"operationId":"list_tones","summary":"List the supported tones (formal, casual, friendly) with descriptions.","description":"List the supported tones (formal, casual, friendly) with descriptions.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tonesArguments","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/list_lengths":{"post":{"operationId":"list_lengths","summary":"List the supported lengths (short, standard, detailed) with descriptions.","description":"List the supported lengths (short, standard, detailed) with descriptions.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_lengthsArguments","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/duration_summary":{"post":{"operationId":"duration_summary","summary":"Compute calendar days, business days and weekend overlap between two dates (inclusive). Use for \"how many","description":"Compute calendar days, business days and weekend overlap between two dates (inclusive). Use for \"how many\n    business days am I out from the 3rd to the 10th\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"YYYY-MM-DD","title":"Start Date","type":"string"},"end_date":{"description":"YYYY-MM-DD","title":"End Date","type":"string"}},"required":["start_date","end_date"],"title":"duration_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/compute_return_date":{"post":{"operationId":"compute_return_date","summary":"Compute your last day out and return date after N business days, skipping weekends and any given holiday","description":"Compute your last day out and return date after N business days, skipping weekends and any given holiday\n    dates. Use for \"when do I return if I'm out 5 business days starting Monday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day out, YYYY-MM-DD.","title":"Start Date","type":"string"},"num_business_days":{"description":"How many business days you'll be out.","maximum":365,"minimum":1,"title":"Num Business Days","type":"integer"},"holiday_dates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD dates to also skip, like weekends.","title":"Holiday Dates"}},"required":["start_date","num_business_days"],"title":"compute_return_dateArguments","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/auto_reply_variants":{"post":{"operationId":"auto_reply_variants","summary":"Two differently-composed OOO message variants for the same trip, for variety. Use for \"give me a couple of","description":"Two differently-composed OOO message variants for the same trip, for variety. Use for \"give me a couple of\n    options for my vacation auto-reply\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"YYYY-MM-DD","title":"Start Date","type":"string"},"end_date":{"description":"YYYY-MM-DD","title":"End Date","type":"string"},"reason_category":{"description":"See list_reason_categories.","title":"Reason Category","type":"string"},"tone":{"default":"formal","description":"formal | casual | friendly","title":"Tone","type":"string"}},"required":["start_date","end_date","reason_category"],"title":"auto_reply_variantsArguments","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/coverage_line":{"post":{"operationId":"coverage_line","summary":"Just the \"contact X while I'm out\" sentence, for dropping into a message you're writing yourself. Use for","description":"Just the \"contact X while I'm out\" sentence, for dropping into a message you're writing yourself. Use for\n    \"give me a coverage line for my assistant\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"coverage_name":{"description":"Who to contact.","minLength":1,"title":"Coverage Name","type":"string"},"coverage_contact":{"description":"Their email or phone.","minLength":1,"title":"Coverage Contact","type":"string"},"tone":{"default":"formal","description":"formal | casual | friendly","title":"Tone","type":"string"},"urgent_only":{"default":false,"title":"Urgent Only","type":"boolean"}},"required":["coverage_name","coverage_contact"],"title":"coverage_lineArguments","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/checklist_before_activating":{"post":{"operationId":"checklist_before_activating","summary":"A pre-departure checklist — calendar, chat status, coverage confirmation, voicemail. Use for \"what should I","description":"A pre-departure checklist — calendar, chat status, coverage confirmation, voicemail. Use for \"what should I\n    do before I turn on my OOO\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"checklist_before_activatingArguments","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}}}}