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.
| Operation | Endpoint |
|---|---|
| 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)
/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
| Field | Type | Required | Description |
|---|---|---|---|
readings | LegacyObservationByRefDto[] | yes |
Responses
| Status | Meaning |
|---|---|
201 | Readings accepted, in v1's response shape. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
accepted | number | yes | How many readings were queued for evaluation. |
POST /compat/observation/{patientId} (deprecated)
/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
| Name | In | Required | Description |
|---|---|---|---|
patientId | path | yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
refId | string | no | |
status | string | no | |
note | object | no | Accepted 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. |
code | LegacyCodeableConceptDto | yes | |
valueQuantity | LegacyQuantityDto | no | |
valueString | string | no | |
valueInteger | number | no | |
valueBoolean | boolean | no | |
valueDateTime | string | no | |
component | LegacyComponentDto[] | no | |
device | object | no | Only device.id is read, as in v1. |
dataAbsentReason | string | no | |
observedAt | string | no | |
effectivePeriod | object | no | Only .start and .end are read, as in v1. |
Responses
| Status | Meaning |
|---|---|
201 | Reading accepted. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
404 | No such patient in this tenant. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
observationIds | string[] | yes | |
alertIds | string[] | no |
POST /compat/patient (deprecated)
/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
| Field | Type | Required | Description |
|---|---|---|---|
patients | LegacyCreatePatientEntry[] | yes |
Responses
| Status | Meaning |
|---|---|
201 | The patients as stored. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
An array of:
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | |
refId | string | yes | |
name | string | yes |
POST /compat/patient/config (deprecated)
/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
| Field | Type | Required | Description |
|---|---|---|---|
resolvedAt | string | no | ISO-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. |
triggers | LegacyConfigTriggerSchema[] | no | |
ids | string[] | yes | |
metadata | object | no | Stamped onto the Patient rows named by ids, merged not replaced. |
alertIfEmpty | boolean | no | |
alertIfNote | boolean | no | |
alertInactiveDays | number | no |
Responses
| Status | Meaning |
|---|---|
201 | Match and modify counts, plus any ids that missed. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
ids | string[] | yes | The ids the request named, echoed back. |
status | LegacyConfigResultSchema | yes |
GET /compat/patient/{id} (deprecated)
/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
| Name | In | Required | Description |
|---|---|---|---|
id | path | yes |
Responses
| Status | Meaning |
|---|---|
200 | The patient in v1's shape. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
404 | No such patient in this tenant. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | |
refId | string | yes | |
name | string | yes |
POST /compat/submitter/{submitterId}/patients (deprecated)
/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
| Name | In | Required | Description |
|---|---|---|---|
submitterId | path | yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
patients | string[] | yes |
Responses
| Status | Meaning |
|---|---|
201 | Attachment recorded. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
associated | number | yes | How many patients are now attached to the client. |
POST /compat/subscriber/{subscriberId}/patients (deprecated)
/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
| Name | In | Required | Description |
|---|---|---|---|
subscriberId | path | yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
patients | string[] | yes |
Responses
| Status | Meaning |
|---|---|
201 | Attachment recorded. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
associated | number | yes | How many patients are now attached to the client. |
GET /compat/alert (deprecated)
/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
| Name | In | Required | Description |
|---|---|---|---|
patientId | query | no | |
algorithmId | query | no | Only alerts raised from this certified algorithm, by identifier. Additive: omitting it returns exactly what this route returned before certified scoring existed. |
limit | query | no | Page size. Defaults to 50, capped at 200. |
cursor | query | no | A raw alert id, not the base64url keyset cursor GET /api/alert uses. The two cursors cannot be mixed. |
Responses
| Status | Meaning |
|---|---|
200 | A page of alerts in v1's envelope. |
401 | Missing, malformed or unrecognised Basic credentials. |
403 | Authenticated, but the client's role does not permit this. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
items | AlertSchema[] | yes | |
nextCursor | string | null | yes | A raw alert id, NOT the base64url keyset cursor the modern routes issue. |
Updated about 5 hours ago