{"openapi":"3.1.0","info":{"title":"SLA Due API","summary":"Business-hour SLA and business-day deadline calculator.","description":"Calculate SLA due timestamps and business-day dates with weekends, US federal holidays, working hours, and time zones handled in one API call.","contact":{"name":"LinkRidge API Tools","url":"https://sla-due-api.linkridge.net/","email":"api-support@makersridge.com"},"version":"0.1.0"},"servers":[{"url":"https://sla-due-api.linkridge.net","description":"Production"},{"url":"https://dev.sla-due-api.mfsoho.linkridge.net","description":"Development"}],"paths":{"/health":{"get":{"tags":["system"],"summary":"Health check","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}},"/admin/metrics":{"get":{"tags":["admin"],"summary":"Early validation metrics","description":"Returns in-memory aggregate counters when an admin key is configured.","operationId":"metrics_admin_metrics_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Metrics Admin Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/business-days/calculate":{"post":{"tags":["calculations"],"summary":"Calculate a business-day or SLA due date","description":"Run one deadline calculation. The first public use case is `sla_due_at`: add working minutes to a timestamp using a timezone, working-hours window, weekends, and the US federal holiday calendar.","operationId":"calculate_v1_business_days_calculate_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateRequest"},"examples":{"slaDueAt":{"summary":"Support ticket opened before a US federal holiday weekend","description":"Add 180 working minutes from July 2 at 4 PM, skipping July 3 observed Independence Day and the weekend.","value":{"operation":"sla_due_at","calendar":"us-federal","timezone":"America/Chicago","start_at":"2026-07-02T16:00:00","minutes":180}},"addBusinessDays":{"summary":"Add business days","value":{"operation":"add_business_days","calendar":"us-federal","start_date":"2026-07-02","amount":3}},"nextBusinessDay":{"summary":"Find the next business day","value":{"operation":"next_business_day","calendar":"us-federal","start_date":"2026-07-03"}}}}}},"responses":{"200":{"description":"Calculation result. Shape depends on the requested operation.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Calculate V1 Business Days Calculate Post"},"examples":{"sla_due_at":{"summary":"SLA due timestamp","value":{"operation":"sla_due_at","due_at":"2026-07-06T11:00:00-05:00"}},"next_business_day":{"summary":"Next business day","value":{"operation":"next_business_day","date":"2026-07-06"}}}}}},"400":{"description":"Unsupported calendar, malformed date/time, or invalid calculation input."},"401":{"description":"Missing or invalid API key."},"422":{"description":"Required operation-specific field is missing."},"429":{"description":"Monthly quota exceeded."}}}},"/v1/business-days/batch":{"post":{"tags":["calculations"],"summary":"Run multiple business-day or SLA calculations","description":"Submit up to 25 independent calculation items and receive per-item results. This is useful for support queues, order backlogs, and deadline audits where each row needs the same business-time logic.","operationId":"batch_calculate_v1_business_days_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchCalculateRequest"}}}},"responses":{"200":{"description":"Batch results with per-item success or error details.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Batch Calculate V1 Business Days Batch Post"}}}},"401":{"description":"Missing or invalid API key."},"422":{"description":"Malformed batch request."},"429":{"description":"Monthly quota exceeded."}}}}},"components":{"schemas":{"BatchCalculateItem":{"properties":{"operation":{"type":"string","enum":["add_business_days","diff_business_days","next_business_day","sla_due_at"],"title":"Operation"},"calendar":{"type":"string","const":"us-federal","title":"Calendar","default":"us-federal"},"timezone":{"type":"string","title":"Timezone","default":"America/Chicago"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","examples":["2026-07-14"]},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","examples":["2026-07-21"]},"start_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start At","examples":["2026-07-14T15:30:00"]},"amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Amount","examples":[3]},"minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Minutes","examples":[240]},"working_hours":{"$ref":"#/components/schemas/WorkingHoursInput"},"item_id":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Item Id","description":"Optional caller-provided ID echoed in the batch result.","examples":["ticket-123"]}},"type":"object","required":["operation"],"title":"BatchCalculateItem"},"BatchCalculateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchCalculateItem"},"type":"array","maxItems":25,"minItems":1,"title":"Items","description":"One to 25 independent business-day or SLA calculations."}},"type":"object","required":["items"],"title":"BatchCalculateRequest"},"CalculateRequest":{"properties":{"operation":{"type":"string","enum":["add_business_days","diff_business_days","next_business_day","sla_due_at"],"title":"Operation"},"calendar":{"type":"string","const":"us-federal","title":"Calendar","default":"us-federal"},"timezone":{"type":"string","title":"Timezone","default":"America/Chicago"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","examples":["2026-07-14"]},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","examples":["2026-07-21"]},"start_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start At","examples":["2026-07-14T15:30:00"]},"amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Amount","examples":[3]},"minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Minutes","examples":[240]},"working_hours":{"$ref":"#/components/schemas/WorkingHoursInput"}},"type":"object","required":["operation"],"title":"CalculateRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkingHoursInput":{"properties":{"start":{"type":"string","title":"Start","default":"09:00","examples":["09:00"]},"end":{"type":"string","title":"End","default":"17:00","examples":["17:00"]},"weekdays":{"items":{"type":"integer"},"type":"array","title":"Weekdays"}},"type":"object","title":"WorkingHoursInput"}}}}