Skip to main content
The patient-tracking endpoints return the practice’s live tracking board: who is in clinic today, their appointment, room, status and provider. They are v4 only and need the read:patient_tracking scope on every route. Every response, errors included, is sent with Cache-Control: private, no-store.
The board is read live from the practice’s EHR. The base scope returns patient initials and gender alongside appointment details; that is identifiable data, not anonymous data.

Flow

  1. GET /v4/patient-tracking/sources lists the organization’s tracking sources: one per EHR connection the board can be read through. Each carries sourceId (pts_…), instanceId (ins_…), ehr, availability and capabilities. This call makes no EHR request.
  2. GET /v4/patient-tracking/facilities?sourceId= and GET /v4/patient-tracking/providers?sourceId= list the native facility and provider ids to filter by.
  3. Poll GET /v4/patient-tracking/snapshot?sourceId=… every recommendedPollIntervalSeconds (10).
sourceId must be the pts_… value from /sources; a raw UUID or another resource’s id is a 400. A source that does not exist, belongs to another organization or is no longer eligible is a 404 source_not_found.

Snapshot parameters

Empty list elements (101,,102), unknown expansions and unknown query parameters are all 400.

Expansions

Requesting an expansion without every listed scope is a 403 include_not_permitted; it is never silently dropped. An expansion you did not request is absent from the row, not null. Inside an expansion, a value the EHR does not supply is null.

Snapshot response

  • rows: the whole day for the selected facilities, with no pagination. On EZDerm a row is an encounter in one of seven in-clinic statuses (CHECKED_IN, ARRIVED, IN_ROOM, WITH_PROVIDER, WITH_STAFF, READY_FOR_STAFF, READY_FOR_PROVIDER). trackingKey is a stable row identity across polls.
  • counts: returned is the number of rows. On ModMed, seenAppointments also counts the returned rows (after the provider filter) and scheduledAppointments counts the facility’s scheduled appointments regardless of provider. EZDerm reports both as null.
  • freshness.state: fresh, or stale when the latest EHR read failed and a recent complete snapshot (no older than maxUsableAgeSeconds) was served instead.
  • completeness: per-component status (primary, officeFlow, colors) and warning codes. A snapshot is only returned when its primary read was complete.
  • access: the expansions requested and returned.

Errors

Every 503 sets Retry-After and repeats it as data.retryAfterSeconds.