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

# Campaign capacity and monitoring

> Inspect live account concurrency, running campaign usage, campaign health, contacts, and call attempts.

Use the account capacity endpoint before and during a campaign to understand how many calls can run concurrently.

<ParamField path="account_id" type="string" required>
  Your Vobiz account ID. Use the same value in `X-Auth-ID`.
</ParamField>

<ParamField header="X-Auth-ID" type="string" required>
  Your Vobiz account ID, for example `MA_XXXXXXXX`.
</ParamField>

```bash cURL theme={null}
curl "https://campaign.vobiz.ai/api/v1/account/{account_id}/capacity" \
  -H "X-Auth-ID: {account_id}" \
  -H "X-Auth-Token: {auth_token}"
```

The response includes:

* `concurrent_calls` — active calls across the account.
* `max_concurrent` — account concurrency limit.
* `concurrent_free` — capacity available for new calls.
* `utilization_pct` — current utilization percentage.
* `running_campaigns` — summaries of campaigns consuming capacity.

The endpoint returns `502` when the upstream platform concurrency service is unavailable.

## Capacity behavior

`max_concurrent` on a campaign cannot exceed the account concurrency limit. Capacity is enforced at dial time. A saturated account does not fail the campaign; the campaign remains `running` and waits until a slot becomes available.

<Note>
  The `cps` field remains for backward compatibility, but it does not gate campaign capacity. Use live concurrency and `max_concurrent` when reasoning about throughput.
</Note>

## Monitoring endpoints

| Endpoint                                | Use                                                               |
| --------------------------------------- | ----------------------------------------------------------------- |
| `GET /campaigns/{campaign_id}`          | Read status, computed health, counters, and pause reason.         |
| `GET /campaigns/{campaign_id}/contacts` | Browse contact state with `status` and `search` filters.          |
| `GET /campaigns/{campaign_id}/calls`    | Inspect every attempt, including attempts without a matching CDR. |
| `GET /campaigns/{campaign_id}/results`  | Download current or final contact outcomes.                       |
| `GET /capacity`                         | Inspect account-wide concurrency and running consumers.           |

## Health and automatic pauses

A running campaign reports `active`, `idle`, `stalled`, or `not_started` health. Operational pause reasons include:

* `manual_pause`
* `window_closed`
* `caller_pool_exhausted`
* `caller_pool_daily_limit_reached`
* `account_inactive`
* `stalled`
* `consecutive_failures`
* `balance_insufficient`

Some reasons require manual action. Daily window and pool daily-limit pauses can resume automatically at the appropriate time.
