Compat (v1)

The v1 wire: registering a patient, configuring its triggers, submitting readings, attaching a submitter or subscriber, and reading the alerts that resulted. Kept byte-identical to what the existing clients already call.

OperationEndpoint
Submit readings in bulk (v1)POST /compat/observation/batch
Submit a reading for a patient id (v1)POST /compat/observation/{patientId}
Upsert patients (v1)POST /compat/patient
Write trigger config for patients (v1)POST /compat/patient/config
Get a patient (v1)GET /compat/patient/{id}
Attach patients to a submitter (v1)POST /compat/submitter/{submitterId}/patients
Attach patients to a subscriber (v1)POST /compat/subscriber/{subscriberId}/patients
List alerts (v1)GET /compat/alert

POST /compat/observation/batch (deprecated)

Submit readings in bulk (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. Accepts v1's payload shape and maps it onto the modern ingest path.

Requires Basic authentication.

Request body

FieldTypeRequiredDescription
readingsLegacyObservationByRefDto[]yes

Responses

StatusMeaning
201Readings accepted, in v1's response shape.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

FieldTypeRequiredDescription
acceptednumberyesHow many readings were queued for evaluation.

POST /compat/observation/{patientId} (deprecated)

Submit a reading for a patient id (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it.

Requires Basic authentication.

Parameters

NameInRequiredDescription
patientIdpathyes

Request body

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.

Responses

StatusMeaning
201Reading accepted.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.
404No such patient in this tenant.

Response body

FieldTypeRequiredDescription
observationIdsstring[]yes
alertIdsstring[]no

POST /compat/patient (deprecated)

Upsert patients (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. Idempotent on refId, so a replayed provisioning run is a hit rather than a duplicate. Accepts metadata for the project stamp.

Requires Basic authentication.

Request body

FieldTypeRequiredDescription
patientsLegacyCreatePatientEntry[]yes

Responses

StatusMeaning
201The patients as stored.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

An array of:

FieldTypeRequiredDescription
idstringyes
refIdstringyes
namestringyes

POST /compat/patient/config (deprecated)

Write trigger config for patients (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. The path ovok uses to push thresholds.

Unknown ids are reported in misses[] rather than failing the batch. Trigger metadata is MERGED and left untouched when absent — a push that omits it does not clear the project stamp.

Send resolvedAt (the instant the configuration was COMPUTED, not sent) to have this push refused rather than applied when the patient already carries a configuration resolved strictly later. Refusal is a silent no-op reported as staleIgnoredCount, never an error. Omitting it applies the push unconditionally, exactly as before.

Requires Basic authentication.

Request body

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

Responses

StatusMeaning
201Match and modify counts, plus any ids that missed.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

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

GET /compat/patient/{id} (deprecated)

Get a patient (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. Accepts either the Signals id or the refId.

Requires Basic authentication.

Parameters

NameInRequiredDescription
idpathyes

Responses

StatusMeaning
200The patient in v1's shape.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.
404No such patient in this tenant.

Response body

FieldTypeRequiredDescription
idstringyes
refIdstringyes
namestringyes

POST /compat/submitter/{submitterId}/patients (deprecated)

Attach patients to a submitter (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. Grants the client permission to post readings for those patients.

Requires Basic authentication.

Parameters

NameInRequiredDescription
submitterIdpathyes

Request body

FieldTypeRequiredDescription
patientsstring[]yes

Responses

StatusMeaning
201Attachment recorded.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

FieldTypeRequiredDescription
associatednumberyesHow many patients are now attached to the client.

POST /compat/subscriber/{subscriberId}/patients (deprecated)

Attach patients to a subscriber (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it. Grants the client permission to read those patients' records and receive their alert webhooks.

Requires Basic authentication.

Parameters

NameInRequiredDescription
subscriberIdpathyes

Request body

FieldTypeRequiredDescription
patientsstring[]yes

Responses

StatusMeaning
201Attachment recorded.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

FieldTypeRequiredDescription
associatednumberyesHow many patients are now attached to the client.

GET /compat/alert (deprecated)

List alerts (v1)

Part of the v1 wire, kept byte-identical for the existing client. Do not build new integrations against it.

Its cursor is a raw alert id and nextCursor echoes another one — deliberately NOT the base64url keyset cursor GET /api/alert uses. The two cannot be mixed.

No project predicate: operations and debugging only, never a per-facility view.

Requires Basic authentication.

Parameters

NameInRequiredDescription
patientIdqueryno
algorithmIdquerynoOnly alerts raised from this certified algorithm, by identifier. Additive: omitting it returns exactly what this route returned before certified scoring existed.
limitquerynoPage size. Defaults to 50, capped at 200.
cursorquerynoA raw alert id, not the base64url keyset cursor GET /api/alert uses. The two cursors cannot be mixed.

Responses

StatusMeaning
200A page of alerts in v1's envelope.
401Missing, malformed or unrecognised Basic credentials.
403Authenticated, but the client's role does not permit this.

Response body

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

Did this page help you?