Download OpenAPI specification:
Register a new user account.
Invite-only: all registrations require a valid invite_token. Self-service signup without an invite returns 403.
Invited path: creates the user with status='pending', links them to the inviting tenant as role='member'/status='invited', marks the invite as used, and returns a JWT. The user is redirected to /pending in the frontend until an admin approves them from Settings → Users.
Duplicate username or email raises 409.
| username required | string (Username) |
| email required | string (Email) |
| password required | string (Password) |
| tenant_name | string (Tenant Name) Default: "" |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "username": "string",
- "email": "string",
- "password": "string",
- "tenant_name": "",
- "invite_token": "string"
}nullAuthenticate with username/email + password and return a JWT pair.
Accepts either username or email as the identifier (case-insensitive). Raises 401 for missing users or wrong passwords (same message to avoid username enumeration). Raises 403 for rejected or still-pending accounts. Updates last_login on success. Super admin users are assigned their primary tenant context if they have one; non-super users get their first active tenant membership.
| username required | string (Username) |
| password required | string (Password) |
{- "username": "string",
- "password": "string"
}nullSign in or register via Google OAuth (id_token / GIS button flow).
Verifies the Google ID token credential returned by the GIS Sign-In button, then delegates all user find/create/invite logic to process_google_user. Kept for backward compatibility; new clients use POST /google/token.
| id_token required | string (Id Token) |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "id_token": "string",
- "invite_token": "string"
}nullSign in or register via Google OAuth (access_token / useGoogleLogin flow).
Accepts the OAuth2 access_token returned by @react-oauth/google's useGoogleLogin hook (implicit flow, scope: openid email profile).
This endpoint exists to support the native-button Google sign-in flow on the frontend, which was introduced to fix a blank-screen bug on iOS Safari. The GIS iframe button (used by GoogleLogin component) opens a popup from within a cross-origin iframe; iOS Safari's popup blocker silently kills it. A native HTML button calling useGoogleLogin() is a first-party user gesture and is not subject to that restriction.
Validates the access_token via Google's tokeninfo + userinfo endpoints, then delegates to the same process_google_user service as the id_token flow.
| access_token required | string (Access Token) |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "access_token": "string",
- "invite_token": "string"
}nullExchange a refresh token for a new access + refresh token pair.
The refresh token is read from the HttpOnly lyncare_refresh cookie
(preferred) or — for backward compatibility — from the JSON body.
Validates the token type, looks up the user, and re-issues both
tokens. Raises 401 for an invalid/expired token or missing user;
403 if the user's account is no longer 'approved'. Token rotation
means each refresh token is single-use in practice (the old token
is not explicitly revoked, but the client replaces it).
Lyncare Refresh (string) or Lyncare Refresh (null) (Lyncare Refresh) |
Refresh Token (string) or Refresh Token (null) (Refresh Token) |
{- "refresh_token": "string"
}nullRe-issue JWT pair with tid set to the selected tenant (REQ-AUTH-13).
Ticket (string) or Ticket (null) (Ticket) |
| tenant_id required | integer (Tenant Id) |
{- "tenant_id": 0
}nullClear the refresh cookie and denylist any presented refresh token.
Lyncare Refresh (string) or Lyncare Refresh (null) (Lyncare Refresh) |
Refresh Token (string) or Refresh Token (null) (Refresh Token) |
{- "refresh_token": "string"
}{ }Issue a short-lived (30 s) single-use ticket for SSE connections.
The browser EventSource API cannot set custom HTTP headers, so a raw JWT in a ?token= query parameter would appear in server logs and browser history. This endpoint allows the frontend to exchange its JWT (passed via the standard Authorization header in this request) for an opaque UUID ticket that is safe to use as a query parameter.
Flow:
Tickets expire after 30 seconds and can only be used once.
Ticket (string) or Ticket (null) (Ticket) |
{ }Return the full profile of the currently authenticated user.
Includes tenant context (tenant_id, tenant_role, tenant details) so the frontend can derive routing and access-guard decisions from a single call. Called by the frontend on app load to restore session state. Does not require 'approved' status — pending users can call this to see their own status (used by the /pending page to detect approval).
Ticket (string) or Ticket (null) (Ticket) |
nullUpdate the authenticated user's profile fields.
PATCH semantics — only supplied fields are updated. Username and email changes require current_password verification for password accounts. Raises 409 if the new username or email is already taken. When profile_colour is changed, the update is propagated to care_group_members.display_colour for every group the user belongs to, keeping the calendar consistent without a separate sync call. Raises 400 if no updateable fields are supplied.
Ticket (string) or Ticket (null) (Ticket) |
Profile Colour (string) or Profile Colour (null) (Profile Colour) | |
Username (string) or Username (null) (Username) | |
Email (string) or Email (null) (Email) | |
Phone (string) or Phone (null) (Phone) | |
List On Key Contacts (boolean) or List On Key Contacts (null) (List On Key Contacts) | |
Current Password (string) or Current Password (null) (Current Password) |
{- "profile_colour": "string",
- "username": "string",
- "email": "string",
- "phone": "string",
- "list_on_key_contacts": true,
- "current_password": "string"
}nullSet or change the user's own password, clearing the forced-reset flag.
When the account already has a password hash, current_password must match. This allows Google users to add a password without a current_password check (current_password defaults to "" and is only required when ph is non-null). On success, must_change_password is set to 0, allowing accounts that were reset by an admin to proceed normally after the first password change.
Ticket (string) or Ticket (null) (Ticket) |
| new_password required | string (New Password) |
| current_password | string (Current Password) Default: "" |
{- "new_password": "string",
- "current_password": ""
}nullGenerate a new TOTP secret and return the QR code for enrolment.
Only call this for native password-login users (no Google OAuth). MFA is not enabled until the user verifies with a code via POST /me/mfa/enable. Calling this endpoint again replaces any pending (unverified) secret.
Ticket (string) or Ticket (null) (Ticket) |
{- "secret": "string",
- "qr_code": "string"
}Verify the first TOTP code and mark MFA as enabled.
Requires that POST /me/mfa/setup was called first. Once verified, all subsequent logins require a TOTP code in addition to the password. Also generates and returns one-time backup recovery codes.
Ticket (string) or Ticket (null) (Ticket) |
| code required | string (Code) |
{- "code": "string"
}{ }Disable MFA after verifying the current TOTP code.
The user must supply a valid TOTP code (or a backup code) to prevent a third party from disabling MFA if they gain access to the session.
Ticket (string) or Ticket (null) (Ticket) |
| code required | string (Code) |
{- "code": "string"
}{ }Verify a TOTP code during the login MFA step.
Called after initial password verification when mfa_enabled=true. The frontend should present this form when the login response includes {"mfa_required": true} in the payload. On success returns the normal auth response (access + refresh tokens).
Rate limited to 5 attempts per minute per user/IP to prevent brute-force.
| code required | string (Code) |
{- "code": "string"
}{ }Register a new user account.
Invite-only: all registrations require a valid invite_token. Self-service signup without an invite returns 403.
Invited path: creates the user with status='pending', links them to the inviting tenant as role='member'/status='invited', marks the invite as used, and returns a JWT. The user is redirected to /pending in the frontend until an admin approves them from Settings → Users.
Duplicate username or email raises 409.
| username required | string (Username) |
| email required | string (Email) |
| password required | string (Password) |
| tenant_name | string (Tenant Name) Default: "" |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "username": "string",
- "email": "string",
- "password": "string",
- "tenant_name": "",
- "invite_token": "string"
}nullAuthenticate with username/email + password and return a JWT pair.
Accepts either username or email as the identifier (case-insensitive). Raises 401 for missing users or wrong passwords (same message to avoid username enumeration). Raises 403 for rejected or still-pending accounts. Updates last_login on success. Super admin users are assigned their primary tenant context if they have one; non-super users get their first active tenant membership.
| username required | string (Username) |
| password required | string (Password) |
{- "username": "string",
- "password": "string"
}nullSign in or register via Google OAuth (id_token / GIS button flow).
Verifies the Google ID token credential returned by the GIS Sign-In button, then delegates all user find/create/invite logic to process_google_user. Kept for backward compatibility; new clients use POST /google/token.
| id_token required | string (Id Token) |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "id_token": "string",
- "invite_token": "string"
}nullSign in or register via Google OAuth (access_token / useGoogleLogin flow).
Accepts the OAuth2 access_token returned by @react-oauth/google's useGoogleLogin hook (implicit flow, scope: openid email profile).
This endpoint exists to support the native-button Google sign-in flow on the frontend, which was introduced to fix a blank-screen bug on iOS Safari. The GIS iframe button (used by GoogleLogin component) opens a popup from within a cross-origin iframe; iOS Safari's popup blocker silently kills it. A native HTML button calling useGoogleLogin() is a first-party user gesture and is not subject to that restriction.
Validates the access_token via Google's tokeninfo + userinfo endpoints, then delegates to the same process_google_user service as the id_token flow.
| access_token required | string (Access Token) |
Invite Token (string) or Invite Token (null) (Invite Token) |
{- "access_token": "string",
- "invite_token": "string"
}nullExchange a refresh token for a new access + refresh token pair.
The refresh token is read from the HttpOnly lyncare_refresh cookie
(preferred) or — for backward compatibility — from the JSON body.
Validates the token type, looks up the user, and re-issues both
tokens. Raises 401 for an invalid/expired token or missing user;
403 if the user's account is no longer 'approved'. Token rotation
means each refresh token is single-use in practice (the old token
is not explicitly revoked, but the client replaces it).
Lyncare Refresh (string) or Lyncare Refresh (null) (Lyncare Refresh) |
Refresh Token (string) or Refresh Token (null) (Refresh Token) |
{- "refresh_token": "string"
}nullRe-issue JWT pair with tid set to the selected tenant (REQ-AUTH-13).
Ticket (string) or Ticket (null) (Ticket) |
| tenant_id required | integer (Tenant Id) |
{- "tenant_id": 0
}nullClear the refresh cookie and denylist any presented refresh token.
Lyncare Refresh (string) or Lyncare Refresh (null) (Lyncare Refresh) |
Refresh Token (string) or Refresh Token (null) (Refresh Token) |
{- "refresh_token": "string"
}{ }Issue a short-lived (30 s) single-use ticket for SSE connections.
The browser EventSource API cannot set custom HTTP headers, so a raw JWT in a ?token= query parameter would appear in server logs and browser history. This endpoint allows the frontend to exchange its JWT (passed via the standard Authorization header in this request) for an opaque UUID ticket that is safe to use as a query parameter.
Flow:
Tickets expire after 30 seconds and can only be used once.
Ticket (string) or Ticket (null) (Ticket) |
{ }Return the full profile of the currently authenticated user.
Includes tenant context (tenant_id, tenant_role, tenant details) so the frontend can derive routing and access-guard decisions from a single call. Called by the frontend on app load to restore session state. Does not require 'approved' status — pending users can call this to see their own status (used by the /pending page to detect approval).
Ticket (string) or Ticket (null) (Ticket) |
nullUpdate the authenticated user's profile fields.
PATCH semantics — only supplied fields are updated. Username and email changes require current_password verification for password accounts. Raises 409 if the new username or email is already taken. When profile_colour is changed, the update is propagated to care_group_members.display_colour for every group the user belongs to, keeping the calendar consistent without a separate sync call. Raises 400 if no updateable fields are supplied.
Ticket (string) or Ticket (null) (Ticket) |
Profile Colour (string) or Profile Colour (null) (Profile Colour) | |
Username (string) or Username (null) (Username) | |
Email (string) or Email (null) (Email) | |
Phone (string) or Phone (null) (Phone) | |
List On Key Contacts (boolean) or List On Key Contacts (null) (List On Key Contacts) | |
Current Password (string) or Current Password (null) (Current Password) |
{- "profile_colour": "string",
- "username": "string",
- "email": "string",
- "phone": "string",
- "list_on_key_contacts": true,
- "current_password": "string"
}nullSet or change the user's own password, clearing the forced-reset flag.
When the account already has a password hash, current_password must match. This allows Google users to add a password without a current_password check (current_password defaults to "" and is only required when ph is non-null). On success, must_change_password is set to 0, allowing accounts that were reset by an admin to proceed normally after the first password change.
Ticket (string) or Ticket (null) (Ticket) |
| new_password required | string (New Password) |
| current_password | string (Current Password) Default: "" |
{- "new_password": "string",
- "current_password": ""
}nullGenerate a new TOTP secret and return the QR code for enrolment.
Only call this for native password-login users (no Google OAuth). MFA is not enabled until the user verifies with a code via POST /me/mfa/enable. Calling this endpoint again replaces any pending (unverified) secret.
Ticket (string) or Ticket (null) (Ticket) |
{- "secret": "string",
- "qr_code": "string"
}Verify the first TOTP code and mark MFA as enabled.
Requires that POST /me/mfa/setup was called first. Once verified, all subsequent logins require a TOTP code in addition to the password. Also generates and returns one-time backup recovery codes.
Ticket (string) or Ticket (null) (Ticket) |
| code required | string (Code) |
{- "code": "string"
}{ }Disable MFA after verifying the current TOTP code.
The user must supply a valid TOTP code (or a backup code) to prevent a third party from disabling MFA if they gain access to the session.
Ticket (string) or Ticket (null) (Ticket) |
| code required | string (Code) |
{- "code": "string"
}{ }Verify a TOTP code during the login MFA step.
Called after initial password verification when mfa_enabled=true. The frontend should present this form when the login response includes {"mfa_required": true} in the payload. On success returns the normal auth response (access + refresh tokens).
Rate limited to 5 attempts per minute per user/IP to prevent brute-force.
| code required | string (Code) |
{- "code": "string"
}{ }| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Role (string) or Role (null) (Role) | |
Status (string) or Status (null) (Status) |
{- "role": "string",
- "status": "string"
}null| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| profile_colour required | string (Profile Colour) |
{- "profile_colour": "string"
}nullReturn module access status for a specific tenant member.
Returns one entry per product module (see MODULES).
enabled is True unless overridden to False in tenant_user_module_access.
tenant_active is True when this tenant's subscription for that module is
active or trial (admins can then grant or deny member access; denying
only applies once the module is active for the account).
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- { }
]Enable or disable a module for a specific tenant member.
Admins and super-admins cannot be restricted (their access is always full).
| user_id required | integer (User Id) |
| module required | string (Module) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| enabled required | boolean (Enabled) |
{- "enabled": true
}{ }| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Role (string) or Role (null) (Role) | |
Status (string) or Status (null) (Status) |
{- "role": "string",
- "status": "string"
}null| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| profile_colour required | string (Profile Colour) |
{- "profile_colour": "string"
}nullReturn module access status for a specific tenant member.
Returns one entry per product module (see MODULES).
enabled is True unless overridden to False in tenant_user_module_access.
tenant_active is True when this tenant's subscription for that module is
active or trial (admins can then grant or deny member access; denying
only applies once the module is active for the account).
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- { }
]Enable or disable a module for a specific tenant member.
Admins and super-admins cannot be restricted (their access is always full).
| user_id required | integer (User Id) |
| module required | string (Module) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| enabled required | boolean (Enabled) |
{- "enabled": true
}{ }As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Message (string) or Message (null) (Message) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
| invite_role | string (Invite Role) Default: "carer" |
| ttl_hours | integer (Ttl Hours) Default: 72 |
{- "message": "string",
- "patient_id": 0,
- "invite_role": "carer",
- "ttl_hours": 72
}nullAllow admin to change the role/patient on an invite before they approve the user.
Works even after the invite has been consumed (used_at IS NOT NULL) — the updated values are read at the moment the admin approves the pending user.
| invitation_id required | integer (Invitation Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| invite_role required | string (Invite Role) |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "invite_role": "string",
- "patient_id": 0
}null| invitation_id required | integer (Invitation Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Message (string) or Message (null) (Message) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
| invite_role | string (Invite Role) Default: "carer" |
| ttl_hours | integer (Ttl Hours) Default: 72 |
{- "message": "string",
- "patient_id": 0,
- "invite_role": "carer",
- "ttl_hours": 72
}nullAllow admin to change the role/patient on an invite before they approve the user.
Works even after the invite has been consumed (used_at IS NOT NULL) — the updated values are read at the moment the admin approves the pending user.
| invitation_id required | integer (Invitation Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| invite_role required | string (Invite Role) |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "invite_role": "string",
- "patient_id": 0
}null| invitation_id required | integer (Invitation Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return the effective tier limits and current usage counts for the caller's tenant.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| tenant_id required | integer (Tenant Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Timezone (string) or Timezone (null) (Timezone) |
{- "name": "string",
- "timezone": "string"
}nullReturn the effective tier limits and current usage counts for the caller's tenant.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| tenant_id required | integer (Tenant Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Timezone (string) or Timezone (null) (Timezone) |
{- "name": "string",
- "timezone": "string"
}nullReturn the canonical list of module slugs the platform supports.
The frontend fetches this at boot instead of hard-coding the list, so
adding a new module only requires a backend deploy. The shape is
deliberately simple ({slugs, meta}) — downstream consumers already
have their own display logic via MODULE_META.
delivery maps each slug to product readiness (live / partial /
planned) from billing/module_delivery.json — separate from Stripe
entitlement in tiers.json.
nullRead-only module catalog for any tenant member (admin manages via PATCH).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLet a non-admin member ask the organisation admin to purchase a module.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| module required | string (Module) |
{- "module": "string"
}nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| module required | string (Module) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| status required | string (Status) |
Valid Until (string) or Valid Until (null) (Valid Until) |
{- "status": "string",
- "valid_until": "string"
}nullReturn the module slugs active for the current (tenant, user).
Cached in Redis for 30 s — this endpoint is hit on every navigation in the frontend shell, so even a very short TTL cuts the DB load dramatically. Cache is invalidated by update_subscription() below and by any tenant_user_module_access mutation.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the canonical list of module slugs the platform supports.
The frontend fetches this at boot instead of hard-coding the list, so
adding a new module only requires a backend deploy. The shape is
deliberately simple ({slugs, meta}) — downstream consumers already
have their own display logic via MODULE_META.
delivery maps each slug to product readiness (live / partial /
planned) from billing/module_delivery.json — separate from Stripe
entitlement in tiers.json.
nullRead-only module catalog for any tenant member (admin manages via PATCH).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLet a non-admin member ask the organisation admin to purchase a module.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| module required | string (Module) |
{- "module": "string"
}nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| module required | string (Module) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| status required | string (Status) |
Valid Until (string) or Valid Until (null) (Valid Until) |
{- "status": "string",
- "valid_until": "string"
}nullReturn the module slugs active for the current (tenant, user).
Cached in Redis for 30 s — this endpoint is hit on every navigation in the frontend shell, so even a very short TTL cuts the DB load dramatically. Cache is invalidated by update_subscription() below and by any tenant_user_module_access mutation.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturns 404 when CARE_MODULE_BOARDS_ENABLED is false.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| session_id required | string (Session Id) |
| step_key required | string (Step Key) |
| choice_id required | string (Choice Id) |
| family_label required | string (Family Label) |
Clinical Value (object) or Clinical Value (null) (Clinical Value) | |
Care Date (string) or Care Date (null) (Care Date) | |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) |
{- "session_id": "string",
- "step_key": "string",
- "choice_id": "string",
- "family_label": "string",
- "clinical_value": { },
- "care_date": "string",
- "capture_instance_id": "string"
}null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| session_id required | string (Session Id) |
Care Date (string) or Care Date (null) (Care Date) | |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) |
{- "session_id": "string",
- "care_date": "string",
- "capture_instance_id": "string"
}null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Today Day Type (string) or Today Day Type (null) (Today Day Type) | |
Array of Treatment Modes (strings) or Treatment Modes (null) (Treatment Modes) | |
Cancer Primary Site (string) or Cancer Primary Site (null) (Cancer Primary Site) | |
Gentle Mode (boolean) or Gentle Mode (null) (Gentle Mode) | |
Infusion Checklist (object) or Infusion Checklist (null) (Infusion Checklist) | |
Line Care Checklist (object) or Line Care Checklist (null) (Line Care Checklist) | |
Array of Visit Prep Questions (strings) or Visit Prep Questions (null) (Visit Prep Questions) | |
Visit Prep Discussed (object) or Visit Prep Discussed (null) (Visit Prep Discussed) |
{- "today_day_type": "string",
- "treatment_modes": [
- "string"
], - "cancer_primary_site": "string",
- "gentle_mode": true,
- "infusion_checklist": { },
- "line_care_checklist": { },
- "visit_prep_questions": [
- "string"
], - "visit_prep_discussed": { }
}null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullHomepage care-board panel — status chips plus Actions for today / Your treatment icon rows.
| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
| days | integer (Days) [ 7 .. 365 ] Default: 90 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
| date required | string (Date) ^\d{4}-\d{2}-\d{2}$ |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturns 404 when CARE_MODULE_BOARDS_ENABLED is false.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| session_id required | string (Session Id) |
| step_key required | string (Step Key) |
| choice_id required | string (Choice Id) |
| family_label required | string (Family Label) |
Clinical Value (object) or Clinical Value (null) (Clinical Value) | |
Care Date (string) or Care Date (null) (Care Date) | |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) |
{- "session_id": "string",
- "step_key": "string",
- "choice_id": "string",
- "family_label": "string",
- "clinical_value": { },
- "care_date": "string",
- "capture_instance_id": "string"
}null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| session_id required | string (Session Id) |
Care Date (string) or Care Date (null) (Care Date) | |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) |
{- "session_id": "string",
- "care_date": "string",
- "capture_instance_id": "string"
}null| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Today Day Type (string) or Today Day Type (null) (Today Day Type) | |
Array of Treatment Modes (strings) or Treatment Modes (null) (Treatment Modes) | |
Cancer Primary Site (string) or Cancer Primary Site (null) (Cancer Primary Site) | |
Gentle Mode (boolean) or Gentle Mode (null) (Gentle Mode) | |
Infusion Checklist (object) or Infusion Checklist (null) (Infusion Checklist) | |
Line Care Checklist (object) or Line Care Checklist (null) (Line Care Checklist) | |
Array of Visit Prep Questions (strings) or Visit Prep Questions (null) (Visit Prep Questions) | |
Visit Prep Discussed (object) or Visit Prep Discussed (null) (Visit Prep Discussed) |
{- "today_day_type": "string",
- "treatment_modes": [
- "string"
], - "cancer_primary_site": "string",
- "gentle_mode": true,
- "infusion_checklist": { },
- "line_care_checklist": { },
- "visit_prep_questions": [
- "string"
], - "visit_prep_discussed": { }
}null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullHomepage care-board panel — status chips plus Actions for today / Your treatment icon rows.
| patient_id required | integer (Patient Id) |
| slug required | string (Slug) ^(cancer_at_home|breathing_difficulties)$ |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
| days | integer (Days) [ 7 .. 365 ] Default: 90 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| slug | string (Slug) ^(cancer_at_home|breathing_difficulties)$ Default: "cancer_at_home" |
| date required | string (Date) ^\d{4}-\d{2}-\d{2}$ |
Capture Instance Id (string) or Capture Instance Id (null) (Capture Instance Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) Person in care — reason catalogue is per patient |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- {
- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}
]As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
Description (string) or Description (null) (Description) | |
| color_hex | string (Color Hex) Default: "#6B7280" |
| display_order | integer (Display Order) Default: 0 |
| active | boolean (Active) Default: true |
| patient_id required | integer (Patient Id) |
{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "patient_id": 0
}{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}| reason_id required | integer (Reason Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Description (string) or Description (null) (Description) | |
Color Hex (string) or Color Hex (null) (Color Hex) | |
Display Order (integer) or Display Order (null) (Display Order) | |
Active (boolean) or Active (null) (Active) |
{- "name": "string",
- "description": "string",
- "color_hex": "string",
- "display_order": 0,
- "active": true
}{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}| reason_id required | integer (Reason Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) Person in care — reason catalogue is per patient |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- {
- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}
]As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
Description (string) or Description (null) (Description) | |
| color_hex | string (Color Hex) Default: "#6B7280" |
| display_order | integer (Display Order) Default: 0 |
| active | boolean (Active) Default: true |
| patient_id required | integer (Patient Id) |
{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "patient_id": 0
}{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}| reason_id required | integer (Reason Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Description (string) or Description (null) (Description) | |
Color Hex (string) or Color Hex (null) (Color Hex) | |
Display Order (integer) or Display Order (null) (Display Order) | |
Active (boolean) or Active (null) (Active) |
{- "name": "string",
- "description": "string",
- "color_hex": "string",
- "display_order": 0,
- "active": true
}{- "name": "string",
- "description": "string",
- "color_hex": "#6B7280",
- "display_order": 0,
- "active": true,
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "created_at": "string"
}| reason_id required | integer (Reason Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Date (string) or Date (null) (Date) | |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to dispensings for this patient | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- {
- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}
]As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) ISO date YYYY-MM-DD |
| time required | string (Time) HH:MM 24-hour |
| script_id required | integer (Script Id) |
| volume required | number (Volume) |
Reason Type Id (integer) or Reason Type Id (null) (Reason Type Id) | |
Notes (string) or Notes (null) (Notes) | |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "patient_id": 0
}{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": "string",
- "updated_at": "string",
- "first_dose_reaction_prompt": {
- "check_id": 0,
- "dispensing_id": 0,
- "medicine_name": "string",
- "patient_id": 0
}
}| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Date (string) or Date (null) (Date) | |
Time (string) or Time (null) (Time) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Volume (number) or Volume (null) (Volume) | |
Reason Type Id (integer) or Reason Type Id (null) (Reason Type Id) | |
Notes (string) or Notes (null) (Notes) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string"
}{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}| dispensing_id required | integer (Dispensing Id) |
| reason required | string (Reason) non-empty Mandatory reason for deletion |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Date (string) or Date (null) (Date) | |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to dispensings for this patient | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
[- {
- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}
]As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) ISO date YYYY-MM-DD |
| time required | string (Time) HH:MM 24-hour |
| script_id required | integer (Script Id) |
| volume required | number (Volume) |
Reason Type Id (integer) or Reason Type Id (null) (Reason Type Id) | |
Notes (string) or Notes (null) (Notes) | |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "patient_id": 0
}{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": "string",
- "updated_at": "string",
- "first_dose_reaction_prompt": {
- "check_id": 0,
- "dispensing_id": 0,
- "medicine_name": "string",
- "patient_id": 0
}
}| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Date (string) or Date (null) (Date) | |
Time (string) or Time (null) (Time) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Volume (number) or Volume (null) (Volume) | |
Reason Type Id (integer) or Reason Type Id (null) (Reason Type Id) | |
Notes (string) or Notes (null) (Notes) |
{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string"
}{- "date": "string",
- "time": "string",
- "script_id": 0,
- "volume": 0,
- "reason_type_id": 0,
- "notes": "string",
- "id": 0,
- "tenant_id": 0,
- "patient_id": 0,
- "scheduled_item_id": 0,
- "dispense_batch_id": 0,
- "proof_image_url": "string",
- "medicine_name": "string",
- "medicine_unit": "string",
- "medicine_color": "string",
- "reason_type_name": "string",
- "reason_type_color": "string",
- "created_at": { },
- "updated_at": { }
}| dispensing_id required | integer (Dispensing Id) |
| reason required | string (Reason) non-empty Mandatory reason for deletion |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Adverse reaction events for the dispensing history log (observed=true only).
| patient_id required | integer (Patient Id) |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSingle check row for detail modal (alerts + history deep links).
| check_id required | integer (Check Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord whether an adverse reaction was observed after a first dose.
| check_id required | integer (Check Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| observed required | boolean (Observed) True if an observable adverse reaction was seen; false if none. |
Notes (string) or Notes (null) (Notes) Required when observed is true — describe what was seen. |
{- "observed": true,
- "notes": "string"
}nullAdverse reaction events for the dispensing history log (observed=true only).
| patient_id required | integer (Patient Id) |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSingle check row for detail modal (alerts + history deep links).
| check_id required | integer (Check Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord whether an adverse reaction was observed after a first dose.
| check_id required | integer (Check Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| observed required | boolean (Observed) True if an observable adverse reaction was seen; false if none. |
Notes (string) or Notes (null) (Notes) Required when observed is true — describe what was seen. |
{- "observed": true,
- "notes": "string"
}nullReturn quick-pick script IDs for Log a dose.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReplace quick-pick script IDs for Log a dose.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| quick_script_ids | Array of integers (Quick Script Ids) <= 4 items |
{- "quick_script_ids": [
- 0
]
}nullReturn quick-pick script IDs for Log a dose.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReplace quick-pick script IDs for Log a dose.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| quick_script_ids | Array of integers (Quick Script Ids) <= 4 items |
{- "quick_script_ids": [
- 0
]
}nullFirst calendar day with any dispensing for the selected patient (chart range bound).
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPer-day totals between two dates, broken down by medicine and reason type.
| date_from required | string (Date From) |
| date_to required | string (Date To) |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLiquids: summed volume (ml) per medicine per bucket — line series (left axis). Solids: summed dose amount per medicine per bucket (dispensing.volume = units per row, e.g. tablets/capsules, including fractions) — stacked bars (right axis). Uses SUM(volume), not COUNT(*), so half-tablet rows contribute 0.5 each. Classification uses patient_scripts form/unit (ml = liquid).
| date_from required | string (Date From) |
| date_to required | string (Date To) |
| bucket required | string (Bucket) day | week | month |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDistinct medicines with at least one dispensing in the selected year (and optional month).
| year required | integer (Year) |
Month (integer) or Month (null) (Month) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDaily dose volume for the heatmap calendar. Optionally filter to one medicine.
| year required | integer (Year) |
Month (integer) or Month (null) (Month) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAggregated totals by reason type for donut chart.
Only includes rows linked to a tenant reason_types row — doses with no reason_type_id are excluded (no synthetic 'Unknown' bucket).
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
Reason Pattern (string) or Reason Pattern (null) (Reason Pattern) Filter reason_types.name ILIKE (e.g. breakthrough for cancer hub) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRolling daily totals for the trend area chart.
| days | integer (Days) [ 1 .. 365 ] Default: 30 |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDaily care-module session completions for board sparklines.
| slug required | string (Slug) Care profile slug, e.g. cancer_at_home |
| days | integer (Days) [ 1 .. 90 ] Default: 7 |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAll dispensings for a single day, for the intra-day timeline chart.
| date required | string (Date) |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullFirst calendar day with any dispensing for the selected patient (chart range bound).
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPer-day totals between two dates, broken down by medicine and reason type.
| date_from required | string (Date From) |
| date_to required | string (Date To) |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLiquids: summed volume (ml) per medicine per bucket — line series (left axis). Solids: summed dose amount per medicine per bucket (dispensing.volume = units per row, e.g. tablets/capsules, including fractions) — stacked bars (right axis). Uses SUM(volume), not COUNT(*), so half-tablet rows contribute 0.5 each. Classification uses patient_scripts form/unit (ml = liquid).
| date_from required | string (Date From) |
| date_to required | string (Date To) |
| bucket required | string (Bucket) day | week | month |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDistinct medicines with at least one dispensing in the selected year (and optional month).
| year required | integer (Year) |
Month (integer) or Month (null) (Month) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDaily dose volume for the heatmap calendar. Optionally filter to one medicine.
| year required | integer (Year) |
Month (integer) or Month (null) (Month) | |
Script Id (integer) or Script Id (null) (Script Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAggregated totals by reason type for donut chart.
Only includes rows linked to a tenant reason_types row — doses with no reason_type_id are excluded (no synthetic 'Unknown' bucket).
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
Reason Pattern (string) or Reason Pattern (null) (Reason Pattern) Filter reason_types.name ILIKE (e.g. breakthrough for cancer hub) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRolling daily totals for the trend area chart.
| days | integer (Days) [ 1 .. 365 ] Default: 30 |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDaily care-module session completions for board sparklines.
| slug required | string (Slug) Care profile slug, e.g. cancer_at_home |
| days | integer (Days) [ 1 .. 90 ] Default: 7 |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAll dispensings for a single day, for the intra-day timeline chart.
| date required | string (Date) |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAction (string) or Action (null) (Action) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
| limit | integer (Limit) [ 1 .. 500 ] Default: 50 |
| offset | integer (Offset) >= 0 Default: 0 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAction (string) or Action (null) (Action) | |
Patient Id (integer) or Patient Id (null) (Patient Id) Limit to one patient (REQ-MED-15) | |
| limit | integer (Limit) [ 1 .. 500 ] Default: 50 |
| offset | integer (Offset) >= 0 Default: 0 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| replace_existing | boolean (Replace Existing) Default: false |
{- "replace_existing": false
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| scheduled_time required | string (Scheduled Time) |
Color Hex (string) or Color Hex (null) (Color Hex) |
{- "name": "string",
- "scheduled_time": "string",
- "color_hex": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Scheduled Time (string) or Scheduled Time (null) (Scheduled Time) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Active (boolean) or Active (null) (Active) | |
Color Hex (string) or Color Hex (null) (Color Hex) |
{- "name": "string",
- "scheduled_time": "string",
- "sort_order": 0,
- "active": true,
- "color_hex": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| script_id required | integer (Script Id) |
| dose_amount required | number (Dose Amount) |
Unit (string) or Unit (null) (Unit) | |
Instructions (string) or Instructions (null) (Instructions) | |
Schedule From Date (string) or Schedule From Date (null) (Schedule From Date) Optional YYYY-MM-DD when adding a medicine to a past day the carer forgot to schedule. Sets created_at to that calendar day at the slot time so dispense-view includes the row for that date. |
{- "script_id": 0,
- "dose_amount": 0,
- "unit": "string",
- "instructions": "string",
- "schedule_from_date": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Dose Amount (number) or Dose Amount (null) (Dose Amount) | |
Unit (string) or Unit (null) (Unit) | |
Instructions (string) or Instructions (null) (Instructions) | |
Active (boolean) or Active (null) (Active) |
{- "dose_amount": 0,
- "unit": "string",
- "instructions": "string",
- "active": true
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
Date (string) or Date (null) (Date) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| scheduled_item_id required | integer (Scheduled Item Id) |
| date required | string (Date) |
| time required | string (Time) |
Notes (string) or Notes (null) (Notes) |
{- "scheduled_item_id": 0,
- "date": "string",
- "time": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| group_id required | integer (Group Id) |
| date required | string (Date) |
| time required | string (Time) |
Notes (string) or Notes (null) (Notes) |
{- "group_id": 0,
- "date": "string",
- "time": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
| batch_id required | integer (Batch Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
null| patient_id required | integer (Patient Id) |
| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| batch_id required | integer (Batch Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| replace_existing | boolean (Replace Existing) Default: false |
{- "replace_existing": false
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| scheduled_time required | string (Scheduled Time) |
Color Hex (string) or Color Hex (null) (Color Hex) |
{- "name": "string",
- "scheduled_time": "string",
- "color_hex": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Scheduled Time (string) or Scheduled Time (null) (Scheduled Time) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Active (boolean) or Active (null) (Active) | |
Color Hex (string) or Color Hex (null) (Color Hex) |
{- "name": "string",
- "scheduled_time": "string",
- "sort_order": 0,
- "active": true,
- "color_hex": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| script_id required | integer (Script Id) |
| dose_amount required | number (Dose Amount) |
Unit (string) or Unit (null) (Unit) | |
Instructions (string) or Instructions (null) (Instructions) | |
Schedule From Date (string) or Schedule From Date (null) (Schedule From Date) Optional YYYY-MM-DD when adding a medicine to a past day the carer forgot to schedule. Sets created_at to that calendar day at the slot time so dispense-view includes the row for that date. |
{- "script_id": 0,
- "dose_amount": 0,
- "unit": "string",
- "instructions": "string",
- "schedule_from_date": "string"
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Dose Amount (number) or Dose Amount (null) (Dose Amount) | |
Unit (string) or Unit (null) (Unit) | |
Instructions (string) or Instructions (null) (Instructions) | |
Active (boolean) or Active (null) (Active) |
{- "dose_amount": 0,
- "unit": "string",
- "instructions": "string",
- "active": true
}null| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
Date (string) or Date (null) (Date) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| scheduled_item_id required | integer (Scheduled Item Id) |
| date required | string (Date) |
| time required | string (Time) |
Notes (string) or Notes (null) (Notes) |
{- "scheduled_item_id": 0,
- "date": "string",
- "time": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| group_id required | integer (Group Id) |
| date required | string (Date) |
| time required | string (Time) |
Notes (string) or Notes (null) (Notes) |
{- "group_id": 0,
- "date": "string",
- "time": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
| batch_id required | integer (Batch Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
null| patient_id required | integer (Patient Id) |
| dispensing_id required | integer (Dispensing Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| batch_id required | integer (Batch Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
Photo Url (string) or Photo Url (null) (Photo Url) | |
Dob (string) or Dob (null) (Dob) | |
Address (string) or Address (null) (Address) | |
Medical Summary (string) or Medical Summary (null) (Medical Summary) | |
Gender (string) or Gender (null) (Gender) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "name": "string",
- "photo_url": "string",
- "dob": "string",
- "address": "string",
- "medical_summary": "string",
- "gender": "string",
- "archetype_id": 0
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Photo Url (string) or Photo Url (null) (Photo Url) | |
Dob (string) or Dob (null) (Dob) | |
Address (string) or Address (null) (Address) | |
Medical Summary (string) or Medical Summary (null) (Medical Summary) | |
Gender (string) or Gender (null) (Gender) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "name": "string",
- "photo_url": "string",
- "dob": "string",
- "address": "string",
- "medical_summary": "string",
- "gender": "string",
- "archetype_id": 0
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| user_id required | integer (User Id) |
| role | string (Role) Default: "carer" |
{- "user_id": 0,
- "role": "carer"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Email (string) or Email (null) (Email) | |
User Id (integer) or User Id (null) (User Id) | |
| role | string (Role) Default: "carer" |
Display Colour (string) or Display Colour (null) (Display Colour) | |
Display Name (string) or Display Name (null) (Display Name) |
{- "email": "string",
- "user_id": 0,
- "role": "carer",
- "display_colour": "string",
- "display_name": "string"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Role (string) or Role (null) (Role) | |
Display Colour (string) or Display Colour (null) (Display Colour) | |
Display Name (string) or Display Name (null) (Display Name) |
{- "role": "string",
- "display_colour": "string",
- "display_name": "string"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
Photo Url (string) or Photo Url (null) (Photo Url) | |
Dob (string) or Dob (null) (Dob) | |
Address (string) or Address (null) (Address) | |
Medical Summary (string) or Medical Summary (null) (Medical Summary) | |
Gender (string) or Gender (null) (Gender) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "name": "string",
- "photo_url": "string",
- "dob": "string",
- "address": "string",
- "medical_summary": "string",
- "gender": "string",
- "archetype_id": 0
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Photo Url (string) or Photo Url (null) (Photo Url) | |
Dob (string) or Dob (null) (Dob) | |
Address (string) or Address (null) (Address) | |
Medical Summary (string) or Medical Summary (null) (Medical Summary) | |
Gender (string) or Gender (null) (Gender) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "name": "string",
- "photo_url": "string",
- "dob": "string",
- "address": "string",
- "medical_summary": "string",
- "gender": "string",
- "archetype_id": 0
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| user_id required | integer (User Id) |
| role | string (Role) Default: "carer" |
{- "user_id": 0,
- "role": "carer"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Email (string) or Email (null) (Email) | |
User Id (integer) or User Id (null) (User Id) | |
| role | string (Role) Default: "carer" |
Display Colour (string) or Display Colour (null) (Display Colour) | |
Display Name (string) or Display Name (null) (Display Name) |
{- "email": "string",
- "user_id": 0,
- "role": "carer",
- "display_colour": "string",
- "display_name": "string"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Role (string) or Role (null) (Role) | |
Display Colour (string) or Display Colour (null) (Display Colour) | |
Display Name (string) or Display Name (null) (Display Name) |
{- "role": "string",
- "display_colour": "string",
- "display_name": "string"
}null| patient_id required | integer (Patient Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}List care groups visible to the caller.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a new care group for a patient. Admin-only.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| patient_id required | integer (Patient Id) |
| timezone | string (Timezone) Default: "Australia/Sydney" |
| initial_member_ids | Array of integers (Initial Member Ids) Default: [] |
{- "name": "string",
- "patient_id": 0,
- "timezone": "Australia/Sydney",
- "initial_member_ids": [ ]
}nullReturn all members of a care group.
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAdd a user to a care group. Admin-only.
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| user_id required | integer (User Id) |
{- "user_id": 0
}nullRemove a user from a care group. Admin-only.
| group_id required | integer (Group Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Cross-patient shift list for admin dashboard and team calendar.
Date (string) or Date (null) (Date) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Group Id (integer) or Group Id (null) (Group Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a shift (generic endpoint; group_id and patient_id required).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Group Id (integer) or Group Id (null) (Group Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
| date required | string (Date) |
| time_slot | string (Time Slot) Default: "full_day" |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
| location | string (Location) Default: "home" |
| priority | string (Priority) Default: "normal" |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Array of Tasks (strings) or Tasks (null) (Tasks) |
{- "group_id": 0,
- "patient_id": 0,
- "carer_id": 0,
- "date": "string",
- "time_slot": "full_day",
- "start_time": "string",
- "end_time": "string",
- "location": "home",
- "priority": "normal",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "tasks": [
- "string"
]
}nullReturn a single shift with tasks.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPatch a shift.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
Date (string) or Date (null) (Date) | |
Time Slot (string) or Time Slot (null) (Time Slot) | |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
Location (string) or Location (null) (Location) | |
Priority (string) or Priority (null) (Priority) | |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Status (string) or Status (null) (Status) |
{- "carer_id": 0,
- "date": "string",
- "time_slot": "string",
- "start_time": "string",
- "end_time": "string",
- "location": "string",
- "priority": "string",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "status": "string"
}nullSoft-cancel a shift. Admin-only.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Add a task to an existing shift.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| title required | string (Title) |
| sort_order | integer (Sort Order) Default: 0 |
{- "title": "string",
- "sort_order": 0
}nullUpdate a care task.
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Title (string) or Title (null) (Title) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Completed (boolean) or Completed (null) (Completed) |
{- "title": "string",
- "sort_order": 0,
- "completed": true
}nullSoft-delete a care task.
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Shifts for a patient, optionally filtered to a month.
Members without patient_access receive an empty list (not 403) so the calendar can probe allocation without leaking existence.
| patient_id required | integer (Patient Id) |
Year (integer) or Year (null) (Year) | |
Month (integer) or Month (null) (Month) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a shift for a patient with auto group resolution.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Group Id (integer) or Group Id (null) (Group Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
| date required | string (Date) |
| time_slot | string (Time Slot) Default: "full_day" |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
| location | string (Location) Default: "home" |
| priority | string (Priority) Default: "normal" |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Array of Tasks (strings) or Tasks (null) (Tasks) |
{- "group_id": 0,
- "patient_id": 0,
- "carer_id": 0,
- "date": "string",
- "time_slot": "full_day",
- "start_time": "string",
- "end_time": "string",
- "location": "home",
- "priority": "normal",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "tasks": [
- "string"
]
}nullCaller-owned upcoming shifts for this patient.
| patient_id required | integer (Patient Id) |
| months | integer (Months) Default: 3 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDates in the month with no scheduled shift.
| patient_id required | integer (Patient Id) |
| year required | integer (Year) |
| month required | integer (Month) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSingle shift scoped to patient URL.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPatch a shift within the patient-scoped URL.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
Date (string) or Date (null) (Date) | |
Time Slot (string) or Time Slot (null) (Time Slot) | |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
Location (string) or Location (null) (Location) | |
Priority (string) or Priority (null) (Priority) | |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Status (string) or Status (null) (Status) |
{- "carer_id": 0,
- "date": "string",
- "time_slot": "string",
- "start_time": "string",
- "end_time": "string",
- "location": "string",
- "priority": "string",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "status": "string"
}nullSoft-cancel a shift with ownership enforcement for carers.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Add a task to a shift (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| title required | string (Title) |
| sort_order | integer (Sort Order) Default: 0 |
{- "title": "string",
- "sort_order": 0
}nullUpdate a task (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Title (string) or Title (null) (Title) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Completed (boolean) or Completed (null) (Completed) |
{- "title": "string",
- "sort_order": 0,
- "completed": true
}nullSoft-delete a task (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}List care groups visible to the caller.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a new care group for a patient. Admin-only.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| patient_id required | integer (Patient Id) |
| timezone | string (Timezone) Default: "Australia/Sydney" |
| initial_member_ids | Array of integers (Initial Member Ids) Default: [] |
{- "name": "string",
- "patient_id": 0,
- "timezone": "Australia/Sydney",
- "initial_member_ids": [ ]
}nullReturn all members of a care group.
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAdd a user to a care group. Admin-only.
| group_id required | integer (Group Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| user_id required | integer (User Id) |
{- "user_id": 0
}nullRemove a user from a care group. Admin-only.
| group_id required | integer (Group Id) |
| user_id required | integer (User Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Cross-patient shift list for admin dashboard and team calendar.
Date (string) or Date (null) (Date) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Group Id (integer) or Group Id (null) (Group Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a shift (generic endpoint; group_id and patient_id required).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Group Id (integer) or Group Id (null) (Group Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
| date required | string (Date) |
| time_slot | string (Time Slot) Default: "full_day" |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
| location | string (Location) Default: "home" |
| priority | string (Priority) Default: "normal" |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Array of Tasks (strings) or Tasks (null) (Tasks) |
{- "group_id": 0,
- "patient_id": 0,
- "carer_id": 0,
- "date": "string",
- "time_slot": "full_day",
- "start_time": "string",
- "end_time": "string",
- "location": "home",
- "priority": "normal",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "tasks": [
- "string"
]
}nullReturn a single shift with tasks.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPatch a shift.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
Date (string) or Date (null) (Date) | |
Time Slot (string) or Time Slot (null) (Time Slot) | |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
Location (string) or Location (null) (Location) | |
Priority (string) or Priority (null) (Priority) | |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Status (string) or Status (null) (Status) |
{- "carer_id": 0,
- "date": "string",
- "time_slot": "string",
- "start_time": "string",
- "end_time": "string",
- "location": "string",
- "priority": "string",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "status": "string"
}nullSoft-cancel a shift. Admin-only.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Add a task to an existing shift.
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| title required | string (Title) |
| sort_order | integer (Sort Order) Default: 0 |
{- "title": "string",
- "sort_order": 0
}nullUpdate a care task.
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Title (string) or Title (null) (Title) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Completed (boolean) or Completed (null) (Completed) |
{- "title": "string",
- "sort_order": 0,
- "completed": true
}nullSoft-delete a care task.
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Shifts for a patient, optionally filtered to a month.
Members without patient_access receive an empty list (not 403) so the calendar can probe allocation without leaking existence.
| patient_id required | integer (Patient Id) |
Year (integer) or Year (null) (Year) | |
Month (integer) or Month (null) (Month) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a shift for a patient with auto group resolution.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Group Id (integer) or Group Id (null) (Group Id) | |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
| date required | string (Date) |
| time_slot | string (Time Slot) Default: "full_day" |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
| location | string (Location) Default: "home" |
| priority | string (Priority) Default: "normal" |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Array of Tasks (strings) or Tasks (null) (Tasks) |
{- "group_id": 0,
- "patient_id": 0,
- "carer_id": 0,
- "date": "string",
- "time_slot": "full_day",
- "start_time": "string",
- "end_time": "string",
- "location": "home",
- "priority": "normal",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "tasks": [
- "string"
]
}nullCaller-owned upcoming shifts for this patient.
| patient_id required | integer (Patient Id) |
| months | integer (Months) Default: 3 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullDates in the month with no scheduled shift.
| patient_id required | integer (Patient Id) |
| year required | integer (Year) |
| month required | integer (Month) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSingle shift scoped to patient URL.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPatch a shift within the patient-scoped URL.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Carer Id (integer) or Carer Id (null) (Carer Id) | |
Date (string) or Date (null) (Date) | |
Time Slot (string) or Time Slot (null) (Time Slot) | |
Start Time (string) or Start Time (null) (Start Time) | |
End Time (string) or End Time (null) (End Time) | |
Location (string) or Location (null) (Location) | |
Priority (string) or Priority (null) (Priority) | |
Recurrence Rule (string) or Recurrence Rule (null) (Recurrence Rule) | |
Handover Notes (string) or Handover Notes (null) (Handover Notes) | |
Wellbeing Note (string) or Wellbeing Note (null) (Wellbeing Note) | |
Status (string) or Status (null) (Status) |
{- "carer_id": 0,
- "date": "string",
- "time_slot": "string",
- "start_time": "string",
- "end_time": "string",
- "location": "string",
- "priority": "string",
- "recurrence_rule": "string",
- "handover_notes": "string",
- "wellbeing_note": "string",
- "status": "string"
}nullSoft-cancel a shift with ownership enforcement for carers.
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Add a task to a shift (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| title required | string (Title) |
| sort_order | integer (Sort Order) Default: 0 |
{- "title": "string",
- "sort_order": 0
}nullUpdate a task (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Title (string) or Title (null) (Title) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Completed (boolean) or Completed (null) (Completed) |
{- "title": "string",
- "sort_order": 0,
- "completed": true
}nullSoft-delete a task (patient-scoped).
| patient_id required | integer (Patient Id) |
| shift_id required | integer (Shift Id) |
| task_id required | integer (Task Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| year required | integer (Year) |
| month required | integer (Month) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) |
| appointment_time required | string (Appointment Time) non-empty HH:MM (24h) |
| title required | string (Title) non-empty |
Address (string) or Address (null) (Address) | |
Appointment Type (string) or Appointment Type (null) (Appointment Type) Oncology preset: iv_infusion, labs, clinic_review, radiation, imaging, general |
{- "date": "string",
- "appointment_time": "string",
- "title": "string",
- "address": "string",
- "appointment_type": "string"
}null| patient_id required | integer (Patient Id) |
| appointment_id required | integer (Appointment Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Date (string) or Date (null) (Date) | |
Appointment Time (string) or Appointment Time (null) (Appointment Time) | |
Title (string) or Title (null) (Title) | |
Address (string) or Address (null) (Address) | |
Appointment Type (string) or Appointment Type (null) (Appointment Type) |
{- "date": "string",
- "appointment_time": "string",
- "title": "string",
- "address": "string",
- "appointment_type": "string"
}null| patient_id required | integer (Patient Id) |
| appointment_id required | integer (Appointment Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| year required | integer (Year) |
| month required | integer (Month) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) |
| appointment_time required | string (Appointment Time) non-empty HH:MM (24h) |
| title required | string (Title) non-empty |
Address (string) or Address (null) (Address) | |
Appointment Type (string) or Appointment Type (null) (Appointment Type) Oncology preset: iv_infusion, labs, clinic_review, radiation, imaging, general |
{- "date": "string",
- "appointment_time": "string",
- "title": "string",
- "address": "string",
- "appointment_type": "string"
}null| patient_id required | integer (Patient Id) |
| appointment_id required | integer (Appointment Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Date (string) or Date (null) (Date) | |
Appointment Time (string) or Appointment Time (null) (Appointment Time) | |
Title (string) or Title (null) (Title) | |
Address (string) or Address (null) (Address) | |
Appointment Type (string) or Appointment Type (null) (Appointment Type) |
{- "date": "string",
- "appointment_time": "string",
- "title": "string",
- "address": "string",
- "appointment_type": "string"
}null| patient_id required | integer (Patient Id) |
| appointment_id required | integer (Appointment Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) Prescription or label image (JPEG/PNG, max 15 MB) |
null| patient_id required | integer (Patient Id) |
| job_id required | string (Job Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| medicine_name_raw required | string (Medicine Name Raw) |
Color Hex (string) or Color Hex (null) (Color Hex) | |
| as_needed | boolean (As Needed) Default: false |
Strength (string) or Strength (null) (Strength) | |
Form (string) or Form (null) (Form) | |
Dose Text (string) or Dose Text (null) (Dose Text) | |
Frequency Text (string) or Frequency Text (null) (Frequency Text) | |
Dose Instructions (string) or Dose Instructions (null) (Dose Instructions) | |
| unit | string (Unit) Default: "tablet" |
Quantity Per Fill (integer) or Quantity Per Fill (null) (Quantity Per Fill) | |
Total Fills Authorised (integer) or Total Fills Authorised (null) (Total Fills Authorised) | |
| low_stock_threshold | integer (Low Stock Threshold) Default: 7 |
Prescriber Name (string) or Prescriber Name (null) (Prescriber Name) | |
Prescriber Practice (string) or Prescriber Practice (null) (Prescriber Practice) | |
Issued Date (string) or Issued Date (null) (Issued Date) | |
Expiry Date (string) or Expiry Date (null) (Expiry Date) | |
| scan_status | string (Scan Status) Default: "manual" |
Scan Raw Text (string) or Scan Raw Text (null) (Scan Raw Text) | |
Scan Confidence (number) or Scan Confidence (null) (Scan Confidence) | |
Image Url (string) or Image Url (null) (Image Url) | |
Notes (string) or Notes (null) (Notes) |
{- "medicine_name_raw": "string",
- "color_hex": "string",
- "as_needed": false,
- "strength": "string",
- "form": "string",
- "dose_text": "string",
- "frequency_text": "string",
- "dose_instructions": "string",
- "unit": "tablet",
- "quantity_per_fill": 0,
- "total_fills_authorised": 0,
- "low_stock_threshold": 7,
- "prescriber_name": "string",
- "prescriber_practice": "string",
- "issued_date": "string",
- "expiry_date": "string",
- "scan_status": "manual",
- "scan_raw_text": "string",
- "scan_confidence": 0,
- "image_url": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
Status (string) or Status (null) (Status) | |
| include_archived | boolean (Include Archived) Default: false |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| script_id required | integer (Script Id) |
| alert_type required | string (Alert Type) Enum: "stock_low" "stock_tracking_incomplete" "approaching_last_fill" "exhausted" "expired" |
{- "script_id": 0,
- "alert_type": "stock_low"
}{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Medicine Name Raw (string) or Medicine Name Raw (null) (Medicine Name Raw) | |
Color Hex (string) or Color Hex (null) (Color Hex) | |
As Needed (boolean) or As Needed (null) (As Needed) | |
Strength (string) or Strength (null) (Strength) | |
Form (string) or Form (null) (Form) | |
Dose Text (string) or Dose Text (null) (Dose Text) | |
Frequency Text (string) or Frequency Text (null) (Frequency Text) | |
Dose Instructions (string) or Dose Instructions (null) (Dose Instructions) | |
Unit (string) or Unit (null) (Unit) | |
Quantity Per Fill (integer) or Quantity Per Fill (null) (Quantity Per Fill) | |
Total Fills Authorised (integer) or Total Fills Authorised (null) (Total Fills Authorised) | |
Fills Completed (integer) or Fills Completed (null) (Fills Completed) | |
Stock Adjustment (integer) or Stock Adjustment (null) (Stock Adjustment) | |
Pills Available (integer) or Pills Available (null) (Pills Available) Admin physical dose count on hand (tablets, ml, etc.); persists last_physical_count + last_physical_count_at as authoritative baseline. | |
Low Stock Threshold (integer) or Low Stock Threshold (null) (Low Stock Threshold) | |
Prescriber Name (string) or Prescriber Name (null) (Prescriber Name) | |
Prescriber Practice (string) or Prescriber Practice (null) (Prescriber Practice) | |
Issued Date (string) or Issued Date (null) (Issued Date) | |
Expiry Date (string) or Expiry Date (null) (Expiry Date) | |
Status (string) or Status (null) (Status) | |
Notes (string) or Notes (null) (Notes) | |
Scan Status (string) or Scan Status (null) (Scan Status) |
{- "medicine_name_raw": "string",
- "color_hex": "string",
- "as_needed": true,
- "strength": "string",
- "form": "string",
- "dose_text": "string",
- "frequency_text": "string",
- "dose_instructions": "string",
- "unit": "string",
- "quantity_per_fill": 0,
- "total_fills_authorised": 0,
- "fills_completed": 0,
- "stock_adjustment": 0,
- "pills_available": 0,
- "low_stock_threshold": 0,
- "prescriber_name": "string",
- "prescriber_practice": "string",
- "issued_date": "string",
- "expiry_date": "string",
- "status": "string",
- "notes": "string",
- "scan_status": "string"
}null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| quantity_added required | integer (Quantity Added) |
Notes (string) or Notes (null) (Notes) |
{- "quantity_added": 0,
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
| fill_id required | integer (Fill Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) Prescription or label image (JPEG/PNG, max 15 MB) |
null| patient_id required | integer (Patient Id) |
| job_id required | string (Job Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| medicine_name_raw required | string (Medicine Name Raw) |
Color Hex (string) or Color Hex (null) (Color Hex) | |
| as_needed | boolean (As Needed) Default: false |
Strength (string) or Strength (null) (Strength) | |
Form (string) or Form (null) (Form) | |
Dose Text (string) or Dose Text (null) (Dose Text) | |
Frequency Text (string) or Frequency Text (null) (Frequency Text) | |
Dose Instructions (string) or Dose Instructions (null) (Dose Instructions) | |
| unit | string (Unit) Default: "tablet" |
Quantity Per Fill (integer) or Quantity Per Fill (null) (Quantity Per Fill) | |
Total Fills Authorised (integer) or Total Fills Authorised (null) (Total Fills Authorised) | |
| low_stock_threshold | integer (Low Stock Threshold) Default: 7 |
Prescriber Name (string) or Prescriber Name (null) (Prescriber Name) | |
Prescriber Practice (string) or Prescriber Practice (null) (Prescriber Practice) | |
Issued Date (string) or Issued Date (null) (Issued Date) | |
Expiry Date (string) or Expiry Date (null) (Expiry Date) | |
| scan_status | string (Scan Status) Default: "manual" |
Scan Raw Text (string) or Scan Raw Text (null) (Scan Raw Text) | |
Scan Confidence (number) or Scan Confidence (null) (Scan Confidence) | |
Image Url (string) or Image Url (null) (Image Url) | |
Notes (string) or Notes (null) (Notes) |
{- "medicine_name_raw": "string",
- "color_hex": "string",
- "as_needed": false,
- "strength": "string",
- "form": "string",
- "dose_text": "string",
- "frequency_text": "string",
- "dose_instructions": "string",
- "unit": "tablet",
- "quantity_per_fill": 0,
- "total_fills_authorised": 0,
- "low_stock_threshold": 7,
- "prescriber_name": "string",
- "prescriber_practice": "string",
- "issued_date": "string",
- "expiry_date": "string",
- "scan_status": "manual",
- "scan_raw_text": "string",
- "scan_confidence": 0,
- "image_url": "string",
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
Status (string) or Status (null) (Status) | |
| include_archived | boolean (Include Archived) Default: false |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| script_id required | integer (Script Id) |
| alert_type required | string (Alert Type) Enum: "stock_low" "stock_tracking_incomplete" "approaching_last_fill" "exhausted" "expired" |
{- "script_id": 0,
- "alert_type": "stock_low"
}{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Medicine Name Raw (string) or Medicine Name Raw (null) (Medicine Name Raw) | |
Color Hex (string) or Color Hex (null) (Color Hex) | |
As Needed (boolean) or As Needed (null) (As Needed) | |
Strength (string) or Strength (null) (Strength) | |
Form (string) or Form (null) (Form) | |
Dose Text (string) or Dose Text (null) (Dose Text) | |
Frequency Text (string) or Frequency Text (null) (Frequency Text) | |
Dose Instructions (string) or Dose Instructions (null) (Dose Instructions) | |
Unit (string) or Unit (null) (Unit) | |
Quantity Per Fill (integer) or Quantity Per Fill (null) (Quantity Per Fill) | |
Total Fills Authorised (integer) or Total Fills Authorised (null) (Total Fills Authorised) | |
Fills Completed (integer) or Fills Completed (null) (Fills Completed) | |
Stock Adjustment (integer) or Stock Adjustment (null) (Stock Adjustment) | |
Pills Available (integer) or Pills Available (null) (Pills Available) Admin physical dose count on hand (tablets, ml, etc.); persists last_physical_count + last_physical_count_at as authoritative baseline. | |
Low Stock Threshold (integer) or Low Stock Threshold (null) (Low Stock Threshold) | |
Prescriber Name (string) or Prescriber Name (null) (Prescriber Name) | |
Prescriber Practice (string) or Prescriber Practice (null) (Prescriber Practice) | |
Issued Date (string) or Issued Date (null) (Issued Date) | |
Expiry Date (string) or Expiry Date (null) (Expiry Date) | |
Status (string) or Status (null) (Status) | |
Notes (string) or Notes (null) (Notes) | |
Scan Status (string) or Scan Status (null) (Scan Status) |
{- "medicine_name_raw": "string",
- "color_hex": "string",
- "as_needed": true,
- "strength": "string",
- "form": "string",
- "dose_text": "string",
- "frequency_text": "string",
- "dose_instructions": "string",
- "unit": "string",
- "quantity_per_fill": 0,
- "total_fills_authorised": 0,
- "fills_completed": 0,
- "stock_adjustment": 0,
- "pills_available": 0,
- "low_stock_threshold": 0,
- "prescriber_name": "string",
- "prescriber_practice": "string",
- "issued_date": "string",
- "expiry_date": "string",
- "status": "string",
- "notes": "string",
- "scan_status": "string"
}null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| quantity_added required | integer (Quantity Added) |
Notes (string) or Notes (null) (Notes) |
{- "quantity_added": 0,
- "notes": "string"
}null| patient_id required | integer (Patient Id) |
| script_id required | integer (Script Id) |
| fill_id required | integer (Fill Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| start_date required | string (Start Date) YYYY-MM-DD |
| end_date required | string (End Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReplace all sleep entries for the given date atomically. Passing an empty entries list clears the day completely.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
required | Array of objects (Entries) |
{- "entries": [
- {
- "start_time": "string",
- "end_time": "string",
- "notes": "string"
}
]
}null| patient_id required | integer (Patient Id) |
| start_date required | string (Start Date) YYYY-MM-DD |
| end_date required | string (End Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReplace all sleep entries for the given date atomically. Passing an empty entries list clears the day completely.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
required | Array of objects (Entries) |
{- "entries": [
- {
- "start_time": "string",
- "end_time": "string",
- "notes": "string"
}
]
}nullReturn all vital readings for the patient on the given date, ordered by time.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn every individual vital reading over the past N days.
The frontend groups by date to build per-vital high/low bands with scatter points for intermediate readings (like Bollinger bands).
Each row: { date, recorded_time, pulse_bpm, spo2_pct, temp_celsius } Value columns are nullable — a reading may record only one vital type.
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a single vital reading for a specific time on the given date.
Multiple readings per day are allowed; a conflict at the same minute for the same vital type is rejected with HTTP 409.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| recorded_time required | string (Recorded Time) |
Pulse Bpm (integer) or Pulse Bpm (null) (Pulse Bpm) | |
Spo2 Pct (integer) or Spo2 Pct (null) (Spo2 Pct) | |
Temp Celsius (number) or Temp Celsius (null) (Temp Celsius) |
{- "recorded_time": "string",
- "pulse_bpm": 0,
- "spo2_pct": 0,
- "temp_celsius": 0
}nullDelete a single vital reading by id.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn all vital readings for the patient on the given date, ordered by time.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn every individual vital reading over the past N days.
The frontend groups by date to build per-vital high/low bands with scatter points for intermediate readings (like Bollinger bands).
Each row: { date, recorded_time, pulse_bpm, spo2_pct, temp_celsius } Value columns are nullable — a reading may record only one vital type.
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a single vital reading for a specific time on the given date.
Multiple readings per day are allowed; a conflict at the same minute for the same vital type is rejected with HTTP 409.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| recorded_time required | string (Recorded Time) |
Pulse Bpm (integer) or Pulse Bpm (null) (Pulse Bpm) | |
Spo2 Pct (integer) or Spo2 Pct (null) (Spo2 Pct) | |
Temp Celsius (number) or Temp Celsius (null) (Temp Celsius) |
{- "recorded_time": "string",
- "pulse_bpm": 0,
- "spo2_pct": 0,
- "temp_celsius": 0
}nullDelete a single vital reading by id.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn urine and bowel entries for the patient on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn intake/output rows over the past N days for trend charts.
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord urine and/or bowel observations for a specific time on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| recorded_time | string (Recorded Time) Default: "12:00" |
Urine Volume Band (integer) or Urine Volume Band (null) (Urine Volume Band) | |
Urine Color (string) or Urine Color (null) (Urine Color) | |
Stool Bristol (integer) or Stool Bristol (null) (Stool Bristol) | |
| stool_flags | Array of strings (Stool Flags) Default: [] |
{- "recorded_time": "12:00",
- "urine_volume_band": 0,
- "urine_color": "string",
- "stool_bristol": 0,
- "stool_flags": [ ]
}nullDelete a single intake/output entry by id.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn urine and bowel entries for the patient on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn intake/output rows over the past N days for trend charts.
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord urine and/or bowel observations for a specific time on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| recorded_time | string (Recorded Time) Default: "12:00" |
Urine Volume Band (integer) or Urine Volume Band (null) (Urine Volume Band) | |
Urine Color (string) or Urine Color (null) (Urine Color) | |
Stool Bristol (integer) or Stool Bristol (null) (Stool Bristol) | |
| stool_flags | Array of strings (Stool Flags) Default: [] |
{- "recorded_time": "12:00",
- "urine_volume_band": 0,
- "urine_color": "string",
- "stool_bristol": 0,
- "stool_flags": [ ]
}nullDelete a single intake/output entry by id.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn all pain entries recorded for the patient on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a pain assessment for a body region on a given date.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) |
| body_region required | string (Body Region) |
| region_label required | string (Region Label) |
| body_side | string (Body Side) Default: "front" |
| anatomy_type | string (Anatomy Type) Default: "muscle" |
| pain_level required | integer (Pain Level) |
| indicator_x_pct | number (Indicator X Pct) Default: 50 |
| indicator_y_pct | number (Indicator Y Pct) Default: 50 |
Notes (string) or Notes (null) (Notes) | |
| body_layer | string (Body Layer) Default: "surface" |
{- "date": "string",
- "body_region": "string",
- "region_label": "string",
- "body_side": "front",
- "anatomy_type": "muscle",
- "pain_level": 0,
- "indicator_x_pct": 50,
- "indicator_y_pct": 50,
- "notes": "string",
- "body_layer": "surface"
}nullReturn the daily max pain level for a body region over the past N days.
| patient_id required | integer (Patient Id) |
| region required | string (Region) Body region slug |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn daily max pain data for every body region over the past N days.
Response: { slug: { label: str, points: [{date, max_pain, anatomy_type}, ...] } }
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn all entries from the most recent date with data, strictly before before.
Used to offer carry-forward when navigating to a day with no entries yet. Returns an empty list if no prior entries exist.
| patient_id required | integer (Patient Id) |
| before required | string (Before) YYYY-MM-DD — return entries from the most recent date strictly before this |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRemove a specific pain entry. Restricted to the entry's own tenant.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn all pain entries recorded for the patient on the given date.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a pain assessment for a body region on a given date.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| date required | string (Date) |
| body_region required | string (Body Region) |
| region_label required | string (Region Label) |
| body_side | string (Body Side) Default: "front" |
| anatomy_type | string (Anatomy Type) Default: "muscle" |
| pain_level required | integer (Pain Level) |
| indicator_x_pct | number (Indicator X Pct) Default: 50 |
| indicator_y_pct | number (Indicator Y Pct) Default: 50 |
Notes (string) or Notes (null) (Notes) | |
| body_layer | string (Body Layer) Default: "surface" |
{- "date": "string",
- "body_region": "string",
- "region_label": "string",
- "body_side": "front",
- "anatomy_type": "muscle",
- "pain_level": 0,
- "indicator_x_pct": 50,
- "indicator_y_pct": 50,
- "notes": "string",
- "body_layer": "surface"
}nullReturn the daily max pain level for a body region over the past N days.
| patient_id required | integer (Patient Id) |
| region required | string (Region) Body region slug |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn daily max pain data for every body region over the past N days.
Response: { slug: { label: str, points: [{date, max_pain, anatomy_type}, ...] } }
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn all entries from the most recent date with data, strictly before before.
Used to offer carry-forward when navigating to a day with no entries yet. Returns an empty list if no prior entries exist.
| patient_id required | integer (Patient Id) |
| before required | string (Before) YYYY-MM-DD — return entries from the most recent date strictly before this |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRemove a specific pain entry. Restricted to the entry's own tenant.
| patient_id required | integer (Patient Id) |
| entry_id required | integer (Entry Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the mind assessment for the patient on the given date, or null.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate or update the mental state assessment for a patient on a specific date.
Each domain is a nullable SMALLINT (0–4); NULL means not assessed.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Mood (integer) or Mood (null) (Mood) | |
Anxiety (integer) or Anxiety (null) (Anxiety) | |
Fear (integer) or Fear (null) (Fear) | |
Cognition (integer) or Cognition (null) (Cognition) | |
Behaviour (integer) or Behaviour (null) (Behaviour) | |
Sleep (integer) or Sleep (null) (Sleep) | |
Coping (integer) or Coping (null) (Coping) |
{- "mood": 0,
- "anxiety": 0,
- "fear": 0,
- "cognition": 0,
- "behaviour": 0,
- "sleep": 0,
- "coping": 0
}nullReturn daily mental state scores for all domains over the past N days.
Only dates with at least one non-null score are included. Each row: { date, mood, anxiety, fear, cognition, behaviour, sleep, coping }
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the mind assessment for the patient on the given date, or null.
| patient_id required | integer (Patient Id) |
| date required | string (Date) YYYY-MM-DD |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate or update the mental state assessment for a patient on a specific date.
Each domain is a nullable SMALLINT (0–4); NULL means not assessed.
| patient_id required | integer (Patient Id) |
| date required | string (Date) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Mood (integer) or Mood (null) (Mood) | |
Anxiety (integer) or Anxiety (null) (Anxiety) | |
Fear (integer) or Fear (null) (Fear) | |
Cognition (integer) or Cognition (null) (Cognition) | |
Behaviour (integer) or Behaviour (null) (Behaviour) | |
Sleep (integer) or Sleep (null) (Sleep) | |
Coping (integer) or Coping (null) (Coping) |
{- "mood": 0,
- "anxiety": 0,
- "fear": 0,
- "cognition": 0,
- "behaviour": 0,
- "sleep": 0,
- "coping": 0
}nullReturn daily mental state scores for all domains over the past N days.
Only dates with at least one non-null score are included. Each row: { date, mood, anxiety, fear, cognition, behaviour, sleep, coping }
| patient_id required | integer (Patient Id) |
| days | integer (Days) [ 7 .. 365 ] Default: 30 Number of days to look back |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn pain module settings for the current tenant, merged with defaults.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate pain module settings for the current tenant. Tenant admin only.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Module Label (string) or Module Label (null) (Module Label) | |
Module Description (string) or Module Description (null) (Module Description) | |
Enable Body Map (boolean) or Enable Body Map (null) (Enable Body Map) | |
Enable Vitals (boolean) or Enable Vitals (null) (Enable Vitals) | |
Enable Mind (boolean) or Enable Mind (null) (Enable Mind) | |
Standalone Mode (boolean) or Standalone Mode (null) (Standalone Mode) | |
Storage Key Prefix (string) or Storage Key Prefix (null) (Storage Key Prefix) |
{- "module_label": "string",
- "module_description": "string",
- "enable_body_map": true,
- "enable_vitals": true,
- "enable_mind": true,
- "standalone_mode": true,
- "storage_key_prefix": "string"
}nullReturn pain module settings for the current tenant, merged with defaults.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate pain module settings for the current tenant. Tenant admin only.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Module Label (string) or Module Label (null) (Module Label) | |
Module Description (string) or Module Description (null) (Module Description) | |
Enable Body Map (boolean) or Enable Body Map (null) (Enable Body Map) | |
Enable Vitals (boolean) or Enable Vitals (null) (Enable Vitals) | |
Enable Mind (boolean) or Enable Mind (null) (Enable Mind) | |
Standalone Mode (boolean) or Standalone Mode (null) (Standalone Mode) | |
Storage Key Prefix (string) or Storage Key Prefix (null) (Storage Key Prefix) |
{- "module_label": "string",
- "module_description": "string",
- "enable_body_map": true,
- "enable_vitals": true,
- "enable_mind": true,
- "standalone_mode": true,
- "storage_key_prefix": "string"
}null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| list_type | string (List Type) Default: "general" |
| grouping_mode | string (Grouping Mode) Default: "by_category" |
{- "name": "string",
- "list_type": "general",
- "grouping_mode": "by_category"
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Grouping Mode (string) or Grouping Mode (null) (Grouping Mode) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Is Active (boolean) or Is Active (null) (Is Active) |
{- "name": "string",
- "grouping_mode": "string",
- "sort_order": 0,
- "is_active": true
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| status | string (Status) Default: "active" active|purchased|removed|all |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Catalog Item Id (integer) or Catalog Item Id (null) (Catalog Item Id) | |
Suggestion Id (integer) or Suggestion Id (null) (Suggestion Id) | |
| name required | string (Name) |
Category Id (integer) or Category Id (null) (Category Id) | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) | |
| item_type | string (Item Type) Default: "product" |
| quantity | number (Quantity) Default: 1 |
Unit (string) or Unit (null) (Unit) | |
Notes (string) or Notes (null) (Notes) | |
| priority | string (Priority) Default: "normal" |
Supplier Notes (string) or Supplier Notes (null) (Supplier Notes) | |
| is_recurring | boolean (Is Recurring) Default: false |
Recurrence Interval Days (integer) or Recurrence Interval Days (null) (Recurrence Interval Days) | |
Shift Id (integer) or Shift Id (null) (Shift Id) | |
Photo Url (string) or Photo Url (null) (Photo Url) |
{- "catalog_item_id": 0,
- "suggestion_id": 0,
- "name": "string",
- "category_id": 0,
- "subcategory_id": 0,
- "item_type": "product",
- "quantity": 1,
- "unit": "string",
- "notes": "string",
- "priority": "normal",
- "supplier_notes": "string",
- "is_recurring": false,
- "recurrence_interval_days": 0,
- "shift_id": 0,
- "photo_url": "string"
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Quantity (number) or Quantity (null) (Quantity) | |
Unit (string) or Unit (null) (Unit) | |
Notes (string) or Notes (null) (Notes) | |
Priority (string) or Priority (null) (Priority) | |
Supplier Notes (string) or Supplier Notes (null) (Supplier Notes) | |
Is Recurring (boolean) or Is Recurring (null) (Is Recurring) | |
Recurrence Interval Days (integer) or Recurrence Interval Days (null) (Recurrence Interval Days) | |
Category Id (integer) or Category Id (null) (Category Id) | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) |
{- "name": "string",
- "quantity": 0,
- "unit": "string",
- "notes": "string",
- "priority": "string",
- "supplier_notes": "string",
- "is_recurring": true,
- "recurrence_interval_days": 0,
- "category_id": 0,
- "subcategory_id": 0
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPOST variant of remove — matches the purchase/unpurchase pattern.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAttach or replace the branded product photo on a shopping list item.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
{ }Admin-only: remove the custom product photo and revert the item to its default icon.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Serve the stored product photo (authenticated — not public static).
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullServe the most recent custom product photo taken for a catalog item by this patient/tenant. Used to show user's own branded photo on catalog tiles.
| patient_id required | integer (Patient Id) |
| catalog_item_id required | integer (Catalog Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullServe the most recent custom product photo taken for a user-added suggestion item by this patient/tenant. Mirrors serve_catalog_item_photo but keyed by suggestion_id.
| patient_id required | integer (Patient Id) |
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| limit | integer (Limit) [ 1 .. 100 ] Default: 30 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Catalog Item Id (integer) or Catalog Item Id (null) (Catalog Item Id) | |
Suggestion Id (integer) or Suggestion Id (null) (Suggestion Id) | |
| mode required | string (Mode) |
{- "catalog_item_id": 0,
- "suggestion_id": 0,
- "mode": "string"
}nullServer-Sent Events stream for real-time shopping list updates.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLocale (string) or Locale (null) (Locale) BCP-47 locale e.g. en-AU | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| q required | string (Q) >= 2 characters Search query (min 2 chars) |
Locale (string) or Locale (null) (Locale) BCP-47 locale | |
List Type (string) or List Type (null) (List Type) | |
| limit | integer (Limit) [ 1 .. 50 ] Default: 20 |
Patient Id (integer) or Patient Id (null) (Patient Id) When set, each row may include patient_photo_url for this patient's custom photos | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullBrowse catalog items for a category/subcategory without a text query.
Category Id (integer) or Category Id (null) (Category Id) Filter by category id | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) Filter by subcategory id | |
List Type (string) or List Type (null) (List Type) | |
Locale (string) or Locale (null) (Locale) BCP-47 locale | |
| limit | integer (Limit) [ 1 .. 500 ] Default: 60 |
Patient Id (integer) or Patient Id (null) (Patient Id) When set, each row may include patient_photo_url for this patient's custom photos | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| suggested_name required | string (Suggested Name) |
Suggested Category Id (integer) or Suggested Category Id (null) (Suggested Category Id) | |
Suggested Subcategory Id (integer) or Suggested Subcategory Id (null) (Suggested Subcategory Id) | |
| item_type | string (Item Type) Default: "product" |
Locale (string) or Locale (null) (Locale) | |
Icon Emoji (string) or Icon Emoji (null) (Icon Emoji) | |
| is_explicit | boolean (Is Explicit) Default: false |
{- "suggested_name": "string",
- "suggested_category_id": 0,
- "suggested_subcategory_id": 0,
- "item_type": "product",
- "locale": "string",
- "icon_emoji": "string",
- "is_explicit": false
}{ }Update a pending explicit custom product. Creators may edit their own; tenant admins may edit any.
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Suggested Name (string) or Suggested Name (null) (Suggested Name) | |
Suggested Category Id (integer) or Suggested Category Id (null) (Suggested Category Id) | |
Suggested Subcategory Id (integer) or Suggested Subcategory Id (null) (Suggested Subcategory Id) |
{- "suggested_name": "string",
- "suggested_category_id": 0,
- "suggested_subcategory_id": 0
}nullTenant administrators may remove their own pending explicit custom-product suggestion from the catalog (same effect as rejecting it in the admin queue).
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return the count of the current tenant's pending explicit custom-product suggestions and (for super-admins) the global pending count.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| list_type | string (List Type) Default: "general" |
| grouping_mode | string (Grouping Mode) Default: "by_category" |
{- "name": "string",
- "list_type": "general",
- "grouping_mode": "by_category"
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Grouping Mode (string) or Grouping Mode (null) (Grouping Mode) | |
Sort Order (integer) or Sort Order (null) (Sort Order) | |
Is Active (boolean) or Is Active (null) (Is Active) |
{- "name": "string",
- "grouping_mode": "string",
- "sort_order": 0,
- "is_active": true
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| status | string (Status) Default: "active" active|purchased|removed|all |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Catalog Item Id (integer) or Catalog Item Id (null) (Catalog Item Id) | |
Suggestion Id (integer) or Suggestion Id (null) (Suggestion Id) | |
| name required | string (Name) |
Category Id (integer) or Category Id (null) (Category Id) | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) | |
| item_type | string (Item Type) Default: "product" |
| quantity | number (Quantity) Default: 1 |
Unit (string) or Unit (null) (Unit) | |
Notes (string) or Notes (null) (Notes) | |
| priority | string (Priority) Default: "normal" |
Supplier Notes (string) or Supplier Notes (null) (Supplier Notes) | |
| is_recurring | boolean (Is Recurring) Default: false |
Recurrence Interval Days (integer) or Recurrence Interval Days (null) (Recurrence Interval Days) | |
Shift Id (integer) or Shift Id (null) (Shift Id) | |
Photo Url (string) or Photo Url (null) (Photo Url) |
{- "catalog_item_id": 0,
- "suggestion_id": 0,
- "name": "string",
- "category_id": 0,
- "subcategory_id": 0,
- "item_type": "product",
- "quantity": 1,
- "unit": "string",
- "notes": "string",
- "priority": "normal",
- "supplier_notes": "string",
- "is_recurring": false,
- "recurrence_interval_days": 0,
- "shift_id": 0,
- "photo_url": "string"
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Quantity (number) or Quantity (null) (Quantity) | |
Unit (string) or Unit (null) (Unit) | |
Notes (string) or Notes (null) (Notes) | |
Priority (string) or Priority (null) (Priority) | |
Supplier Notes (string) or Supplier Notes (null) (Supplier Notes) | |
Is Recurring (boolean) or Is Recurring (null) (Is Recurring) | |
Recurrence Interval Days (integer) or Recurrence Interval Days (null) (Recurrence Interval Days) | |
Category Id (integer) or Category Id (null) (Category Id) | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) |
{- "name": "string",
- "quantity": 0,
- "unit": "string",
- "notes": "string",
- "priority": "string",
- "supplier_notes": "string",
- "is_recurring": true,
- "recurrence_interval_days": 0,
- "category_id": 0,
- "subcategory_id": 0
}null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPOST variant of remove — matches the purchase/unpurchase pattern.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAttach or replace the branded product photo on a shopping list item.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| image required | string <binary> (Image) |
{ }Admin-only: remove the custom product photo and revert the item to its default icon.
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Serve the stored product photo (authenticated — not public static).
| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullServe the most recent custom product photo taken for a catalog item by this patient/tenant. Used to show user's own branded photo on catalog tiles.
| patient_id required | integer (Patient Id) |
| catalog_item_id required | integer (Catalog Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullServe the most recent custom product photo taken for a user-added suggestion item by this patient/tenant. Mirrors serve_catalog_item_photo but keyed by suggestion_id.
| patient_id required | integer (Patient Id) |
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| list_id required | integer (List Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| limit | integer (Limit) [ 1 .. 100 ] Default: 30 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Catalog Item Id (integer) or Catalog Item Id (null) (Catalog Item Id) | |
Suggestion Id (integer) or Suggestion Id (null) (Suggestion Id) | |
| mode required | string (Mode) |
{- "catalog_item_id": 0,
- "suggestion_id": 0,
- "mode": "string"
}nullServer-Sent Events stream for real-time shopping list updates.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullLocale (string) or Locale (null) (Locale) BCP-47 locale e.g. en-AU | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| q required | string (Q) >= 2 characters Search query (min 2 chars) |
Locale (string) or Locale (null) (Locale) BCP-47 locale | |
List Type (string) or List Type (null) (List Type) | |
| limit | integer (Limit) [ 1 .. 50 ] Default: 20 |
Patient Id (integer) or Patient Id (null) (Patient Id) When set, each row may include patient_photo_url for this patient's custom photos | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullBrowse catalog items for a category/subcategory without a text query.
Category Id (integer) or Category Id (null) (Category Id) Filter by category id | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) Filter by subcategory id | |
List Type (string) or List Type (null) (List Type) | |
Locale (string) or Locale (null) (Locale) BCP-47 locale | |
| limit | integer (Limit) [ 1 .. 500 ] Default: 60 |
Patient Id (integer) or Patient Id (null) (Patient Id) When set, each row may include patient_photo_url for this patient's custom photos | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| suggested_name required | string (Suggested Name) |
Suggested Category Id (integer) or Suggested Category Id (null) (Suggested Category Id) | |
Suggested Subcategory Id (integer) or Suggested Subcategory Id (null) (Suggested Subcategory Id) | |
| item_type | string (Item Type) Default: "product" |
Locale (string) or Locale (null) (Locale) | |
Icon Emoji (string) or Icon Emoji (null) (Icon Emoji) | |
| is_explicit | boolean (Is Explicit) Default: false |
{- "suggested_name": "string",
- "suggested_category_id": 0,
- "suggested_subcategory_id": 0,
- "item_type": "product",
- "locale": "string",
- "icon_emoji": "string",
- "is_explicit": false
}{ }Update a pending explicit custom product. Creators may edit their own; tenant admins may edit any.
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Suggested Name (string) or Suggested Name (null) (Suggested Name) | |
Suggested Category Id (integer) or Suggested Category Id (null) (Suggested Category Id) | |
Suggested Subcategory Id (integer) or Suggested Subcategory Id (null) (Suggested Subcategory Id) |
{- "suggested_name": "string",
- "suggested_category_id": 0,
- "suggested_subcategory_id": 0
}nullTenant administrators may remove their own pending explicit custom-product suggestion from the catalog (same effect as rejecting it in the admin queue).
| suggestion_id required | integer (Suggestion Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return the count of the current tenant's pending explicit custom-product suggestions and (for super-admins) the global pending count.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullList all active contacts for a patient, pinned first then by display_order.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| role_tag | string (Role Tag) Default: "other" |
Organisation (string) or Organisation (null) (Organisation) | |
Phone (string) or Phone (null) (Phone) | |
Email (string) or Email (null) (Email) | |
Address (string) or Address (null) (Address) | |
Notes (string) or Notes (null) (Notes) | |
| is_emergency | boolean (Is Emergency) Default: false |
| is_pinned | boolean (Is Pinned) Default: false |
| display_order | integer (Display Order) Default: 0 |
{- "name": "string",
- "role_tag": "other",
- "organisation": "string",
- "phone": "string",
- "email": "string",
- "address": "string",
- "notes": "string",
- "is_emergency": false,
- "is_pinned": false,
- "display_order": 0
}nullReturn up to 4 emergency contacts for the quick-dial dashboard widget.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Role Tag (string) or Role Tag (null) (Role Tag) | |
Organisation (string) or Organisation (null) (Organisation) | |
Phone (string) or Phone (null) (Phone) | |
Email (string) or Email (null) (Email) | |
Address (string) or Address (null) (Address) | |
Notes (string) or Notes (null) (Notes) | |
Is Emergency (boolean) or Is Emergency (null) (Is Emergency) | |
Is Pinned (boolean) or Is Pinned (null) (Is Pinned) | |
Display Order (integer) or Display Order (null) (Display Order) | |
Active (boolean) or Active (null) (Active) |
{- "name": "string",
- "role_tag": "string",
- "organisation": "string",
- "phone": "string",
- "email": "string",
- "address": "string",
- "notes": "string",
- "is_emergency": true,
- "is_pinned": true,
- "display_order": 0,
- "active": true
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| body required | string (Body) |
| direction | string (Direction) Default: "outgoing" |
| channel | string (Channel) Default: "phone" |
| priority | string (Priority) Default: "routine" |
Follow Up Date (string) or Follow Up Date (null) (Follow Up Date) |
{- "body": "string",
- "direction": "outgoing",
- "channel": "phone",
- "priority": "routine",
- "follow_up_date": "string"
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Body (string) or Body (null) (Body) | |
Direction (string) or Direction (null) (Direction) | |
Channel (string) or Channel (null) (Channel) | |
Priority (string) or Priority (null) (Priority) | |
Follow Up Date (string) or Follow Up Date (null) (Follow Up Date) |
{- "body": "string",
- "direction": "string",
- "channel": "string",
- "priority": "string",
- "follow_up_date": "string"
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| file required | string <binary> (File) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
| attach_id required | integer (Attach Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
| attach_id required | integer (Attach Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}List all active contacts for a patient, pinned first then by display_order.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| name required | string (Name) |
| role_tag | string (Role Tag) Default: "other" |
Organisation (string) or Organisation (null) (Organisation) | |
Phone (string) or Phone (null) (Phone) | |
Email (string) or Email (null) (Email) | |
Address (string) or Address (null) (Address) | |
Notes (string) or Notes (null) (Notes) | |
| is_emergency | boolean (Is Emergency) Default: false |
| is_pinned | boolean (Is Pinned) Default: false |
| display_order | integer (Display Order) Default: 0 |
{- "name": "string",
- "role_tag": "other",
- "organisation": "string",
- "phone": "string",
- "email": "string",
- "address": "string",
- "notes": "string",
- "is_emergency": false,
- "is_pinned": false,
- "display_order": 0
}nullReturn up to 4 emergency contacts for the quick-dial dashboard widget.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Role Tag (string) or Role Tag (null) (Role Tag) | |
Organisation (string) or Organisation (null) (Organisation) | |
Phone (string) or Phone (null) (Phone) | |
Email (string) or Email (null) (Email) | |
Address (string) or Address (null) (Address) | |
Notes (string) or Notes (null) (Notes) | |
Is Emergency (boolean) or Is Emergency (null) (Is Emergency) | |
Is Pinned (boolean) or Is Pinned (null) (Is Pinned) | |
Display Order (integer) or Display Order (null) (Display Order) | |
Active (boolean) or Active (null) (Active) |
{- "name": "string",
- "role_tag": "string",
- "organisation": "string",
- "phone": "string",
- "email": "string",
- "address": "string",
- "notes": "string",
- "is_emergency": true,
- "is_pinned": true,
- "display_order": 0,
- "active": true
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| body required | string (Body) |
| direction | string (Direction) Default: "outgoing" |
| channel | string (Channel) Default: "phone" |
| priority | string (Priority) Default: "routine" |
Follow Up Date (string) or Follow Up Date (null) (Follow Up Date) |
{- "body": "string",
- "direction": "outgoing",
- "channel": "phone",
- "priority": "routine",
- "follow_up_date": "string"
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Body (string) or Body (null) (Body) | |
Direction (string) or Direction (null) (Direction) | |
Channel (string) or Channel (null) (Channel) | |
Priority (string) or Priority (null) (Priority) | |
Follow Up Date (string) or Follow Up Date (null) (Follow Up Date) |
{- "body": "string",
- "direction": "string",
- "channel": "string",
- "priority": "string",
- "follow_up_date": "string"
}null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| file required | string <binary> (File) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
| attach_id required | integer (Attach Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
null| patient_id required | integer (Patient Id) |
| contact_id required | integer (Contact Id) |
| note_id required | integer (Note Id) |
| attach_id required | integer (Attach Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| status | string (Status) Default: "pending" pending|approved|rejected|merged |
| limit | integer (Limit) [ 1 .. 500 ] Default: 100 |
| offset | integer (Offset) >= 0 Default: 0 |
Ticket (string) or Ticket (null) (Ticket) |
null| suggestion_id required | integer (Suggestion Id) |
Ticket (string) or Ticket (null) (Ticket) |
| canonical_name required | string (Canonical Name) |
| category_id required | integer (Category Id) |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) | |
Default Unit (string) or Default Unit (null) (Default Unit) | |
Icon Emoji (string) or Icon Emoji (null) (Icon Emoji) | |
| aliases | Array of strings (Aliases) Default: [] |
{- "canonical_name": "string",
- "category_id": 0,
- "subcategory_id": 0,
- "default_unit": "string",
- "icon_emoji": "string",
- "aliases": [ ]
}null| suggestion_id required | integer (Suggestion Id) |
Ticket (string) or Ticket (null) (Ticket) |
Review Notes (string) or Review Notes (null) (Review Notes) |
{- "review_notes": "string"
}{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}| suggestion_id required | integer (Suggestion Id) |
Ticket (string) or Ticket (null) (Ticket) |
| target_catalog_item_id required | integer (Target Catalog Item Id) |
{- "target_catalog_item_id": 0
}{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Ticket (string) or Ticket (null) (Ticket) |
| category_id required | integer (Category Id) |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) | |
| name required | string (Name) |
| item_type | string (Item Type) Default: "product" |
Default Unit (string) or Default Unit (null) (Default Unit) | |
| default_quantity | number (Default Quantity) Default: 1 |
Icon Emoji (string) or Icon Emoji (null) (Icon Emoji) | |
| icon_type | string (Icon Type) Default: "emoji" |
Icon Value (string) or Icon Value (null) (Icon Value) | |
| aliases | Array of strings (Aliases) Default: [] |
{- "category_id": 0,
- "subcategory_id": 0,
- "name": "string",
- "item_type": "product",
- "default_unit": "string",
- "default_quantity": 1,
- "icon_emoji": "string",
- "icon_type": "emoji",
- "icon_value": "string",
- "aliases": [ ]
}null| item_id required | integer (Item Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Name (string) or Name (null) (Name) | |
Category Id (integer) or Category Id (null) (Category Id) | |
Subcategory Id (integer) or Subcategory Id (null) (Subcategory Id) | |
Default Unit (string) or Default Unit (null) (Default Unit) | |
Default Quantity (number) or Default Quantity (null) (Default Quantity) | |
Icon Emoji (string) or Icon Emoji (null) (Icon Emoji) | |
Icon Type (string) or Icon Type (null) (Icon Type) | |
Icon Value (string) or Icon Value (null) (Icon Value) | |
Active (boolean) or Active (null) (Active) |
{- "name": "string",
- "category_id": 0,
- "subcategory_id": 0,
- "default_unit": "string",
- "default_quantity": 0,
- "icon_emoji": "string",
- "icon_type": "string",
- "icon_value": "string",
- "active": true
}nullRecord the Google access_token for a pending PWA session.
Called by the login page in Safari after Google's OAuth redirect delivers the token. The PWA (still in the background) will pick up the token via the poll endpoint and exchange it for LynCareOS JWTs through the normal POST /api/auth/google/token path.
| session_id required | string (Session Id) |
| access_token required | string (Access Token) |
{- "access_token": "string"
}{ }Poll for the result of a PWA auth session.
Returns {"status": "pending"} while waiting, or
{"status": "complete", "access_token": "…"} once the Safari tab has
posted the token. The complete response is returned exactly once.
| session_id required | string (Session Id) |
{ }Create a Stripe Checkout session and return the hosted URL.
Left unauthenticated so the marketing site can call it before the tenant exists. Anti-abuse is via the 10/minute rate limit and Stripe's own payment-method challenges.
The tier_slug path is the one used by the marketing site — the
client posts e.g. {"tier_slug": "essential", "billing_email": ...}
and the router resolves the active Stripe price_id from
stripe_tiers. This means a price change (re-run of the seeder)
takes effect on the next checkout without any marketing-page
redeploy.
| price_ids | Array of strings (Price Ids) |
| tier_slug | string (Tier Slug) Default: "" |
| currency | string (Currency) Default: "" |
| billing_email required | string (Billing Email) |
| success_path | string (Success Path) Default: "/billing/success" |
| cancel_path | string (Cancel Path) Default: "/billing/cancel" |
{- "price_ids": [
- "string"
], - "tier_slug": "",
- "currency": "",
- "billing_email": "string",
- "success_path": "/billing/success",
- "cancel_path": "/billing/cancel"
}nullReceive and dispatch Stripe webhook events.
Must read the raw request body before JSON parsing so the Stripe-Signature HMAC stays intact. Idempotent via stripe_webhook_events — duplicate deliveries return 200 immediately without re-running handlers.
nullReturn a Stripe billing-portal URL for the active tenant.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCancel the active Stripe subscription and record the data-deletion choice.
For 'immediate': cancels in Stripe (no proration), marks the tenant as cancelled, then permanently purges all tenant data. The HTTP response is returned after the purge so the caller knows it succeeded.
For 'anniversary': sets cancel_at_period_end=True in Stripe (so the tenant retains access through the paid period), records the deletion choice, and schedules an APScheduler one-shot job to purge data on the next occurrence of the annual_anniversary_at date.
Either way the caller should log the user out and redirect to the home page because the tenant account is either gone or will be shortly.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| deletion_choice required | string (Deletion Choice) ^(immediate|anniversary)$ |
{- "deletion_choice": "string"
}{ }Start the marketing-page signup flow.
Validates that username and email are free, bcrypts the password,
stores a pending_signups row, and creates a Stripe Checkout session
carrying the pending row's token as client_reference_id.
Returns the hosted Stripe Checkout URL plus:
signup_token – opaque; the client echoes it back on
/complete-signup so we can pair the SPA call with the payment.nonce – same value, used client-side to derive the
AES-GCM key that encrypts the plaintext password into the
_lync_pw_blob cookie. We return it now (rather than later)
because the marketing page needs the nonce to encrypt the cookie
BEFORE the Stripe redirect; the /complete-signup endpoint
re-returns it only after Stripe confirms payment so the app-side
welcome modal can decrypt.| tier_slug required | string (Tier Slug) |
| username required | string (Username) |
| email required | string (Email) |
| password required | string (Password) |
| currency | string (Currency) Default: "" |
| success_path | string (Success Path) Default: "/billing/success" |
| cancel_path | string (Cancel Path) Default: "/billing/cancel" |
Care Start Bundle (string) or Care Start Bundle (null) (Care Start Bundle) | |
Care Start Pack Slug (string) or Care Start Pack Slug (null) (Care Start Pack Slug) | |
Archetype Slug (string) or Archetype Slug (null) (Archetype Slug) |
{- "tier_slug": "string",
- "username": "string",
- "email": "string",
- "password": "string",
- "currency": "",
- "success_path": "/billing/success",
- "cancel_path": "/billing/cancel",
- "care_start_bundle": "string",
- "care_start_pack_slug": "string",
- "archetype_slug": "string"
}nullStart the marketing-page signup flow using Google as the credential.
Mirrors /start-signup but takes a Google Identity Services credential instead of username/email/password. We:
sub and email from the verified payload.sub).google_sub set and
password_hash NULL.Returns {checkout_url, signup_token, nonce} for API parity with
/start-signup; the SPA uses the nonce purely as a webhook-wait token
and skips password-cookie decryption on the success page.
| tier_slug required | string (Tier Slug) |
| google_id_token required | string (Google Id Token) |
| currency | string (Currency) Default: "" |
| success_path | string (Success Path) Default: "/billing/success" |
| cancel_path | string (Cancel Path) Default: "/billing/cancel" |
Care Start Bundle (string) or Care Start Bundle (null) (Care Start Bundle) | |
Care Start Pack Slug (string) or Care Start Pack Slug (null) (Care Start Pack Slug) | |
Archetype Slug (string) or Archetype Slug (null) (Archetype Slug) |
{- "tier_slug": "string",
- "google_id_token": "string",
- "currency": "",
- "success_path": "/billing/success",
- "cancel_path": "/billing/cancel",
- "care_start_bundle": "string",
- "care_start_pack_slug": "string",
- "archetype_slug": "string"
}nullReturn a user-friendly payment outcome for a Stripe Checkout session.
Used by /billing/success and /billing/cancel to explain whether a charge was taken and what the subscriber should do next. Logs a structured outcome code server-side for operator review.
| session_id required | string (Session Id) >= 8 characters |
nullFinalise signup once Stripe has confirmed payment.
The SPA's /billing/success page calls this with the session_id it received in the Stripe success_url. We:
_lync_pw_blob cookie.| session_id required | string (Session Id) |
{- "session_id": "string"
}nullStart a Stripe Checkout session that upgrades the tenant's tier.
Charging model (per user choice): flat difference now + full new
annual term starting today (anniversary reset). Implemented by
applying a one-time amount_off coupon equal to the old tier's
price to the new tier's subscription, so the first invoice equals
(new − old) and the next renewal is the full new-tier price.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| new_tier_slug required | string (New Tier Slug) |
| success_path | string (Success Path) Default: "/billing/upgrade-success" |
| cancel_path | string (Cancel Path) Default: "/subscriptions" |
{- "new_tier_slug": "string",
- "success_path": "/billing/upgrade-success",
- "cancel_path": "/subscriptions"
}nullAuthenticated path for an existing user to open a new paid care account.
Ticket (string) or Ticket (null) (Ticket) |
| tier_slug required | string (Tier Slug) |
| tenant_name required | string (Tenant Name) |
| currency | string (Currency) Default: "" |
| success_path | string (Success Path) Default: "/billing/success" |
| cancel_path | string (Cancel Path) Default: "/billing/cancel" |
{- "tier_slug": "string",
- "tenant_name": "string",
- "currency": "",
- "success_path": "/billing/success",
- "cancel_path": "/billing/cancel"
}nullAfter additional-tenant Checkout, re-issue JWT with tid = new tenant.
Ticket (string) or Ticket (null) (Ticket) |
| session_id required | string (Session Id) |
{- "session_id": "string"
}nullAdd a single module subscription item to the tenant's Stripe subscription.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| module_slug required | string (Module Slug) |
| currency | string (Currency) Default: "USD" |
{- "module_slug": "string",
- "currency": "USD"
}nullRemove an a la carte module line item from the tenant subscription.
| module_slug required | string (Module Slug) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPublic tier catalog for the marketing page.
Shape: { "publishable_key": "pk_test_...", "currency": "usd", "tiers": [ { slug, name, description, usd, modules, stripe_price_id }, ... ] }
Tiers whose Stripe catalog has not been seeded yet will have
stripe_price_id: null — the client should disable checkout for
those rows but still display the USD number.
{ }Live validation endpoint used by the marketing-page signup modal.
Returns {username_ok, email_ok} where "ok" means "currently free".
Accepts either or both parameters; an empty / whitespace value is
reported as None so the UI can skip rendering a green tick
until the user has actually typed something.
| username | string (Username) <= 64 characters Default: "" |
string (Email) <= 254 characters Default: "" |
{ }Return the tenant's current tier plus the full upgrade matrix.
Shape: { "current_tier": { slug, name, usd, modules } | None, "all_tiers": [ { slug, name, usd, modules, description } ], "upgrades": [ { to_slug, to_name, diff_usd, adds_modules } ], "anniversary_at": "2027-04-18T12:34:56Z" | None }
The UI uses upgrades to render the "Upgrade to X" button next to
each locked module on the Subscriptions page. diff_usd is the
flat difference the user will pay — the same value the
/upgrade-tier endpoint will charge.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }Public tier catalog for the marketing page.
Shape: { "publishable_key": "pk_test_...", "currency": "usd", "tiers": [ { slug, name, description, usd, modules, stripe_price_id }, ... ] }
Tiers whose Stripe catalog has not been seeded yet will have
stripe_price_id: null — the client should disable checkout for
those rows but still display the USD number.
{ }Live validation endpoint used by the marketing-page signup modal.
Returns {username_ok, email_ok} where "ok" means "currently free".
Accepts either or both parameters; an empty / whitespace value is
reported as None so the UI can skip rendering a green tick
until the user has actually typed something.
| username | string (Username) <= 64 characters Default: "" |
string (Email) <= 254 characters Default: "" |
{ }Return the tenant's current tier plus the full upgrade matrix.
Shape: { "current_tier": { slug, name, usd, modules } | None, "all_tiers": [ { slug, name, usd, modules, description } ], "upgrades": [ { to_slug, to_name, diff_usd, adds_modules } ], "anniversary_at": "2027-04-18T12:34:56Z" | None }
The UI uses upgrades to render the "Upgrade to X" button next to
each locked module on the Subscriptions page. diff_usd is the
flat difference the user will pay — the same value the
/upgrade-tier endpoint will charge.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }Return export category labels for the admin export UI.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }Build and return a privacy-scoped ZIP for the active tenant.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| categories required | Array of strings (Categories) non-empty |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "categories": [
- "string"
], - "patient_id": 0
}nullReturn export category labels for the admin export UI.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{ }Build and return a privacy-scoped ZIP for the active tenant.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| categories required | Array of strings (Categories) non-empty |
Patient Id (integer) or Patient Id (null) (Patient Id) |
{- "categories": [
- "string"
], - "patient_id": 0
}nullAs Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| step_key required | string (Step Key) |
{- "step_key": "string"
}{- "property1": true,
- "property2": true
}Return care alerts visible to the caller.
REQ-MED-15: carer-facing surfaces pass the selected patient so one person's alerts (and their decrypted name) never appear while another is selected. Access to the requested patient is validated before any row is returned.
| status | string (Status) ^(open|resolved|dismissed)$ Default: "open" |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
| limit | integer (Limit) [ 1 .. 100 ] Default: 50 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn open alert count for the app icon badge.
REQ-MED-15: when a patient is selected the badge counts only that person's open alerts, matching the inbox. Without patient_id it stays account-wide (admin) or scoped to all accessible patients (member).
Patient Id (integer) or Patient Id (null) (Patient Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullResolve an open alert; records who resolved it in care_alert_events.
| alert_id required | integer (Alert Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Note (string) or Note (null) (Note) |
{- "note": "string"
}nullReturn the act/resolve history for one alert.
| alert_id required | integer (Alert Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn tenant-wide alert channel settings (admin only).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate tenant alert channel toggles (admin only).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Master Enabled (boolean) or Master Enabled (null) (Master Enabled) | |
Shift Reminder (boolean) or Shift Reminder (null) (Shift Reminder) | |
Shift Cancelled (boolean) or Shift Cancelled (null) (Shift Cancelled) | |
Calendar Events (boolean) or Calendar Events (null) (Calendar Events) | |
Handover Notes (boolean) or Handover Notes (null) (Handover Notes) | |
Shopping (boolean) or Shopping (null) (Shopping) | |
Family Help (boolean) or Family Help (null) (Family Help) | |
Module Purchase Requests (boolean) or Module Purchase Requests (null) (Module Purchase Requests) | |
Body Pain High (boolean) or Body Pain High (null) (Body Pain High) | |
Mind Elevated (boolean) or Mind Elevated (null) (Mind Elevated) | |
Overdue Dose (boolean) or Overdue Dose (null) (Overdue Dose) | |
First Dose Reaction (boolean) or First Dose Reaction (null) (First Dose Reaction) |
{- "master_enabled": true,
- "shift_reminder": true,
- "shift_cancelled": true,
- "calendar_events": true,
- "handover_notes": true,
- "shopping": true,
- "family_help": true,
- "module_purchase_requests": true,
- "body_pain_high": true,
- "mind_elevated": true,
- "overdue_dose": true,
- "first_dose_reaction": true
}nullReturn care alerts visible to the caller.
REQ-MED-15: carer-facing surfaces pass the selected patient so one person's alerts (and their decrypted name) never appear while another is selected. Access to the requested patient is validated before any row is returned.
| status | string (Status) ^(open|resolved|dismissed)$ Default: "open" |
Patient Id (integer) or Patient Id (null) (Patient Id) | |
| limit | integer (Limit) [ 1 .. 100 ] Default: 50 |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn open alert count for the app icon badge.
REQ-MED-15: when a patient is selected the badge counts only that person's open alerts, matching the inbox. Without patient_id it stays account-wide (admin) or scoped to all accessible patients (member).
Patient Id (integer) or Patient Id (null) (Patient Id) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullResolve an open alert; records who resolved it in care_alert_events.
| alert_id required | integer (Alert Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Note (string) or Note (null) (Note) |
{- "note": "string"
}nullReturn the act/resolve history for one alert.
| alert_id required | integer (Alert Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn tenant-wide alert channel settings (admin only).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate tenant alert channel toggles (admin only).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Master Enabled (boolean) or Master Enabled (null) (Master Enabled) | |
Shift Reminder (boolean) or Shift Reminder (null) (Shift Reminder) | |
Shift Cancelled (boolean) or Shift Cancelled (null) (Shift Cancelled) | |
Calendar Events (boolean) or Calendar Events (null) (Calendar Events) | |
Handover Notes (boolean) or Handover Notes (null) (Handover Notes) | |
Shopping (boolean) or Shopping (null) (Shopping) | |
Family Help (boolean) or Family Help (null) (Family Help) | |
Module Purchase Requests (boolean) or Module Purchase Requests (null) (Module Purchase Requests) | |
Body Pain High (boolean) or Body Pain High (null) (Body Pain High) | |
Mind Elevated (boolean) or Mind Elevated (null) (Mind Elevated) | |
Overdue Dose (boolean) or Overdue Dose (null) (Overdue Dose) | |
First Dose Reaction (boolean) or First Dose Reaction (null) (First Dose Reaction) |
{- "master_enabled": true,
- "shift_reminder": true,
- "shift_cancelled": true,
- "calendar_events": true,
- "handover_notes": true,
- "shopping": true,
- "family_help": true,
- "module_purchase_requests": true,
- "body_pain_high": true,
- "mind_elevated": true,
- "overdue_dose": true,
- "first_dose_reaction": true
}nullReturn all condition packs with has_access flag for this tenant.
Free starter packs are always included; paid packs show price and purchase CTA.
Display prices use the tenant's subscription billing currency.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the 7 care archetypes for the onboarding selector.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the full content preview of a pack (reason types, obs types, tasks).
Available to all authenticated users so they can evaluate before purchasing.
| pack_id required | integer (Pack Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a Stripe Checkout session for a one-time pack purchase.
Returns {checkout_url, amount_cents, currency} for Stripe Checkout redirect.
On payment success the Stripe webhook calls record_pack_purchase().
| pack_id required | integer (Pack Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Currency (string) or Currency (null) (Currency) |
{- "currency": "string"
}nullReturn all condition packs with has_access flag for this tenant.
Free starter packs are always included; paid packs show price and purchase CTA.
Display prices use the tenant's subscription billing currency.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the 7 care archetypes for the onboarding selector.
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn the full content preview of a pack (reason types, obs types, tasks).
Available to all authenticated users so they can evaluate before purchasing.
| pack_id required | integer (Pack Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCreate a Stripe Checkout session for a one-time pack purchase.
Returns {checkout_url, amount_cents, currency} for Stripe Checkout redirect.
On payment success the Stripe webhook calls record_pack_purchase().
| pack_id required | integer (Pack Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Currency (string) or Currency (null) (Currency) |
{- "currency": "string"
}nullApply an unlocked Care Profile to a patient (idempotent merge).
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Pack Id (integer) or Pack Id (null) (Pack Id) | |
Pack Slug (string) or Pack Slug (null) (Pack Slug) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "pack_id": 0,
- "pack_slug": "string",
- "archetype_id": 0
}nullReturn recommended Care Profile for an archetype (§3.2.1).
| patient_id required | integer (Patient Id) |
| archetype_id required | integer (Archetype Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate care archetype and/or apply a different unlocked profile (non-destructive).
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) | |
Pack Slug (string) or Pack Slug (null) (Pack Slug) |
{- "archetype_id": 0,
- "pack_slug": "string"
}nullApply an unlocked Care Profile to a patient (idempotent merge).
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Pack Id (integer) or Pack Id (null) (Pack Id) | |
Pack Slug (string) or Pack Slug (null) (Pack Slug) | |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) |
{- "pack_id": 0,
- "pack_slug": "string",
- "archetype_id": 0
}nullReturn recommended Care Profile for an archetype (§3.2.1).
| patient_id required | integer (Patient Id) |
| archetype_id required | integer (Archetype Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullUpdate care archetype and/or apply a different unlocked profile (non-destructive).
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
Archetype Id (integer) or Archetype Id (null) (Archetype Id) | |
Pack Slug (string) or Pack Slug (null) (Pack Slug) |
{- "archetype_id": 0,
- "pack_slug": "string"
}nullReturn observation types applicable to this patient.
Currently returns all system types; future versions will filter by active packs.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn observations for a patient.
Supports filtering by observation type slug and date range (YYYY-MM-DD). Multiple readings per day are intentional — trend charts use all of them.
| patient_id required | integer (Patient Id) |
Obs Type Slug (string) or Obs Type Slug (null) (Obs Type Slug) | |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a single patient observation.
Multiple calls in the same day are fine — each creates a new timestamped row so the trend graph can show intra-day variability.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| observation_type_id required | integer (Observation Type Id) |
Value Number (number) or Value Number (null) (Value Number) | |
Value Text (string) or Value Text (null) (Value Text) | |
Value Boolean (boolean) or Value Boolean (null) (Value Boolean) | |
Notes (string) or Notes (null) (Notes) | |
Obs Date (string) or Obs Date (null) (Obs Date) | |
Obs Time (string) or Obs Time (null) (Obs Time) |
{- "observation_type_id": 0,
- "value_number": 0,
- "value_text": "string",
- "value_boolean": true,
- "notes": "string",
- "obs_date": "string",
- "obs_time": "string"
}nullReturn Bollinger-band trend data for one observation type.
window: 'today' | 'week' | 'month' | 'three_months'
Each data point in series includes rolling_mean, upper_band,
lower_band computed over the patient's personal baseline.
| patient_id required | integer (Patient Id) |
| obs_type_id required | integer (Obs Type Id) |
| window | string (Window) ^(today|week|month|three_months)$ Default: "week" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSoft-delete an observation entry (admin or original recorder only).
| patient_id required | integer (Patient Id) |
| obs_id required | integer (Obs Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return observation types applicable to this patient.
Currently returns all system types; future versions will filter by active packs.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn observations for a patient.
Supports filtering by observation type slug and date range (YYYY-MM-DD). Multiple readings per day are intentional — trend charts use all of them.
| patient_id required | integer (Patient Id) |
Obs Type Slug (string) or Obs Type Slug (null) (Obs Type Slug) | |
Date From (string) or Date From (null) (Date From) | |
Date To (string) or Date To (null) (Date To) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullRecord a single patient observation.
Multiple calls in the same day are fine — each creates a new timestamped row so the trend graph can show intra-day variability.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| observation_type_id required | integer (Observation Type Id) |
Value Number (number) or Value Number (null) (Value Number) | |
Value Text (string) or Value Text (null) (Value Text) | |
Value Boolean (boolean) or Value Boolean (null) (Value Boolean) | |
Notes (string) or Notes (null) (Notes) | |
Obs Date (string) or Obs Date (null) (Obs Date) | |
Obs Time (string) or Obs Time (null) (Obs Time) |
{- "observation_type_id": 0,
- "value_number": 0,
- "value_text": "string",
- "value_boolean": true,
- "notes": "string",
- "obs_date": "string",
- "obs_time": "string"
}nullReturn Bollinger-band trend data for one observation type.
window: 'today' | 'week' | 'month' | 'three_months'
Each data point in series includes rolling_mean, upper_band,
lower_band computed over the patient's personal baseline.
| patient_id required | integer (Patient Id) |
| obs_type_id required | integer (Obs Type Id) |
| window | string (Window) ^(today|week|month|three_months)$ Default: "week" |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullSoft-delete an observation entry (admin or original recorder only).
| patient_id required | integer (Patient Id) |
| obs_id required | integer (Obs Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return the full list of help request types for the icon-grid picker.
Tenant-scoped catalogue only — no patient_id in the path, so we must not use require_carer_role (that dependency resolves patient_id from the query string).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn help requests for a patient, optionally filtered by status tab.
| patient_id required | integer (Patient Id) |
Status (string) or Status (null) (Status) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPost a new help request to the family help board.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| request_type_id required | integer (Request Type Id) |
| title required | string (Title) |
Notes (string) or Notes (null) (Notes) | |
Needed At (string) or Needed At (null) (Needed At) |
{- "request_type_id": 0,
- "title": "string",
- "notes": "string",
- "needed_at": "string"
}nullVolunteer to fulfil an open help request ('I'll do this').
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullMark a taken help request as completed.
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCancel a help request — only the original requester can cancel.
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Return the full list of help request types for the icon-grid picker.
Tenant-scoped catalogue only — no patient_id in the path, so we must not use require_carer_role (that dependency resolves patient_id from the query string).
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullReturn help requests for a patient, optionally filtered by status tab.
| patient_id required | integer (Patient Id) |
Status (string) or Status (null) (Status) | |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullPost a new help request to the family help board.
| patient_id required | integer (Patient Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
| request_type_id required | integer (Request Type Id) |
| title required | string (Title) |
Notes (string) or Notes (null) (Notes) | |
Needed At (string) or Needed At (null) (Needed At) |
{- "request_type_id": 0,
- "title": "string",
- "notes": "string",
- "needed_at": "string"
}nullVolunteer to fulfil an open help request ('I'll do this').
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullMark a taken help request as completed.
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
nullCancel a help request — only the original requester can cancel.
| patient_id required | integer (Patient Id) |
| request_id required | integer (Request Id) |
As Tenant (integer) or As Tenant (null) (As Tenant) | |
Ticket (string) or Ticket (null) (Ticket) |
X-Tenant-Id (string) or X-Tenant-Id (null) (X-Tenant-Id) |
{- "detail": [
- {
- "loc": [
- "string"
], - "msg": "string",
- "type": "string"
}
]
}Create a fresh test user + tenant for E2E Playwright tests.
Only available outside production. The created account has the tier's modules active and optional pre-seeded medicines/patients, so tests can jump straight to the limit-boundary condition without clicking through the full data-entry flow.
| username required | string (Username) |
| email required | string (Email) |
| password | string (Password) Default: "TestE2EPass99!" |
| tier_slug | string (Tier Slug) Default: "essential" |
| seed_medicines | integer (Seed Medicines) Default: 0 |
| seed_patients | integer (Seed Patients) Default: 0 |
{- "username": "string",
- "email": "string",
- "password": "TestE2EPass99!",
- "tier_slug": "essential",
- "seed_medicines": 0,
- "seed_patients": 0
}{- "user_id": 0,
- "tenant_id": 0,
- "username": "string",
- "email": "string",
- "password": "string",
- "access_token": "string",
- "tier_slug": "string",
- "modules": [
- "string"
]
}Hard-delete a previously provisioned E2E test user and all tenant data.
Only safe to call against throwaway test accounts (username must start
with e2e_ to prevent accidental deletion of real users).
| username required | string (Username) |
{- "username": "string"
}{ }