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

# Audiences Overview

> Store a recipient list once, then send published campaigns to it as often as you like — with scheduling, variables, and idempotent retries 📋

An audience is a recipient list you upload once and reuse. Instead of putting every recipient in the body of each send, you store the list, get back an id, and send a published campaign to that id.

This suits large lists and repeat sends. [Send Campaigns](https://docs.connectly.ai/campaigns/send-campaigns) carries its recipients inline, which is the right shape for a handful of entries; an audience is the right shape for tens of thousands, and it is the only way to schedule a send for later.

## How it works

<Steps>
  <Step title="Upload the recipient CSV">
    Call [Upload recipients](https://docs.connectly.ai/audiences/upload-recipients) with your CSV as multipart form data. You get back an asset id.
  </Step>

  <Step title="Store it as an audience">
    Call [Create or replace an audience](https://docs.connectly.ai/audiences/manage-audiences) with that asset id. Connectly reads the file, canonicalizes every recipient, and stores the list under an audience id.
  </Step>

  <Step title="Send a campaign to it">
    Call [Send to an audience](https://docs.connectly.ai/campaigns/send-to-audience) with the audience id and a published campaign id. Send now, or pass `scheduledAt` to dispatch later.
  </Step>

  <Step title="Poll the send">
    Call [Get sendout status](https://docs.connectly.ai/campaigns/send-to-audience#get-sendout-status) to see whether the recipients passed the campaign's checks. Delivery itself is reported by webhooks.
  </Step>
</Steps>

## The CSV

One row per recipient, with a header row.

| Column           | Meaning                                                                                                                                                            |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Recipient column | An E.164 phone number (`+14155558234`) or a [BSUID](https://docs.connectly.ai/messaging/bsuid). Defaults to the first column; name another with `recipientColumn`. |
| `callback_data`  | Echoed back on that recipient's webhooks instead of becoming a variable.                                                                                           |
| Any other column | Becomes a template variable of the same name, matched against the campaign's placeholders.                                                                         |

```csv theme={null}
phone,name,order_id
+14155558234,Ana,A-1001
+16505551234,John,A-1002
```

<Warning>
  **Column names must match the campaign's variables exactly**, including case. A campaign expecting `name` will reject every row of a file whose column is `customername`. Under the default `onInvalidEntries: reject_all` that fails the whole send, so check the names before a large send.
</Warning>

An audience holds at most **1,000,000 recipients**. Files must be UTF-8.

## Replacing an audience

Creating and replacing are the same call: pass `audienceId` to overwrite that audience's recipients, or omit it to have one minted. Replacing is how an audience changes, so repeating the same request is harmless.

<Note>
  Sends already created from an audience are unaffected by a later replace. Each send keeps its own copy of the recipients as they stood when it was created.
</Note>

## Limits

| Endpoint                        | Rate limit             |
| ------------------------------- | ---------------------- |
| `POST /upload/audience_csv`     | 60 requests per minute |
| `POST /create/audiences`        | 60 requests per minute |
| `POST /send/audience_campaigns` | 10 requests per minute |

An audience send creates and verifies a sendout, which costs far more than an inline send — hence the lower limit.

## Endpoints

<CardGroup cols={2}>
  <Card title="Upload recipients" icon="upload" href="https://docs.connectly.ai/audiences/upload-recipients">
    `POST /v1/businesses/{businessId}/upload/audience_csv` — stage a CSV and get an asset id.
  </Card>

  <Card title="Manage audiences" icon="list" href="https://docs.connectly.ai/audiences/manage-audiences">
    Create, replace, read, and delete a stored recipient list.
  </Card>

  <Card title="Send to an audience" icon="paper-plane" href="https://docs.connectly.ai/campaigns/send-to-audience">
    `POST /v1/businesses/{businessId}/send/audience_campaigns` — send now or on a schedule.
  </Card>

  <Card title="Send Campaigns" icon="envelope" href="https://docs.connectly.ai/campaigns/send-campaigns">
    The inline alternative, for a small number of recipients per request.
  </Card>
</CardGroup>
