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

# Answer a Call

> Answer an inbound call, optionally bridging it or parking it in a queue.

Answers an inbound call that is still connecting — one in the `calling`, `ringing`, or `pre_established` state. Optionally bridge the caller to a number or agent on answer, or park them in a queue.

The response reflects the *accepted* answer request; the call reaches `established` only once the provider confirms it, so the returned `state`, `answeredAt`, and any `conferenceId`/`bridgedCallId` are populated asynchronously — poll [Get a Call](/api-reference/voice/calls/get-call) for the live state.

Requires the `voice_calls.write` scope and the **Voice Calls** product entitlement.

## Path Parameters

<ParamField path="callId" type="string" required>
  The id of the inbound call to answer.
</ParamField>

## Body Parameters

<ParamField body="connectTo" type="string" optional>
  A target to bridge the caller to once answered. Accepts either an E.164 number or the `id` of a [voice agent](/api-reference/voice/agents/create-agent). The resolved destination is screened against your account's compliance suppression (DNC, opt-out, quiet hours) before dialing.
</ParamField>

<ParamField body="queue" type="string" optional>
  The id of a queue to park the caller in on answer.
</ParamField>

<ParamField body="record" type="boolean" default={false}>
  Whether to record the call from the moment it is answered. Recording may require caller consent — see [call recording](/api-reference/voice/overview#call-recording).
</ParamField>

<Note>Pass `connectTo` or `queue`, not both.</Note>

## Response Fields

<ResponseField name="call" type="object">
  The answered call.

  <Expandable title="Call properties" defaultOpen>
    <ResponseField name="call.id" type="string">The call's unique identifier.</ResponseField>
    <ResponseField name="call.direction" type="string">`inbound` for calls answered through this endpoint.</ResponseField>
    <ResponseField name="call.state" type="string">Lifecycle state. See [Call states](/api-reference/voice/overview#call-states).</ResponseField>
    <ResponseField name="call.legKind" type="string">`primary`, `bridge`, or `monitor`.</ResponseField>
    <ResponseField name="call.from" type="string">The calling number.</ResponseField>
    <ResponseField name="call.to" type="string">The destination number.</ResponseField>
    <ResponseField name="call.connectTo" type="string | null">The resolved bridge target, if any.</ResponseField>
    <ResponseField name="call.queueId" type="string | null">The queue this call is parked in, if any.</ResponseField>
    <ResponseField name="call.conferenceId" type="string | null">The provider conference id once a bridge or monitor leg is attached.</ResponseField>
    <ResponseField name="call.parentCallId" type="string | null">For a bridge/monitor leg, the primary call it belongs to.</ResponseField>
    <ResponseField name="call.bridgedCallId" type="string | null">For a primary call, the currently bridged agent leg.</ResponseField>
    <ResponseField name="call.monitorRole" type="string | null">`MONITOR` or `ADVISOR` for a monitor leg.</ResponseField>
    <ResponseField name="call.record" type="boolean">Whether recording was requested.</ResponseField>
    <ResponseField name="call.recordingState" type="string | null">`requested`, `started`, `stopped`, `ready`, `failed`, or `deleted`.</ResponseField>
    <ResponseField name="call.recordingFileIds" type="array">Provider file ids for completed recordings.</ResponseField>
    <ResponseField name="call.customData" type="object">The metadata attached to the call.</ResponseField>
    <ResponseField name="call.error" type="string | null">A machine-readable reason when the call failed.</ResponseField>
    <ResponseField name="call.startedAt" type="string | null">ISO 8601 timestamp when the call started.</ResponseField>
    <ResponseField name="call.answeredAt" type="string | null">ISO 8601 timestamp when the call was answered.</ResponseField>
    <ResponseField name="call.endedAt" type="string | null">ISO 8601 timestamp when the call ended.</ResponseField>
    <ResponseField name="call.createdAt" type="string | null">ISO 8601 timestamp when the record was created.</ResponseField>
  </Expandable>
</ResponseField>

## Examples

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/answer \
    -H "X-Api-Key: trk_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "connectTo": "+14155559876",
      "record": true
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "call": {
      "id": "665f1e2a9c4b1a0012ab34cd",
      "direction": "inbound",
      "state": "ringing",
      "legKind": "primary",
      "from": "+14155551234",
      "to": "+18005551234",
      "connectTo": "+14155559876",
      "queueId": null,
      "conferenceId": null,
      "parentCallId": null,
      "bridgedCallId": null,
      "monitorRole": null,
      "record": true,
      "recordingState": "requested",
      "recordingFileIds": [],
      "customData": {},
      "error": null,
      "startedAt": "2026-08-21T18:00:00.000000Z",
      "answeredAt": null,
      "endedAt": null,
      "createdAt": "2026-08-21T18:00:00.000000Z"
    }
  }
  ```
</ResponseExample>

## Error Codes

| Status | Code                                                                                           | Meaning                                                                                  |
| ------ | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| 404    | `call_not_found`                                                                               | No call with that id exists on your account.                                             |
| 409    | `call_not_answerable`                                                                          | The call is not an inbound call in the `calling`, `ringing`, or `pre_established` state. |
| 422    | `answer_target_conflict`                                                                       | Both `connectTo` and `queue` were supplied.                                              |
| 409    | `answer_in_progress`                                                                           | The call is already being answered.                                                      |
| 404    | `agent_not_found`                                                                              | `connectTo` is an agent id that does not exist.                                          |
| 422    | `invalid_number`                                                                               | `connectTo` is not a valid E.164 number.                                                 |
| 403    | `compliance_dnc` / `compliance_opted_out` / `compliance_suppressed` / `compliance_quiet_hours` | The resolved `connectTo` destination is blocked by a compliance rule.                    |
| 403    | `voice_not_entitled`                                                                           | Voice calling is not enabled for your account.                                           |
