# Campaigns

> Voice broadcast and agent-dialer campaigns on the Edesy Voice API - upload contacts or push leads, play a recorded or TTS message or bridge answered calls to agents, with AMD, DNC suppression and a cost estimate.

Source: https://edesy.in/docs/voice-api/campaigns

A campaign calls a list of contacts for you. In **broadcast** mode each answered call hears your message, recorded audio or text-to-speech. In **agent dialer** mode (progressive or power dialing) each answered call is bridged to a free agent in your Edesy contact center. You upload contacts as CSV or push leads over the API, and Edesy handles pacing, retries, calling hours, DNC suppression and results.

## Two modes

| | Broadcast | Agent dialer |
|---|---|---|
| Answered call hears | Your message (WAV/MP3 upload or TTS) | A live agent |
| Pacing | `max_concurrent` calls | 1.0, 1.5 or 2.0 lines per free agent (`dial_ratio`) |
| Contacts | CSV upload or JSON | CSV, JSON, or leads pushed while it runs |
| Set by | `audio_type` + audio or `tts_text` | `queue_id` of a contact-center queue |

## How a campaign runs

1. **Create** it with a name, caller ID and message or queue: [Create a Campaign](https://edesy.in/docs/voice-api/campaigns/create-a-campaign).
2. **Add contacts** by CSV or JSON, or push leads for an agent dialer: [Add Leads via API](https://edesy.in/docs/voice-api/campaigns/add-leads-via-api). Numbers on your DNC list are suppressed.
3. **Check** with a test call to your own phone and a cost estimate: [Estimate and Results](https://edesy.in/docs/voice-api/campaigns/estimate-and-results).
4. **Start** now or schedule it. Edesy dials within the calling window (09:00 to 21:00 by default), retries unanswered contacts, and falls back to a backup caller ID if the main one's carrier refuses calls.
5. **Watch** results live, pause, resume or stop, and export results as CSV. For agent-dialer campaigns, answers, completions, recordings and agent dispositions are pushed to your CRM with [webhook subscriptions](https://edesy.in/docs/voice-api/webhooks/subscriptions).

## Endpoints

| Method | Path | Description |
|---|---|---|
| `POST` | `/v1/campaigns` | Create |
| `GET` | `/v1/campaigns` | List (filter `status`) |
| `GET` / `DELETE` | `/v1/campaigns/{id}` | Read or delete |
| `POST` | `/v1/campaigns/{id}/audio` | Upload the message audio |
| `POST` | `/v1/campaigns/{id}/contacts` | Upload contacts (CSV or JSON) |
| `GET` | `/v1/campaigns/{id}/contacts` | List contacts and their status |
| `POST` | `/v1/campaigns/{id}/leads` | Push leads into a running agent-dialer campaign |
| `POST` | `/v1/campaigns/{id}/start`, `/pause`, `/resume`, `/stop` | Control |
| `POST` / `DELETE` | `/v1/campaigns/{id}/schedule` | Schedule or unschedule |
| `PUT` | `/v1/campaigns/{id}/fallback-number` | Set the backup caller ID |
| `POST` | `/v1/campaigns/{id}/test-call` | Hear the message on your phone |
| `POST` | `/v1/campaigns/{id}/duplicate` | Copy to run again |
| `GET` | `/v1/campaigns/{id}/estimate` | Cost and duration estimate |
| `GET` | `/v1/campaigns/{id}/results` | Results CSV |
| `GET` / `PUT` | `/v1/campaign-settings` | Workspace defaults, such as the default backup caller ID |

## Pricing

Campaign minutes cost Rs 0.50 per minute with a 60-second pulse, and unanswered calls are free. Prices exclude 18% GST. Agent seats are billed by the contact center plan.
