{"openapi":"3.0.3","info":{"title":"ShiftCare Care Connector — REST API","version":"0.4.0","description":"Read API over a user's ShiftCare data, for dashboards/apps to load on page render. Authenticate with an API key (mint one via the create_dashboard_api_key MCP tool). Call this from a server/BFF — never expose the API key in browser code. All data is scoped to the ShiftCare user the key is bound to."},"servers":[{"url":"https://cnk2kqvtwr.ap-southeast-2.awsapprunner.com"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"API key as 'Authorization: Bearer <key>'"}}},"security":[{"ApiKeyAuth":[]}],"paths":{"/api/v1/clients":{"get":{"summary":"List clients (participants)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"items","in":"query","schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}":{"get":{"summary":"Get one client's full profile","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/documents":{"get":{"summary":"List a client's documents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/care-plans":{"get":{"summary":"List a client's care plans","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}":{"get":{"summary":"Get one care plan","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/goals":{"get":{"summary":"List a care plan's goals","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/tasks":{"get":{"summary":"List a care plan's tasks (with schedules)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/focus-areas":{"get":{"summary":"List a care plan's focus areas","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/reviews":{"get":{"summary":"List a care plan's reviews","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/incidents":{"get":{"summary":"List incidents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"items","in":"query","schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/staff":{"get":{"summary":"List staff (each carries review_date = performance-review due date)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/shifts":{"get":{"summary":"List shifts overlapping a date window (fans out across accounts)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/shifts/{id}":{"get":{"summary":"Get one shift (includes assigned workers)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/forms":{"get":{"summary":"List digital forms (fans out across accounts)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"status_eq","in":"query","schema":{"type":"string"},"description":"e.g. published"},{"name":"name_cont","in":"query","schema":{"type":"string"},"description":"name contains"},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/forms/{id}/responses":{"get":{"summary":"List responses submitted for a form","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/medical-history":{"get":{"summary":"List a client's medical history records by type","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"query","required":true,"schema":{"type":"string","enum":["conditions","procedures","allergies"]}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/staff/compliance":{"get":{"summary":"Staff compliance report","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"summary","in":"query","schema":{"type":"boolean"},"description":"true = account bucket counts; false = per-staff matrix"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/complaints":{"get":{"summary":"List complaints","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"statuses","in":"query","schema":{"type":"string"},"description":"CSV of statuses"},{"name":"date_from","in":"query","schema":{"type":"string"}},{"name":"date_to","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoices":{"get":{"summary":"List invoices (currency fields are strings, dates DD/MM/YYYY)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"period","in":"query","schema":{"type":"string"},"description":"'DD/MM/YYYY - DD/MM/YYYY'"},{"name":"period_filter_type","in":"query","schema":{"type":"string"}},{"name":"paid","in":"query","schema":{"type":"boolean"}},{"name":"unpaid","in":"query","schema":{"type":"boolean"}},{"name":"overdue","in":"query","schema":{"type":"boolean"}},{"name":"include_void","in":"query","schema":{"type":"boolean"}},{"name":"client_id","in":"query","schema":{"type":"integer"}},{"name":"page","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoiceable-items":{"get":{"summary":"Invoiceable (not-yet-invoiced) line items + totals per client for a billing period (cursor-paginated: pass back pagination.next_cursor until has_more=false)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD, account time zone, inclusive"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD, account time zone, inclusive"},{"name":"client_id","in":"query","schema":{"type":"integer"},"description":"one client; omit to sweep the account"},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"opaque next_cursor from the previous page"},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100}},{"name":"account_location_id","in":"query","schema":{"type":"integer"}},{"name":"facility_ids","in":"query","schema":{"type":"string"},"description":"comma-separated facility ids; 0 = no facility"},{"name":"area_id","in":"query","schema":{"type":"integer"}},{"name":"fund_type","in":"query","schema":{"type":"string","enum":["private_pay","medicaid","hcp","sah","user_task"]}},{"name":"payment_type","in":"query","schema":{"type":"string"}},{"name":"fund_names","in":"query","schema":{"type":"string"},"description":"comma-separated, case-insensitive substrings"},{"name":"line_types","in":"query","schema":{"type":"string"},"description":"comma-separated: hours,mileage,expenses,tasks,fixed"},{"name":"group_by","in":"query","schema":{"type":"string","enum":["client","fund","payment_type","fund_and_payment_type"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoices/{id}/payments":{"get":{"summary":"List payments recorded on an invoice (amounts numeric)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"include_reversed","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/quotes":{"get":{"summary":"List quotes","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"client_id","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/price-books":{"get":{"summary":"List price books / areas with their rates","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/medications":{"get":{"summary":"List the medication catalog","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/funds":{"get":{"summary":"List a client's funds with remaining budget (balances)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/fund-transactions":{"get":{"summary":"List a client's fund spend ledger","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"},"description":"YYYY-MM-DD (required unless claim_id)"},{"name":"end_date","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/segments":{"get":{"summary":"List teams / segments","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/leaves":{"get":{"summary":"Leave pipeline table (HR-leave-dashboard flag gated)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"}},{"name":"end_date","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/leaves/metrics":{"get":{"summary":"Leave KPI metrics row","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"}},{"name":"end_date","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/dashboard/operations/{metric}":{"get":{"summary":"Read a management-scorecard operations metric (fixed rolling window)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string"},"description":"e.g. vacant_shifts_staff_availability, shift_cancellations, utilisation, late_clockins, staff_shift_time_variances, incidents, form_responses"},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/dashboard/user-tasks/{metric}":{"get":{"summary":"Read a dashboard user-tasks metric","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string"},"description":"billable_breakdown, fund_breakdown, hours_breakdown, type_breakdown, upcoming_tasks"},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"due_on_start","in":"query","schema":{"type":"string"}},{"name":"due_on_end","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}}}}