{"openapi":"3.1.0","info":{"title":"FamilyDesk household API","version":"1.0.0","description":"Household-scoped JSON API. Create keys at /family/manage/api-access. Never put keys in URLs or example values."},"servers":[{"url":"https://familydesk.ph/api/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Household API key. Store in FAMILYDESK_API_KEY."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"},"description":"Required for creates and consequential actions."},"Limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},"Cursor":{"name":"cursor","in":"query","schema":{"type":"string"}}}},"paths":{"/household":{"get":{"summary":"Read the current household","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Update household display name","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-lists":{"get":{"summary":"List task lists","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a task list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-lists/{id}":{"get":{"summary":"Get a task list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a task list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"delete":{"summary":"Archive a task list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-lists/{id}/restore":{"post":{"summary":"Restore an archived task list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/tasks":{"get":{"summary":"List tasks in a list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a task definition","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/tasks/{id}":{"get":{"summary":"Get a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"delete":{"summary":"Archive a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/tasks/{id}/restore":{"post":{"summary":"Restore an archived task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/tasks/{id}/history":{"get":{"summary":"Read task completion history","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/tasks/{id}/checklist-items":{"post":{"summary":"Add a checklist definition","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/checklist-items/{id}":{"patch":{"summary":"Update a checklist definition","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"delete":{"summary":"Disable a checklist definition","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-occurrences":{"get":{"summary":"List occurrences","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create an occurrence","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-occurrences/{id}":{"patch":{"summary":"Change occurrence status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/task-occurrences/{id}/checklist-items/{itemId}":{"patch":{"summary":"Complete an occurrence checklist item","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers":{"get":{"summary":"List household helpers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers/{id}":{"get":{"summary":"Get a helper","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Update helper profile fields","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers/{id}/end-employment":{"post":{"summary":"End employment now","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers/{id}/schedule-end":{"post":{"summary":"Schedule employment end","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers/{id}/reschedule-end":{"post":{"summary":"Reschedule employment end","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/helpers/{id}/cancel-end":{"post":{"summary":"Cancel scheduled employment end","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/invitations":{"get":{"summary":"List invitations","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create an invitation","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/invitations/{id}/revoke":{"post":{"summary":"Revoke a pending invitation","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/invitations/{id}/reissue":{"post":{"summary":"Reissue an invitation","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/time-off":{"get":{"summary":"List time-off requests","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a time-off request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/time-off/{id}":{"get":{"summary":"Get a time-off request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Edit a time-off request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/time-off/{id}/review":{"post":{"summary":"Approve or deny a request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/time-off/{id}/cancel":{"post":{"summary":"Cancel a request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/time-off/notifications":{"get":{"summary":"List time-off notifications","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/recurring-days-off":{"get":{"summary":"List recurring rest days","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Set a recurring rest day","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/schedule-overrides":{"get":{"summary":"List schedule overrides","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a schedule override","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/schedule-overrides/{id}":{"delete":{"summary":"Remove a schedule override","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/calendar":{"get":{"summary":"Read a bounded calendar view","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/petty-cash":{"get":{"summary":"Petty cash summary","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/petty-cash/transactions":{"get":{"summary":"List petty cash transactions","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Add a petty cash transaction","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/petty-cash/opening-balance":{"post":{"summary":"Set opening balance","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/petty-cash/transactions/{id}/correct":{"post":{"summary":"Post a linked reversal","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-profiles":{"get":{"summary":"Read a payroll profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Create or update a payroll profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs":{"get":{"summary":"List payroll runs","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Record a payroll run","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs/calculate":{"post":{"summary":"Calculate a payroll run without recording it","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs/{id}":{"get":{"summary":"Get a payroll run","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"delete":{"summary":"Void a draft payroll run and its ledger rows","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs/{id}/approve":{"post":{"summary":"Approve a draft payroll run","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs/{id}/mark-transfer-sent":{"post":{"summary":"Record that a transfer was sent","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payroll-runs/{id}/components":{"get":{"summary":"List payroll components","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payslips":{"get":{"summary":"List payslips","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/payslips/{id}/mark-paid":{"post":{"summary":"Mark a delivered payslip paid","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/loans":{"get":{"summary":"List loan transactions","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/days-off-ledger":{"get":{"summary":"List days-off ledger entries","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/contracts":{"get":{"summary":"List contracts","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a draft contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/contracts/{id}":{"get":{"summary":"Get a contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"patch":{"summary":"Edit a draft contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/contracts/{id}/activate":{"post":{"summary":"Activate a draft contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/contracts/{id}/archive":{"post":{"summary":"Archive a draft contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/contracts/{id}/terminate":{"post":{"summary":"Terminate an active contract","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/family-members":{"get":{"summary":"List family members","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/food-log":{"get":{"summary":"List food log entries","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}},"post":{"summary":"Create a food log entry","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}},"/food-log/{id}/comments":{"post":{"summary":"Comment on a food log entry","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"401":{"description":"Invalid or revoked key"},"403":{"description":"Insufficient scope"},"404":{"description":"Not found"}}}}}}