Layman manual
cgm.pdhc is the CGM (continuous glucose monitor) provider portal for the
PDHC platform — the "provider side" for glucose-monitoring devices (Abbott
FreeStyle and similar). When the platform needs a patient's glucose monitored
over a period, it sends this service an order; the provider acknowledges it,
collects glucose readings across the monitoring window, and streams them back
into the platform.
Live at https://cgm.pdhc.se. It has two faces: a web portal for human
operators, and a REST API for device/system integration.
request.pdhc ──(monitoring order)──► cgm.pdhc ──(glucose readings, in batches)──► gateway.pdhc ──► platform dashboards
request.pdhc pushes a monitoring order — a patientgateway.pdhc, which validates, enriches,Each deployment is one provider (its identity is fixed in configuration).
This instance ships with a glucose simulator. The moment you acknowledge
an order, it automatically starts generating one realistic reading per
minute (a gentle random walk around 5.5 mmol/L, clamped to a safe range) and
submitting it, until you complete monitoring. So readings flow without a
real device — handy for demos and testing. An operator can also push real
readings via the API instead.
Log in at https://cgm.pdhc.se/login (username + key; the first admin is
bootstrapped at deploy). The portal gives you:
/) — tasks by state (dispatched / monitoring / completed),/tasks) — incoming monitoring orders; open one to see its auditTask lifecycle: dispatched → acknowledged → monitoring → completed.
All API calls use the X-API-Key header (keys are scoped read / write).
Base path /api/v1. The essentials:
| Do this | Call |
|---|---|
| Check health (no auth) | GET /api/v1/health → {status, database, service} |
| List my tasks | GET /api/v1/provider-tasks/my |
| Acknowledge / start monitoring | POST /api/v1/provider-tasks/<token>/accept |
| Submit a batch of readings | POST /api/v1/provider-tasks/<token>/observe |
| End monitoring | POST /api/v1/provider-tasks/<token>/observe/complete |
| Stream status / batch log | GET …/observe/status, GET …/observe/log |
A reading batch looks like this — send transaction_guid, value,
recorded_at; do not send the concept or unit, the gateway derives those
from the care plan:
POST /api/v1/provider-tasks/<token>/observe
X-API-Key: <write-key>
{ "observations": [
{ "transaction_guid": "tx-glucose-001", "value": 5.6,
"recorded_at": "2026-04-01T08:00:00Z" } ] }
Manage keys with POST /api/v1/api-keys (and /revoke, /rotate). A new
key's raw value is shown once — store it securely.
X-API-Key (create/rotate/revoke via the API).transaction_guid linking each one to the careGET /api/v1/provider-receipts) if you need proof.