StandaloneAPI referenceSettings

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

MethodPath
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.
  • resolvedAt may 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

NameTypeRequiredDescription
idstringYesThe Signals patient id.

Body

Required. Schema WriteStampedSettingsDto.

FieldTypeRequiredDescription
resolvedAtstringNo—
settingsobjectYes—

Responses

StatusMeaning
200The settings as stored.
400A 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.
401Your ovok access token, or your client id and secret, are missing or invalid.
403ovok 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.
404A patient the call names is not one you can read. From Signals: No such patient in this tenant.
409Your 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.
415The body is not JSON.
422resolvedAt 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.
429Too many requests. Retry after the seconds in Retry-After.
500ovok hit an unexpected fault, such as your project having no Signals submitter.
502Signals answered with something ovok couldn't use, or refused ovok's own credential.
503Signals is unavailable. Retry after the seconds in Retry-After.
504Signals 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.json

Last updated on

On this page