Assessment and results
The assessment is the structured medical state behind the conversation: who the patient is, what evidence has been collected, which conditions are in the differential, and — once the interview concludes — the triage recommendation.
It is a conversation-level object. Read it as a whole snapshot and replace your local copy; never merge fields.
Getting the assessment
GET /conversations/{conversation_id}/assessmentReturns 200 OK with the current Assessment. On the blocking HTTP transport this is the canonical way to refresh state after a turn, because POST /turns deliberately omits the assessment.
On the streaming transports you do not need this call: every turn emits conversation.assessment.updated with the full snapshot.
Shape
| Field | Type | Description |
|---|---|---|
age | Age or null | Patient age. |
sex | "male", "female", or null | Patient sex. |
relationship | PatientRelationship or null | Who the user is answering for — self, child, or other. |
evidence | Evidence[] | Evidence matched to knowledge-base concepts. |
unmatched_evidence | UnmatchedEvidence[] | Evidence not yet linked to a concept. |
conditions | Condition[] | Knowledge-enriched differential rows; populated once a recommendation exists. |
recommendation | Recommendation or null | Set once the conversation reaches a recommendation. |
conditions and recommendation.conditions carry the same rows once a recommendation exists. Read either — they do not diverge.
Evidence
Each matched evidence item tells you not just what was collected but how:
{
"id": "s_21",
"name": "Headache",
"common_name": "Headache",
"state": "present",
"origin": "asked",
"seriousness": "normal",
"parent_id": null
}state is present, absent, or unknown — the last meaning the user did not know or declined to answer.
origin records how the item entered the conversation, which is what lets you distinguish your own seed data from what the assistant established:
origin | Meaning |
|---|---|
seeded | Pre-seeded by your client on conversation creation. |
initial | Reported by the user at the beginning of the conversation. |
asked | Answered in response to a question from the assistant. |
spontaneous | Volunteered by the user without being asked. |
inferred | Inferred by the system from other evidence. |
seriousness is normal, serious, emergency, or emergency_ambulance, ordered from least to most urgent. snomed_ct carries the SNOMED CT mapping when one exists and is omitted otherwise. parent_id is set when an immediate parent concept is also present in evidence.
Unmatched evidence
unmatched_evidence holds free-text or extracted findings the engine could not link to a knowledge concept — a label and a state, nothing more. Surface it in clinician-facing summaries; it does not participate in the differential.
Conditions
Condition rows are knowledge-enriched, so you can render a full result screen without a second API call:
{
"id": "c_49",
"probability": 0.4532,
"name": "Migraine",
"common_name": "Migraine",
"condition_details": {
"icd10_code": "G43",
"snomed_ct": { "code": "37796009" },
"category": { "id": "...", "name": "Neurological" },
"prevalence": "common",
"severity": "moderate",
"acuteness": "acute",
"hint": null,
"has_patient_education": true,
"triage_level": "consultation"
}
}has_patient_education tells you whether patient education content is available for that condition. condition_details.triage_level is the level recommended for that condition — distinct from the conversation-level recommendation.triage_level.
Recommendation
recommendation stays null until the interview concludes. When it is set, the conversation has finished:
| Field | Type | Description |
|---|---|---|
triage_level | TriageLevel | The triage band for the user. |
conditions | Condition[] | The ranked differential. |
has_emergency_evidence | boolean | Whether emergency-level evidence was observed. |
serious_evidence | SeriousEvidence[] | Highlighted serious evidence. |
specialist | Specialist | Suggested specialist. |
channel | RecommendationChannel | Suggested contact channel. |
stop_reason | string | Why the diagnostic flow stopped. |
Triage levels, from least to most urgent:
triage_level | Meaning |
|---|---|
self_care | Manageable with self-care. |
consultation | Routine consultation recommended. |
consultation_24 | Consultation recommended within 24 hours. |
emergency | Emergency-level care recommended. |
emergency_ambulance | Emergency-level care requiring ambulance transport. |
channel is personal_visit, video_teleconsultation, audio_teleconsultation, or text_teleconsultation.
A recommendation is not the only way a conversation ends. Check is_terminated too: an underage patient or a confirmed change of age or sex ends the conversation with recommendation still null. See Lifecycle and terminal states.
Drilling into results
Once a recommendation exists you can go deeper per condition:
- Reasoning — why the assistant asked what it asked, at a turn boundary.
- Condition details — supporting and conflicting evidence, plus patient education content.
- Summary report — a PDF of the whole conversation.