# Start a Campaign

> Start an Edesy Collect reminder campaign, the checks that run before the first call, campaign and contact statuses, and how to pause, resume or stop.

Source: https://edesy.in/docs/collect/campaigns/start-a-campaign

Click Start on the campaign page, or call `POST /v1/collect/campaigns/:id/start`. Collect checks KYC, debtors, the message, the caller ID and your wallet, then begins calling each debtor at their scheduled time. The campaign keeps running until every debtor is paid, stopped or out of attempts, then it completes on its own.

## Checks before the first call

| Check | Error if it fails |
|---|---|
| KYC approved | `403 KYC_NOT_APPROVED` |
| At least one debtor uploaded | `campaign has no contacts` |
| A message saved | `campaign has no TTS text configured` or `campaign has no audio file uploaded` |
| Fixed caller ID can be routed (only when no pool is set) | Caller ID not routable |
| Wallet can fund calls | Balance error with the required and current balance |

## Start

```bash
curl -X POST https://voice-api.edesy.in/v1/collect/campaigns/CAMPAIGN_ID/start \
  -H "Authorization: Bearer sk_your_api_key"
```

```json
{ "status": "ok" }
```

## While it runs

- Collect checks for debtors who are due about every 30 seconds and dials them, up to the campaign's concurrency (5 at a time by default).
- With a number pool, each attempt picks the next caller ID by the pool's rotation. Without one, every call uses the campaign's `from_number`.
- If the wallet cannot fund calls, dialling waits until you top up.
- The contacts table in the portal refreshes on its own and shows attempts, the due amount and date, and the payment status.

## Campaign statuses

| Status | Meaning |
|---|---|
| `created` | Not started yet |
| `running` | Calling debtors on their schedule |
| `paused` | Paused; no new calls |
| `stopped` | Stopped by you |
| `completed` | No debtor has any attempt left |

## Contact statuses

Each debtor has a call status and a separate payment status. The payment status (`pending`, `promised`, `paid`, `stopped`) decides whether Collect keeps calling. Call statuses include `pending`, `dialing`, `completed`, `no-answer`, `busy`, `failed` and `suppressed` (on your DNC list, never dialled). A debtor shows `failed` when every number in the pool has already been used for them.

Track progress by payment status. A debtor who answered but has not paid stays in the ladder unless `stop_on_connect` is on.

## Pause, resume or stop

The Collect portal has a Start button. To pause, resume or stop a running campaign, use the shared campaign endpoints with the same API key:

```bash
curl -X POST https://voice-api.edesy.in/v1/campaigns/CAMPAIGN_ID/pause  -H "Authorization: Bearer sk_your_api_key"
curl -X POST https://voice-api.edesy.in/v1/campaigns/CAMPAIGN_ID/resume -H "Authorization: Bearer sk_your_api_key"
curl -X POST https://voice-api.edesy.in/v1/campaigns/CAMPAIGN_ID/stop   -H "Authorization: Bearer sk_your_api_key"
```

To stop calling one debtor, mark them stopped. See [Mark Paid, Promised or Stopped](https://edesy.in/docs/collect/payments/mark-paid-promised-stopped).

## FAQ

**Why has nobody been called yet?**
If you started outside calling hours, the first calls go out at the next window open (09:00 IST by default).

**Does a running campaign pick up debtors I add later?**
Yes, while it is still running. They are scheduled from the next window open and dialled when due. A campaign completes once no debtor has attempts left, so for a fresh batch after that, create a new campaign.

**Why is a debtor marked failed?**
Usually because every active number in the pool has already been used for that debtor. To avoid this for later debtors, add numbers to the pool or set the total attempts no higher than the number of active pool numbers.
