Get a conversation
GET /hooks/api_v1.php?r=conversations/{lead_id} merges messages, calls, and appointment events into one oldest-first timeline.
Required scope: conversations:read
curl --fail-with-body \ -H "X-Api-Key: $DIALDOZER_API_KEY" \ "https://app.dialdozer.com/hooks/api_v1.php?r=conversations/48219"{ "ok": true, "lead": {"lead_id":48219,"name":"Maya Chen","phone":"6025550142","status":"NEW"}, "entries": [ {"kind":"msg","id":901,"channel":"sms","direction":"in","actor_type":"contact","actor_id":"","subject":"","body":"Tomorrow works","status":"received","error":"","meta":null,"epoch":1784228400}, {"kind":"call","status":"SALE","secs":243,"agent":"agent7","recording_id":771,"ai_summary":"Customer requested a morning visit.","epoch":1784231000}, {"kind":"event","event":"booked","label":"Booked","actor":"agent7","actor_role":"setter","note":"","epoch":1784231300} ]}Entry variants
Section titled “Entry variants”msg:id,channel,direction,actor_type,actor_id,subject,body,status,error,meta,epoch.call:status,secs,agent, nullablerecording_id, nullableai_summary,epoch.event:event,label,actor,actor_role,note,epoch.
epoch values are Unix seconds. The endpoint has no cursor today. It reads up to 200 rows from each backing source, merges them, then keeps the latest 200 entries. Missing/out-of-organization leads return not_found.