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

# Campaigns

> Understand outbound calling campaigns in Ringg AI.

A **Campaign** is a scheduled group of outbound calls. Ringg AI uses one assistant, one or more caller numbers, and a contact list to call many people without manual dialing.

***

## What a Campaign Needs

| Item          | Why It Matters                                       |
| ------------- | ---------------------------------------------------- |
| Assistant     | Controls what the call says and how it behaves       |
| Caller number | Shows as the number calling the contact              |
| Calling list  | Contains phone numbers and optional custom variables |
| Schedule      | Sets when calls start and stop                       |
| Timezone      | Makes the schedule clear for your audience           |
| Credits       | Pays for call time                                   |

***

## Campaign Settings

When creating a campaign, you fill in two main sections.

### Campaign Settings

| Field                        | Meaning                                  |
| ---------------------------- | ---------------------------------------- |
| **Campaign Name**            | Business-friendly label for the campaign |
| **Assistant**                | Voice agent that will make the calls     |
| **Numbers**                  | Caller IDs used for dialing              |
| **Campaign Start Date/Time** | When Ringg AI can start calling          |
| **Campaign End Date/Time**   | When Ringg AI must stop calling          |
| **Timezone**                 | Timezone for the schedule                |
| **Email Notifications**      | People who receive campaign updates      |

### Calling List

The calling list is usually a CSV file. It should include:

* A phone number column.
* Any custom variables used in the assistant prompt.
* Clean headers with no extra spaces.

Example: if the assistant says `@{{callee_name}}`, the CSV needs a `callee_name` column.

***

## Campaign Status

| Status      | Meaning                                        |
| ----------- | ---------------------------------------------- |
| `Scheduled` | The campaign is waiting for its start time     |
| `Ongoing`   | Calls are currently being made                 |
| `Paused`    | Calling has been paused                        |
| `Completed` | The campaign finished or reached its end time  |
| `Failed`    | The campaign hit an error that needs attention |

***

## Campaign Concurrency

Concurrency controls how many calls can happen at the same time.

Use **Manage Concurrency** when:

* Multiple campaigns are running at once.
* API-triggered calls and dashboard campaigns share the same workspace capacity.
* You want to control how call slots are split across campaigns.

<Note>
  If campaign concurrency is not set manually, Ringg AI distributes available campaign call slots across running campaigns.
</Note>

***

## Developer Handoff

Developers need campaign IDs to start, monitor, and reconcile calls outside the dashboard.

| Item                              | Why Developers Need It                        |
| --------------------------------- | --------------------------------------------- |
| `agent_id`                        | Assistant that should handle the calls        |
| Caller number or `from_number_id` | Caller ID for the campaign                    |
| CSV column names                  | Must match assistant custom variables         |
| `bulk_list_id` or list ID         | Identifies the uploaded contact list          |
| Campaign ID                       | Identifies the saved campaign                 |
| Webhook events                    | Sends results to another system automatically |

For the standard API flow, developers should use `POST /campaign/save` and then `POST /campaign/start`.

For 5,000 or more rows, developers should use the beta large-campaign flow:

1. `POST /campaign/upload-csv`
2. `GET /campaign/upload-status/{bulk_list_id}`
3. `POST /campaign/make-call-async`
4. `POST /campaign/check-balance/{bulk_list_id}`
