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

# Campaign Builder

> Build and send an SMS or voice campaign — every option in the builder, explained.

A **campaign** sends one message (and optional follow-ups) to an audience — a
list or a segment — from your sending numbers, with tracked links and
compliance handled for you. The builder has three steps: **Message → Audience →
Delivery**. A campaign is *built first and sent on your command*, so you can
review everything before a single text goes out.

## Pick a campaign type

The type sets how the campaign behaves after the first message. Choose it at the
top of **Message**.

| Type            | What it does                                                                                 | Use when                                                                      |
| --------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| **Broadcast**   | One message to everyone, optional timed follow-ups.                                          | A straightforward blast or drip.                                              |
| **Reply-based** | Sends the first message, then an **instant reply** the moment they respond, then follow-ups. | You want an immediate answer to whoever texts back (e.g. a code or "YES").    |
| **Click-based** | Sends a **response** when they click your link, then follow-ups.                             | The action you care about is a click, not a reply.                            |
| **Realtime**    | Messages leads as they stream in, continuously.                                              | Leads arrive live (e.g. from a form or feed) and should be texted on arrival. |

## Step 1 · Message

<Steps>
  <Step title="Write the message">
    Type the text recipients receive. Two tools make it stronger:

    * **Personalization tokens** — `{first_name}`, `{link}`, and any custom
      field as `{token}`, filled per contact.
    * **Spin syntax** — `{Hi|Hey|Hello}` picks one option per send, so no two
      texts are identical (better carrier deliverability). The editor shows how
      many unique variants your message produces and warns if it's over the
      160-character segment.
  </Step>

  <Step title="Add a tracked link (optional)">
    Attach an **offer** (a destination with conversion attribution) or set a
    **link domain** + **destination URL**, and drop `{link}` in the message. The
    link is shortened on your link domain, every click is tracked, and
    conversions attribute back to the offer. See [Link domains](/link-domains).
  </Step>

  <Step title="Save as a template (optional)">
    **Save as template** stores the message in your library to reuse in other
    campaigns.
  </Step>
</Steps>

## Step 2 · Audience

<Steps>
  <Step title="Choose who to send to">
    Pick an **audience source**: a **list** (a static set you added contacts to)
    or a **segment** (a live, rule-based audience that updates itself). Build the
    list or segment first, then select it here.
  </Step>

  <Step title="Screen with suppression lists">
    Tick any **suppression lists** to keep those numbers off this send — on top
    of the automatic STOP opt-out that always applies.
  </Step>

  <Step title="Refine with audience filters">
    Narrow the audience without editing the list, each with a **live count** so
    you see the effect immediately:

    * **Skip already-sent / already-replied / already-clicked (this offer)** —
      don't re-hit people you've already reached or who already engaged with this
      offer.
    * **Skip replied in this campaign** — avoid re-messaging responders.
    * **Only people who replied to / clicked in ANY campaign** — target only your
      already-engaged contacts.
  </Step>
</Steps>

<Note>
  The audience count updates as you change the source, suppression, and filters,
  so the number you see is exactly who will receive the campaign.
</Note>

## Step 3 · Delivery

<Steps>
  <Step title="Choose the sending number">
    Send from a **number pool** (rotates across several numbers to spread volume
    and protect deliverability — recommended for larger sends) or a **single
    number**.
  </Step>

  <Step title="Set the send rate">
    **Send rate (MPS)** controls how fast messages go out, in messages per
    second. Higher clears a large audience faster; lower is gentler on your
    numbers.
  </Step>

  <Step title="Add follow-ups">
    Depending on the type:

    * **Instant reply** (reply-based) — sent within seconds of a contact
      replying.
    * **Response** (click-based) — sent when they click.
    * **Follow-up sequence** — a drip of additional messages, each with its own
      **delay** and optional link/offer. Save a drip you like with **Save
      sequence as template**.
  </Step>

  <Step title="Schedule (optional)">
    Leave the schedule blank to start it yourself right after building, or set a
    **date, time, and timezone** to have it start automatically then.
  </Step>
</Steps>

## Test, create, and start

<Steps>
  <Step title="Send a test">
    Enter your own number to send yourself a **test** of the message (with tokens
    and links resolved) before committing.
  </Step>

  <Step title="Create the campaign">
    **Create** builds the campaign — it does **not** send yet. (If you set a
    schedule, it's created as *scheduled* and starts automatically at that time.)
  </Step>

  <Step title="Start it">
    Start the campaign to begin sending. Messages go out at your send rate, and
    you can **pause/stop** at any time from the campaign page.
  </Step>
</Steps>

<Warning>
  Every send respects **opt-outs**, **quiet hours**, and your **suppression
  lists** automatically — a contact who replied STOP is never messaged, whatever
  the audience says. You stay compliant without extra steps.
</Warning>

## Doing it over the API

Everything above is also available programmatically — see
[Create a campaign](/api-reference) (`POST /v1/campaigns`) and
[Start a campaign](/api-reference) (`POST /v1/campaigns/{id}/start`), or drive it
in natural language through the [MCP server](/mcp).
