API referencePhone

Retrieve a phone call

Retrieves one call — outbound or inbound (direction) — by id.

Endpoint
GET https://api.dairo.app/v1/phone/calls/{id}

Retrieves one call — outbound or inbound (direction) — by id. While a call is still in flight (queued, initiating, ringing, or in_progress) its status, duration, cost, and transcript are refreshed on read, so polling this endpoint is how you follow a call to completion; a terminal call is served from its stored record. Terminal statuses are completed, failed, no_answer, busy, and canceled, and a settled call carries durationSeconds, hangupCause, answeredBy (whether a person or a machine picked up), costUsd, summary, — when the call was placed with questions — structured answers, and for an inbound call the caller's structured notes (each { kind, text, due }, kind one of task, note, reminder, message). A call belonging to another account returns 404. Requires the phone:read scope.

Scope: phone:read. Send the API key as a bearer token; Scopes lists what each one reaches.

Request

cURL
curl "https://api.dairo.app/v1/phone/calls/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer $DAIRO_API_KEY"

Path parameters

NameTypeRequiredDescription
idstring (uuid)yesThe phone call's ID.

Response

200 Success. Body: application/json, PhoneCall.

FieldTypeRequiredDescription
object"phone_call"yes
idstring (uuid)yes
direction"outbound", "inbound"yesoutbound for calls placed with POST /v1/phone/calls, inbound for calls answered by a number's inbound agent.
status"queued", "initiating", "ringing", "in_progress", "completed", "failed", "no_answer", "busy", "canceled"yesTerminal: completed, failed, no_answer, busy, canceled.
fromNumberstringyes
toNumberstringyes
instructionsstring or nullno
greetingstring or nullno
voicestring or nullnoThe Dairo Live voice id.
modelstring or nullnoAlways dairo-live.
languagestring or nullno
maxDurationSecondsinteger or nullno
voicemailMessagestring or nullno
queuedAtstring (date-time) or nullno
startedAtstring (date-time) or nullno
answeredAtstring (date-time) or nullno
endedAtstring (date-time) or nullno
durationSecondsinteger or nullno
hangupCausestring or nullno
answeredBystring or nullnohuman or machine, from answering-machine detection.
summarystring or nullno
notesarray of PhoneCallNote or nullnoInbound calls: the caller's structured notes (tasks, notes, reminders, messages).
costUsdnumber or nullnoBilled per started minute: the $0.09/min Dairo Live rate plus the destination's telephony rate. Calls that never connect are free.
errorstring or nullno
metadataobjectno
idempotencyKeystring or nullno
createdAtstring (date-time)yes
200
{
  "object": "phone_call",
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "direction": "outbound",
  "status": "queued",
  "fromNumber": "string",
  "toNumber": "string",
  "instructions": null,
  "greeting": null,
  "voice": null,
  "model": null,
  "language": null,
  "maxDurationSeconds": null,
  "voicemailMessage": null,
  "queuedAt": "2026-10-19T09:30:00Z",
  "startedAt": "2026-10-19T09:30:00Z",
  "answeredAt": "2026-10-19T09:30:00Z",
  "endedAt": "2026-10-19T09:30:00Z",
  "durationSeconds": null,
  "hangupCause": null,
  "answeredBy": null,
  "summary": null,
  "notes": [
    {
      "kind": "task",
      "text": "Thanks for signing up.",
      "due": "string"
    }
  ],
  "costUsd": null,
  "error": null,
  "metadata": {},
  "idempotencyKey": null,
  "createdAt": "2026-10-19T09:30:00Z"
}

Errors

Every error has the same body, {"error": {"type", "code", "message", "param"}}; branch on code. Errors lists every code.

StatusMeaning
400The request is malformed or a value is invalid (invalid_request, invalid_domain, idempotency_key_mismatch).
401The API key is missing or invalid.
403The key lacks the scope this endpoint needs (scope_missing) or may not do this (not_permitted).
404No such resource in this account (resource_not_found).
429Rate limit, plan limit, budget or spend cap reached (rate_limited, plan_limit_reached, budget_exceeded, spend_cap_reached).
500An unexpected error; retry with backoff, then contact support (internal_error).

On this page