> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trycontour.com/llms.txt
> Use this file to discover all available pages before exploring further.

# The call object

> The same object appears in every webhook and on GET /v1/calls/{call_id}.

```json theme={null}
{
  "call_id": "9d2f7a3c-...",
  "agent_id": "3f1c1b2e-...",
  "status": "ended",
  "disposition": "answered",
  "direction": "outbound",
  "source": "api",
  "to_number": "+15555550100",
  "from_number": "+15555550199",
  "started_at": "2026-09-10T14:03:11+00:00",
  "ended_at": "2026-09-10T14:04:35+00:00",
  "duration_ms": 84000,
  "disconnection_reason": "agent_hangup",
  "recording_url": "https://...",
  "variables": { "patient_name": "Jane Doe" },
  "metadata": { "your_order_id": "ORD-8812" },
  "analysis": {
    "summary": "Jane confirmed her appointment for the 15th ...",
    "extracted_data": { "appointment_confirmed": true }
  }
}
```

<ResponseField name="status" type="string">
  `queued` → `in_progress` → `ended`, or `failed` if the call never went out.
</ResponseField>

<ResponseField name="disposition" type="string | null">
  What happened on the wire: `answered`, `answering_machine`, `no_answer`,
  `busy`, `rejected`, `unreachable`, `invalid_number`, `carrier_failure`.
  `null` until the call ends.
</ResponseField>

<ResponseField name="source" type="string | null">
  `api` for calls you created. Other values mean the call was started from the
  Contour dashboard or another channel.
</ResponseField>

<ResponseField name="disconnection_reason" type="string | null">
  Why the call ended, for example `agent_hangup`, `user_hangup`, `voicemail`,
  `no_answer`, `max_duration`.
</ResponseField>

<ResponseField name="recording_url" type="string | null">
  A presigned link that expires after about an hour. `null` until the
  recording is available. Use `GET /v1/calls/{call_id}/recording` for a fresh
  link at any time.
</ResponseField>

<ResponseField name="variables" type="object">
  The variables the call was created with.
</ResponseField>

<ResponseField name="metadata" type="object">
  Your metadata, echoed back untouched.
</ResponseField>

<ResponseField name="analysis" type="object | null">
  `null` until `call.analyzed`. Then `summary` (text) and `extracted_data`,
  whose keys are the fields configured on your agent.
</ResponseField>

The transcript is never included.

Full field list: [Get a call](/api-reference/calls/get-call).
