> ## 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.

# Get Campaign

> One campaign with recipient counts, effective concurrency and the workspace limit

Read one campaign. Poll this endpoint to follow a running campaign. The counts show where each recipient is.

## Request

### Headers

**Authorization** `string` *required*

Bearer token with your API key (scope `agents`)

### Path

**campaignId** `string` *required*

The campaign `id` (UUID)

## Response

**200 OK**. The campaign with these fields added:

| Field | Meaning |
| - | - |
| `line_kind` | `sixtydb` for a 60db Dialer line, `byo` for your own line |
| `workspace_concurrency` | The workspace limit on live calls. `null` when there is no limit |
| `effective_concurrency` | The lower of `concurrency_limit` and `workspace_concurrency`. This is the number of calls the campaign runs at once |

```json theme={null}
{
  "success": true,
  "data": {
    "id": "3f1c9a2e-7b44-4d0e-9a5f-1c2d3e4f5a6b",
    "name": "Spring renewals",
    "agent_id": "9c2e1d7a-0b3f-4e6a-8f1d-5a7b9c0e2d44",
    "agent_name": "Front desk",
    "phone_line_id": "2d8e4f10-6a3b-4c9d-8e7f-0b1a2c3d4e5f",
    "phone_line_name": "Main line",
    "status": "paused",
    "pause_reason": "consecutive_failures",
    "timezone": "Asia/Kolkata",
    "start_at": null,
    "calling_windows": [{ "days": [1, 2, 3, 4, 5], "start": "09:00", "end": "20:00" }],
    "concurrency_limit": 3,
    "max_attempts": 3,
    "retry_delay_secs": 1800,
    "max_consecutive_failures": 10,
    "consecutive_failures": 10,
    "variable_mapping": {},
    "variable_defaults": {},
    "counts": { "total": 250, "pending": 170, "calling": 0, "completed": 40, "no_answer": 36, "failed": 4, "skipped": 0, "cancelled": 0 },
    "created_at": "2026-11-12T09:00:00.000Z",
    "updated_at": "2026-11-12T11:02:00.000Z",
    "started_at": "2026-11-12T09:00:02.000Z",
    "completed_at": null,
    "line_kind": "sixtydb",
    "workspace_concurrency": 5,
    "effective_concurrency": 3
  }
}
```

`counts` has these keys: `total`, `pending`, `calling`, `completed`, `no_answer`, `failed`, `skipped` and `cancelled`. See [Outbound campaigns](https://docs.60db.ai/features/agents-campaigns.md#statuses-and-pause-reasons) for what each one means.

## Errors

| Status | Code | Meaning |
| - | - | - |
| 403 | `POLICY_DENY` | Your role cannot read campaigns, or the API key lacks the `agents` scope |
| 404 | `CAMPAIGN_NOT_FOUND` | No campaign with this ID in your workspace |

## Example

```bash cURL theme={null}
curl https://api.60db.ai/agents/campaigns/CAMPAIGN_ID \
  -H "Authorization: Bearer your-api-key"
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.