Consult id (also the webhook consultId and the embed token subject).
Our id of the patient on the thread.
OptionalexternalYour id of the patient, when the patient was API-provisioned.
OptionalpatientThe patient's header card — see PatientSummary. Present on reads made with a physician credential (the inbox needs a name per row); absent on key-only reads, which already know their own patients.
Current lifecycle state.
OptionalclosedWhy the consult closed. Present exactly when status === 'closed'.
OptionalcontextClinical context you supplied at creation ("why they're here") — shown to the physician as the handoff summary.
OptionalspecialtyThe tenant specialty slug the thread was routed to, if any. Governs who
auto-assignment may hand it to; a physician outside it may still claim.
OptionalpatientWhere the patient is (ISO 3166-2 subdivision, no country prefix), as recorded for licensure routing. Absent when never captured.
OptionalpatientThe patient's locale as it was when this consult was minted — the value
language routing ranked the physicians against (their base language
first, then English, then anyone; see ./languages). FROZEN on the row,
so it is the routing truth for this thread and can differ from
patient.lang, which is the patient's CURRENT setting and moves with
every PATCH /v1/patients/{id}. Absent on threads minted before the
language was recorded.
OptionalmodeWhich async modality this is (mirrors AsyncConsultMode): live — a
thread picked up as soon as a clinician has capacity (the default, and
every thread created before booking existed); scheduled — a thread
booked for a chosen time. Absent means live.
OptionalassignedOur id of the currently assigned physician (or the last assignee on a closed thread). Absent before first assignment.
OptionalassignedYour id of the assigned physician, when API-provisioned.
OptionalassignedDisplay name frozen at assignment (e.g. Dr. Sarah Chen, MD).
OptionalassignedWhen the current physician was assigned.
OptionalpreviousPrior assignees, oldest first, when the thread was reassigned.
When the consult was created.
OptionalsentWhen the invite went out (creation time for API-origin consults).
OptionalconsentedWhen the patient consented. Absent while invited (or if declined).
OptionallastBumped on every message and lifecycle transition — the natural sort key.
OptionalendedWhen the consult reached its terminal state.
OptionalemergencySet when the platform's safety layer detected a possible emergency in a patient message mid-thread. The patient already received a deterministic emergency response; this flags the thread for clinical attention.
OptionalawaitingSince when the ball has been in the physician's court: set when a patient message lands (or the thread is assigned with one waiting), cleared by the physician's reply. Absent means nothing is waiting on the clinician. The inbox sorts on it — oldest waiting first.
OptionalresponseawaitingPhysicianSince + the response SLA (4 hours). Present exactly
when awaitingPhysicianSince is; the instant the thread becomes eligible
for takeover by another physician, and what a "due in …" badge counts
down to.
True when responseDueAt has passed and the thread is still awaiting the
assignee — the takeover condition, evaluated server-side at read time so a
client never has to compare clocks. Always present (false when nothing
is waiting).
OptionalpatientWhen the patient last wrote on the thread.
OptionalphysicianWhen the assigned physician last replied.
OptionalresolveWhen the physician marked the thread resolved — the start of the patient's
acceptance window. Present while resolve_requested and on threads that
closed out of it.
OptionalresolutionThe note the physician attached to the resolve, if any.
OptionalautoHow many times the SLA sweep moved this thread to another physician without anyone asking. A thread that keeps bouncing is the signal to look at the rota, not the thread.
Whether the patient may (still) rate this consult. Server-owned: true only for closed threads whose close reason earns a rating prompt and that have not been rated yet.
OptionalratingThe rating, once submitted. Write-once.
Who opened it — see ConsultOrigin.
An async (messaging-based) physician consult thread.
The consult's MESSAGES are not embedded here — page them via
GET /v1/async-consults/{id}/messagesor receive them in real time via theasync_consult.messagewebhook.