Schemas

Every response and request body shape.

Every response and request body shape referenced by the API.

AlertSchema

FieldTypeRequiredDescription
idstringyes
tenantIdstringyes
patientIdstringyes
observationIdstring | nullyes
reasonstringyesWhy the alert exists. TRIGGER is a threshold breach; EMPTY is a reading that carried no value; NOTE is a clinician note; INACTIVE is a patient who stopped reporting. One of: TRIGGER, EMPTY, NOTE, INACTIVE.
statusstringyesOne of: ACTIVE, RESOLVED.
codestring | nullyesExample: "8867-4".
dedupKeystring | nullyesWhat this alert deduplicates against while it stays open. Repeated breaches of the same trigger refresh one alert rather than opening more. Example: "TRIGGER:8867-4".
messagestring | nullyesSupplied by the rule when it returns one. ECH rules return a JSON document here describing which bound was crossed.
valueNumbernumber | nullyes
valueStringstring | nullyesThe rule's own payload; carries the level and colour the UI paints.
triggerCodestring | nullyes
triggerVersionnumber | nullyes
algorithmIdstring | nullyesWhich certified algorithm produced the value behind this alert, or null when an ordinary threshold raised it. This is what tells the two apart in a list that mixes them.
algorithmVersionstring | nullyes
algorithmIntegritystring | nullyesDigest of the scoring tables that judged the patient. Kept downstream, it answers which version of an algorithm raised this alert even after that version is retired.
createdAtdate-timeyesExample: "2026-08-27T09:15:00.000Z".
resolvedAtdate-time | nullyesExample: "2026-08-27T09:15:00.000Z".

AlgorithmBindingSchema

FieldTypeRequiredDescription
idstringyesAlgorithm identifier. Example: "news2".
versionstringyesExact version. There is no floating channel for certified algorithms. Example: "1.0.0".
outputstringnoWhich declared output the rule thresholds. Defaults to the algorithm's primary. Example: "score".

LegacyAlertPageSchema

FieldTypeRequiredDescription
itemsAlertSchema[]yes
nextCursorstring | nullyesA raw alert id, NOT the base64url keyset cursor the modern routes issue.

LegacyAssociateDto

FieldTypeRequiredDescription
patientsstring[]yes

LegacyAssociateResultSchema

FieldTypeRequiredDescription
associatednumberyesHow many patients are now attached to the client.

LegacyBatchAcceptedSchema

FieldTypeRequiredDescription
acceptednumberyesHow many readings were queued for evaluation.

LegacyBatchObservationDto

FieldTypeRequiredDescription
readingsLegacyObservationByRefDto[]yes

LegacyCodeableConceptDto

FieldTypeRequiredDescription
codingLegacyCodingDto[]yes
textstringno

LegacyCodingDto

FieldTypeRequiredDescription
systemstringno
codestringyes
displaystringno

LegacyComponentDto

FieldTypeRequiredDescription
codeLegacyCodeableConceptDtoyes
valueQuantityLegacyQuantityDtono
valueStringstringno
valueIntegernumberno
valueBooleanbooleanno

LegacyConfigDto

FieldTypeRequiredDescription
resolvedAtstringnoISO-8601 instant at which this configuration was COMPUTED (not sent). A push carrying one is ignored if the patient already has a configuration resolved strictly later. Optional: a push without it is applied unconditionally, exactly as before.
triggersLegacyConfigTriggerSchema[]no
idsstring[]yes
metadataobjectnoStamped onto the Patient rows named by ids, merged not replaced.
alertIfEmptybooleanno
alertIfNotebooleanno
alertInactiveDaysnumberno

LegacyConfigEnvelopeSchema

FieldTypeRequiredDescription
idsstring[]yesThe ids the request named, echoed back.
statusLegacyConfigResultSchemayes

LegacyConfigResultSchema

FieldTypeRequiredDescription
acknowledgedbooleanyes
matchedCountnumberyes
modifiedCountnumberyesPatients where the push actually wrote something, counted from real row counts rather than from the shape of the request. A push whose only effect was deleting an already-absent trigger does not count.
triggerWritesunknownyesThe row counts behind modifiedCount, summed across every patient named.
staleIgnoredCountnumberyesPatients whose push was refused because it carried a resolvedAt older than the configuration already applied. Nothing was written for them. This is not a failure: it is the expected outcome for a resident who was individually saved while an org-wide fan-out was in flight.
missesstring[]yesIds that matched no patient. Reported rather than failing the batch.

LegacyConfigTriggerSchema

FieldTypeRequiredDescription
codestringyesLOINC code. Unique per patient. Example: "8867-4".
systemstringnoExample: "http://loinc.org".
displaystringno
valueKeystringnoKey the rule reads the reading under. Example: "value".
constantsobjectnoNamed values the rule compares against, e.g. { "low": 50, "high": 110 }.
logicobjectnojson-logic. May return a boolean, a string used as the message, or an object {alert, value, message} — the shape the ECH rules use. Optional only when algorithm is set, where a binding without a rule records the score and never alerts.
algorithmunknownnoBinds this trigger to a certified algorithm, so logic thresholds that algorithm's output rather than a reading. Scores are produced only through the algorithm ingest route; binding one changes nothing about what the ordinary route returns.
inputsobjectnoAlgorithm input name to the observation code that supplies it, e.g. { "resp": "9279-1" }. Required when algorithm is set; names are checked against that version's declared inputs and unknown ones are rejected.
maxInputAgeSecnumbernoHow old a stored reading may be and still count toward the score, in seconds. Defaults to the algorithm's own window; may be tightened but not widened past its ceiling.
deletebooleannoRemove this trigger instead of writing it. The patient stops being alerted on the code.
metadataobjectnoFree-form routing labels, MERGED into whatever is already there and left untouched when absent — so a push that omits them cannot un-route a trigger. Signals does not interpret the keys. A caller managing thresholds at two levels records which level owns each trigger here, so a group-wide write matches one label and cannot clobber a per-patient exception.

LegacyCreatePatientEntry

FieldTypeRequiredDescription
configobjectnoInitial trigger config, applied in the same call. triggers takes the same shape as LegacyConfigTriggerSchema, including its metadata stamp.
idstringno
namestringno
refIdstringyes
submittersstring[]no
subscribersstring[]no
metadataobjectno

LegacyCreatePatientsDto

FieldTypeRequiredDescription
patientsLegacyCreatePatientEntry[]yes

LegacyIngestSchema

FieldTypeRequiredDescription
observationIdsstring[]yes
alertIdsstring[]no

LegacyObservationByRefDto

FieldTypeRequiredDescription
patientRefIdstringyes
refIdstringno
statusstringno
noteobjectnoAccepted as a plain string or as ovok's [{text,time}] array, which the mapper flattens to newline-joined text. Deliberately untyped: typing it as a string would reject real readings ovok sends today.
codeLegacyCodeableConceptDtoyes
valueQuantityLegacyQuantityDtono
valueStringstringno
valueIntegernumberno
valueBooleanbooleanno
valueDateTimestringno
componentLegacyComponentDto[]no
deviceobjectnoOnly device.id is read, as in v1.
dataAbsentReasonstringno
observedAtstringno
effectivePeriodobjectnoOnly .start and .end are read, as in v1.

LegacyObservationDto

FieldTypeRequiredDescription
refIdstringno
statusstringno
noteobjectnoAccepted as a plain string or as ovok's [{text,time}] array, which the mapper flattens to newline-joined text. Deliberately untyped: typing it as a string would reject real readings ovok sends today.
codeLegacyCodeableConceptDtoyes
valueQuantityLegacyQuantityDtono
valueStringstringno
valueIntegernumberno
valueBooleanbooleanno
valueDateTimestringno
componentLegacyComponentDto[]no
deviceobjectnoOnly device.id is read, as in v1.
dataAbsentReasonstringno
observedAtstringno
effectivePeriodobjectnoOnly .start and .end are read, as in v1.

LegacyPatientSchema

FieldTypeRequiredDescription
idstringyes
refIdstringyes
namestringyes

LegacyQuantityDto

FieldTypeRequiredDescription
valuenumberno
unitstringno
systemstringno
codestringno

LegacyTriggerWriteCountsSchema

FieldTypeRequiredDescription
insertednumberyesTriggers created.
updatednumberyesExisting triggers rewritten.
deletednumberyesTriggers removed.
deletedMissingnumberyesDeletes for a code the patient carried no trigger for. These changed nothing and are NOT counted as a modification.

Did this page help you?