Replace a patient's own rule settings
Replace a patient's own rule settings, through Ovok's Signals gateway.
Replace a patient's own rule settings
| Method | Path |
|---|---|
PUT | /v1/signals/api/patient/{id}/settings |
- Sandbox: available
- Staging: available
- Production: unknown
Replaced whole. The triggers read them beside the org's, as settings.individual. Audited as UPDATE_PATIENT_SETTINGS.
A body whose settings has no triggers key keeps the stored triggers (the home defaults seeded by Signals, or triggers pushed through the config routes); a body that sends triggers, {} included, replaces them.
The body may carry resolvedAt (ISO 8601), when the caller resolved this write: it lands only over a stored write resolved earlier, or stored without one, and is otherwise refused 409 STALE_SETTINGS with nothing written or audited. A write without resolvedAt always lands and keeps the stored stamp.
Signals stores settings as given and reads it only through the triggers it holds (triggers, the home's and the resident's own): what each other key means is theirs, so the object is checked for shape and size only. The default pack reads bands — per code { low?, high? }, { mode: 'baseline', pct, low?, high? } (outside either band fires; a patient's own baseline band with no sides of its own is judged alone) or "NO_THRESHOLD" — and outOfBed: { limitSeconds, enabled?, returnSeconds?, window?: { start: 'HH:MM', end: 'HH:MM', timeZone } }. A patient's own key wins over the org's; extra keys are ignored. See tech/RULES-ENGINE.md.
Through ovok
- Who can call it: Manager apps, and users whose access policy grants the capabilities.
- Capabilities, all required:
signals_config:update,signals_silence:update. Project admins have every capability; client applications get no admin bypass. resolvedAtmay be at most 5 minutes ahead of now.- If your access covers only some patients (anyone but project admins, manager or submitter apps, and anyone whose Patient access has no criteria), the patient must be one you can update. A patient is named by its Signals id, or by its Medplum Patient id where Signals takes a
refId; ovok asks Signals which patient a Signals id is.
Request
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The Signals patient id. |
Body
Required. Schema WriteStampedSettingsDto.
| Field | Type | Required | Description |
|---|---|---|---|
resolvedAt | string | No | — |
settings | object | Yes | — |
Responses
| Status | Meaning |
|---|---|
200 | The settings as stored. |
400 | A path value holds a character ovok does not send to Signals, such as a raw : or +. Percent-encode it. The query carries a raw #, or more than 200 parameters. |
401 | Your ovok access token, or your client id and secret, are missing or invalid. |
403 | ovok refused the call: you lack a capability this route needs, or your session has no project, or you can read a patient the call names but not update it. From Signals: Authenticated, but the client's role does not permit this, or it is not attached to the patient. |
404 | A patient the call names is not one you can read. From Signals: No such patient in this tenant. |
409 | Your project has no Signals tenant of its own (SIGNALS_TENANT_NOT_OWN), or it is moving to another one. From Signals: A write resolved no later than the stored one (STALE_SETTINGS); nothing was written. |
415 | The body is not JSON. |
422 | resolvedAt is more than 5 minutes ahead of now. A patient id is not 1 to 64 letters, digits, ., _, ~ or -. From Signals: settings is missing, is not a plain object or is over 64 KiB, or resolvedAt is invalid. |
429 | Too many requests. Retry after the seconds in Retry-After. |
500 | ovok hit an unexpected fault, such as your project having no Signals submitter. |
502 | Signals answered with something ovok couldn't use, or refused ovok's own credential. |
503 | Signals is unavailable. Retry after the seconds in Retry-After. |
504 | Signals did not answer in time. |
Example
curl --request PUT 'https://api.sandbox.ovok.com/v1/signals/api/patient/:id/settings' \
--user "${OVOK_CLIENT_ID}:${OVOK_CLIENT_SECRET}" \
--header 'Content-Type: application/json' \
--data @body.jsonLast updated on