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

# List Click-to-Calls

> This workspace's click-to-call history, newest first

Paginated click-to-call history for your workspace, newest first. Each entry is the same call object [Place Click-to-Call](/api-reference/click2call/place-call) returns, so cost and outcome are on the row — no join against a separate ledger.

## Request

### Headers

<ParamField header="Authorization" type="string" required>
  Bearer token with your API key
</ParamField>

### Query

<ParamField query="limit" type="integer" default="25">
  Rows per page, `1`–`200`
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Rows to skip
</ParamField>

<ParamField query="mine" type="string" default="1">
  By default you see the calls **you** placed plus the workspace's unattributed ones. Pass `mine=0` for everything the workspace placed.
</ParamField>

<ParamField query="api_key_id" type="integer">
  Narrow to one API key — the per-integration statement a reseller bills from. Scoped to your workspace, so another workspace's key id returns nothing rather than their calls.
</ParamField>

## Response

<ResponseField name="calls" type="array">
  Call objects, newest first. See [Place Click-to-Call](/api-reference/click2call/place-call#response) for every field
</ResponseField>

<ResponseField name="total" type="integer">
  Total rows matching the filter, ignoring pagination
</ResponseField>

<ResponseField name="limit" type="integer">
  The page size actually applied (clamped to 1–200)
</ResponseField>

<ResponseField name="offset" type="integer">
  The offset applied
</ResponseField>

<ResponseField name="has_more" type="boolean">
  `true` when another page follows
</ResponseField>

## Errors

| Status | Code                     | Meaning                   |
| ------ | ------------------------ | ------------------------- |
| 409    | `DIALER_NOT_PROVISIONED` | Trunk not set up (Gate T) |

## Example

<RequestExample>
  ```bash cURL theme={null}
  # Everything the workspace placed, first 50
  curl "https://api.60db.ai/dialer/click2call?mine=0&limit=50" \
    -H "Authorization: Bearer your-api-key"

  # One integration's calls only
  curl "https://api.60db.ai/dialer/click2call?api_key_id=17" \
    -H "Authorization: Bearer your-api-key"
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({ mine: '0', limit: '50', offset: '0' });
  const res = await fetch(`https://api.60db.ai/dialer/click2call?${params}`, {
    headers: { Authorization: `Bearer ${process.env.SIXTYDB_API_KEY}` },
  });

  const { data } = await res.json();
  const spend = data.calls.reduce((sum, c) => sum + (c.cost_usd || 0), 0);
  console.log(`${data.total} calls, $${spend.toFixed(4)} on this page`);
  ```

  ```python Python theme={null}
  res = requests.get(
      "https://api.60db.ai/dialer/click2call",
      params={"mine": 0, "limit": 50},
      headers={"Authorization": f"Bearer {os.environ['SIXTYDB_API_KEY']}"},
  )
  page = res.json()["data"]
  print(page["total"], page["has_more"])
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "success": true,
    "data": {
      "calls": [
        {
          "call_id": "7d004ba2-565f-4ee2-9aa2-19523d8db7ae",
          "reference_id": "crm-task-91823",
          "did": "+917900000000",
          "agent_number": "+919812345678",
          "customer_number": "+919876543210",
          "state": "completed",
          "call_done": true,
          "terminal_event": "call.completed",
          "hangup_cause": "NORMAL_CLEARING",
          "talk_seconds": 66,
          "total_seconds": 92,
          "cost_usd": 0.0033,
          "billing_status": "billed",
          "placed_via": "api_key",
          "api_key_id": 17,
          "api_key_name": "crm-integration",
          "created_at": "2026-09-23T14:11:27.134Z"
        },
        {
          "call_id": "1c93f0aa-2d8e-4f61-b0c2-7f5a1e9d4402",
          "reference_id": "qc2c-8f1c1e2a-4b77-4a51-9f3e-2c1d6f0a77b1",
          "state": "failed",
          "call_done": true,
          "terminal_event": "call.not_answered",
          "hangup_cause": "NO_ANSWER",
          "leg": "agent",
          "talk_seconds": 0,
          "total_seconds": 31,
          "cost_usd": null,
          "billing_status": null,
          "placed_via": "session",
          "created_at": "2026-09-23T13:48:02.771Z"
        }
      ],
      "total": 248,
      "limit": 50,
      "offset": 0,
      "has_more": true
    }
  }
  ```
</ResponseExample>
