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

# Sequences and analytics

> Route phone campaign contacts by call outcome, add SMS & RCS, WhatsApp and email steps, call in each contact's local time, rotate caller numbers, edit a paused campaign, launch with a consent confirmation and measure conversions

A **sequence** decides what happens to each contact of a phone campaign: how often to call, what to do with the answer, when to send an SMS or RCS message, a WhatsApp template or an email, and when to call again or stop. The **Analytics** tab then shows how many contacts you dialed, reached and converted, and how many messages went out.

## Watch the walkthrough

The English interface uses demonstration data. Runs, customers and results shown are simulated; use the subtitle menu for your language.

<video controls playsInline preload="none" poster="/videos/tutorials/campaigns-sequences-and-analytics/overview.png" aria-label="Build, launch and measure a campaign sequence">
  <source src="https://docs.famulor.io/videos/tutorials/campaigns-sequences-and-analytics/overview.mp4" type="video/mp4" />
</video>

Example: a car dealership in Munich calls 2,000 leads, among them 300 in Austria and 40 in New York. With a sequence, the New York leads are called during New York business hours. A lead nobody reaches gets an SMS the next day. If the lead replies, the campaign counts it as a success; otherwise the lead gets one more call two days later. The Analytics tab shows how many leads turned into appointments.

> [!NOTE]
>
> Sequences are available for phone call campaigns that use their own contact list. Campaigns for WhatsApp, SMS or an external audience, and campaigns created without a sequence, keep the retry settings described in [Dialer, retries & compliance](https://docs.famulor.io/campaigns/dialer-and-compliance.md#retry-logic). Phone campaigns created in the web app start with a sequence. Campaigns created through the API, MCP or CLI without a `sequence` field stay classic.

## What a sequence is

A sequence is made of **steps**: call steps and message steps. A **call step** has:

* **An assistant.** By default the campaign assistant; a step can use a different one.
* **Attempts.** Every attempt has a delay. The first attempt is immediate, each later attempt waits the set number of minutes after the previous attempt started.
* **Voicemail per attempt.** An attempt can hang up on a voicemail or leave a message. Without a setting, the campaign's voicemail settings apply.
* **Outcomes.** After an answered call, the outcome decides the next stop: another step (after a delay), another attempt of the same step, or the end.

A **message step** sends one SMS or RCS message, one WhatsApp template or one email. See [Send messages in a sequence](#send-messages-in-a-sequence).

A sequence holds up to 10 steps, 10 attempts per call step and 10 outcomes per call step. The first step can be a call or a message.

### How outcomes are decided

Each outcome has a condition. You choose one of two kinds:

* **Described by you.** In **When**, choose **AI decides** and describe the outcome in a sentence, for example "The contact is open to the offer but wants to think it over". An AI reads the call transcript and picks the description that fits best.
* **Preset rules.** In **When**, choose a rule. The platform checks call data without AI: **Goal field is true** (the goal field of the call analysis), **Callback scheduled**, **Transferred to a person** or **Marked successful**.

Three outcomes are built in:

| Outcome | When it applies |
| - | - |
| No response | Every attempt of the step went unanswered, or reached a voicemail |
| Other | The call was answered, but none of your outcomes matched |
| Do not call | The contact asked not to be called again, or is on the workspace suppression list. The contact isn't called again |

Do not call is detected automatically and takes priority over your own outcomes.

### Where an outcome leads

| Destination | Result |
| - | - |
| Another step | The contact moves to that step, after the delay you set (at least 5 minutes after an answered call) |
| Retry | The next attempt of the same step. When no attempt is left, No response applies |
| End | The contact is finished. An end marked **successful** counts the contact as **Converted** |

## Send messages in a sequence

A message step sends one message and then moves the contact on. It replaces the optional follow-up of a classic campaign: sequence campaigns have no separate follow-up setting, and the API rejects a follow-up together with a sequence with a 400 error. The **Follow-up** you pick when you create a phone campaign becomes a message step after **No response** in its sequence.

| Step type | What it sends | What it needs |
| - | - | - |
| SMS & RCS | A text of up to 1,600 characters, from a platform number (SMS) or under your company name (RCS) | A workspace number that can send SMS, or a company name that is approved and ready to send (**Settings → Channels → SMS & RCS**). A company name needs a plan that includes RCS |
| WhatsApp | An approved template | An active WhatsApp sender and an approved text template; every placeholder maps to a contact field |
| Email | A subject and a text | A verified email address for the step's assistant (by default the campaign assistant) |

The text can contain placeholders such as `{{name}}`. A step that doesn't meet its requirements can't be saved or launched, and the message names the step, for example `Step "SMS reminder": Select an SMS-capable workspace number with outbound SMS enabled.`

### Channels a step can use

A step can only use a channel that may write first to a contact you know by phone number or email: a phone call, SMS & RCS, a WhatsApp template and email. Telegram, Messenger, Instagram, web chat and the other messaging channels can only answer inside a conversation the contact started, so they aren't offered as steps. WhatsApp Call isn't a step either, because the contact has to grant permission to be called first; use a WhatsApp Call campaign for it.

### Send under your company name (RCS)

SMS and RCS are one channel in Famulor. Opt-outs, quiet hours and replies work the same for both, and the step type is called **SMS & RCS**.

* **Choose the sender.** The **SMS sender** field of an SMS & RCS step lists two groups: **Numbers** and **Company names (RCS)**. A step uses exactly one sender. A workspace that has only company names can add the step too. Set up company names under **Settings → Channels → SMS & RCS**; see [SMS conversations](https://docs.famulor.io/channels/sms.md).
* **Readiness.** When you save, launch, start or resume, the company name must belong to the workspace, be approved and ready to send, and the plan must include RCS.
* **A company name stops being ready.** If it is paused or loses its approval while the campaign runs, the campaign pauses and keeps the error. No contact is skipped: fix the sender, then resume.
* **RCS can't reach a contact.** If the company name can't send to one contact (country or number not supported), that contact takes the **Not sent** route and doesn't count in **Messages sent**.

The step card shows **RCS** instead of **SMS** when the step sends under a company name. An SMS campaign and the SMS follow-up of a classic phone campaign offer the same two groups.

### Wait, replies and routes

Every message step has a **Wait**: how long the contact stays in the step after the message went out. With a wait of 0, the contact moves on right away. Three routes decide where the contact goes next:

| Route | When it applies |
| - | - |
| Sent (shown as **No reply** while replies are watched) | The wait is over and the contact didn't reply. It leads to another step or to an end |
| Replied | The contact answered on the same channel during the wait. Optional: turn on **Watch for a reply**, which needs a wait of at least 1 minute |
| Not sent | The message couldn't be sent: the contact has no email address, opted out of the channel, the provider rejected it, or RCS can't reach the contact |

A reply counts when the contact answers on the channel of the step: an SMS or RCS message, a WhatsApp message or an email from the contact. A reply on a different channel doesn't count.

A message counts as **sent** once the provider accepted it. If the provider doesn't answer clearly whether the message went out, the step treats it as sent and never sends it a second time.

### Opt-outs, calling hours and quiet hours

* Contacts that opted out of a channel never receive messages on it. A contact on the suppression list for calls or for all channels ends as **Do not call** at any step. A contact who opted out of the step's own channel only gets no message there and follows the **Not sent** route.
* A contact who answers an SMS with STOP is opted out and never counts as **Replied**, even though they wrote back.
* Messages follow the same calling hours, time zone setting and holidays as calls. A message waits for the next opening of the contact's calling hours.
* The workspace quiet hours of the channel apply too. A message waits until they end.
* While [Federal and State DNC Checks](https://docs.famulor.io/settings/consent-compliance.md) wait for verification, a call step doesn't dial US numbers. The contact keeps its attempts and is looked at again 15 minutes later. These checks cover calls, so message steps are still sent.

### Plan

A sequence that starts with a message step needs a plan that includes **multi-channel campaigns**, like a campaign that sends SMS or WhatsApp as its main channel. A message step later in the sequence needs nothing extra. WhatsApp messages also need a plan with WhatsApp text. An SMS & RCS step that sends under a company name also needs a plan that includes RCS.

## Build the sequence

The **Sequence** tab is a list of steps you fill in, next to a picture of the flow that draws itself. The picture is read-only: you edit only in the list.

From a screen width of 1,280 px, the steps sit on the left and the **Flow** card on the right, and it redraws with every change. On a narrower screen, select **Flow** above the list to open the picture. Select a step in the picture to open its card in the list.

The list shows the steps in the order contacts reach them, starting with the first step. The order follows the routes; you don't set it. A closed card shows the step number, the channel, the name, a summary line (which includes the step's assistant: the campaign assistant's name when the step has none of its own, or **No assistant** when the campaign has none), where the step comes from (**First step**, otherwise the step and route before it) and, once the campaign has started, how many contacts wait on it. Select the card header to open it. One card is open at a time, and it holds **Runs after**, the settings of the step and **Delete step**.

| Action | How |
| - | - |
| Add a step | Select **Add step** under the list. A list of the four step types opens right under the button: choose **Phone call**, **SMS & RCS**, **WhatsApp** or **Email**. The new step opens, named after its channel (with a number if that name is taken), and attaches to the natural continuation: the last step in the list that has a route ending the sequence without success, **No response** or the main route first. Move it with **Runs after** |
| Add a step from a route | In a **Then** select, choose **+ New call step**, **+ New SMS & RCS step**, **+ New WhatsApp step** or **+ New email step**. The step is created and connected to that route |
| Change where a step runs | Open the step and change **Runs after**. It lists every route that ends the sequence, plus the current one, as "step · route". The old route then ends the contact as not successful, and the new route leads to the step. When several routes lead to a step, they are listed as text instead |
| Decide what happens next | In the **Then** select of an outcome or route, choose another step (never one that loops back), a new step, **End: successful** or **End** |
| Delete a step | Open the step and select **Delete step**. The first step can't be deleted, and the button is disabled while contacts wait on the step |
| Start from a template | Select **Templates**. The button is only there before the campaign was started |
| Set calling hours | Open the **Schedule** card under the steps. It is closed by default and shows the days and hours in one line. It holds **Calling hours** with the time zone setting, **Holidays** and **Redial** |

In the list of step types, a type your workspace can't use yet is disabled and says why. A plan link opens **Plan** in a new tab, and a setup link opens the settings of the channel, so your draft stays open. Select **Save** to keep your changes: the steps are saved with the campaign.

A message above the list names what is missing. The step it names gets a red border, and selecting the message opens that step. A message step you haven't finished setting up shows as a hint, not as an error.

While the sequence is locked, the cards open read-only and nothing changes; only the **Schedule** card stays editable. See [What you can change after launch](#what-you-can-change-after-launch).

## Start from a template

Select **Templates** in the **Sequence** tab, choose a template and adjust it:

| Template | What it does |
| - | - |
| Single call with retries | One step with up to three attempts: the first call goes out right away, the second one day after the first, the third one day after the second. A reached goal ends the sequence as converted, "not interested" ends it, anything else retries |
| Call with follow-up | A first call and a follow-up call, each with two attempts. Contacts who are still evaluating get the follow-up call a day later |

A template replaces the whole sequence, so you confirm first. The **Templates** button is only there before the campaign was started: afterwards contacts sit on the steps, so you edit the steps instead. See [What you can change after launch](#what-you-can-change-after-launch).

## Set the calling schedule

The **Schedule** card in the **Sequence** tab controls when and on which days contacts are called.

### Calling hours in each contact's local time

Calling hours can apply in the campaign's time zone, or in each contact's local time: under **Calling hours**, choose **Campaign time zone** or **Contact's local time**. In local time, the platform derives the contact's time zone from the phone number. A New York number is called during New York business hours, a Vienna number during Vienna business hours.

Some numbers don't point to a single time zone, for example toll-free numbers or numbers from a country with several time zones. Such a contact is only called when the calling hours are open in every possible time zone of that country.

Holidays and blackout dates only postpone calls. A contact whose calling hours never open in the next year (for example because the hours of all its possible time zones never overlap) gets the stage **Enroll failed** with the reason no calling window if it was never called; a contact that was already called ends as **Failed**.

### Public holidays and blocked dates

Under **Holidays**, turn on **Skip public holidays** to skip national holidays of the contact's country. Public holidays are known for Austria, Belgium, Canada, Switzerland, Germany, Spain, France, the United Kingdom (England and Wales), Ireland, Italy, the Netherlands and the United States. Contacts in other countries aren't affected by this setting. Regional holidays aren't included.

Add days without calls, such as a company holiday, under **Days without calls**. Each date counts in the contact's local time.

### Double dial

When **Double dial** (under **Redial**) is on, a call that ends with no answer or a busy signal is redialed once immediately. It is off by default. Repeated immediate calls can be an unreasonable nuisance under EU law, so turn it on only after you checked this for the countries you call.

## Rotate caller numbers

A number pool lets the campaign call from several workspace numbers instead of the assistant's outbound number. Pick active numbers that can place outbound calls in the **Numbers** tab and choose one as the default:

| Mode | Which number is used |
| - | - |
| Local presence | A number that matches the contact's area code (US and Canada, Germany, Austria, Switzerland), otherwise a number from the contact's country, otherwise your default number |
| Round robin | The numbers take turns |

A contact keeps the first caller ID it was called from for every later attempt, so a returned call reaches a number the contact recognizes. When you change a contact's phone number, the next call picks a new caller ID.

Plan for about one number per 50 contacts. The **Numbers** tab shows contacts per region next to the pool numbers, so you can see which region lacks a number.

## Launch the campaign

A sequence campaign starts with the **Launch** button in the campaign header. It opens the **Launch campaign** dialog, where you choose the start time and confirm. **Launch** stays disabled while you have unsaved changes, the campaign has no assistant although a call or email step has none of its own ("Choose an assistant in the campaign settings before launching."), the confirmation isn't ticked or the campaign has no contacts.

**1. Check the overview**

Review the contacts, the pool numbers, the sequence and the schedule on the **Overview** tab. Blocked contacts, for example numbers on the suppression list, are counted separately.

**2. Choose the start time**

Select **Launch** in the header. In the dialog, select **Start now**, or **Schedule for later** and pick a date and time at least 5 minutes ahead.

**3. Confirm**

In the dialog, tick the confirmation: "I confirm this campaign complies with all laws and consent requirements that apply to the contacts being called, including do-not-call lists and opt-in rules (for example TCPA in the US, UWG and GDPR in the EU)." Then select **Launch** (**Schedule launch** if you chose a later start).

A scheduled campaign shows its start time on the **Overview** tab. Select **Cancel schedule** in the header to return it to Draft.

If the setting **Auto-complete when no leads remain** is off, you can launch or start the campaign without contacts. It then waits for contacts that you add later through the API, MCP or automations. This applies to every way of starting: the web app, the Public API (`launch` and `start`), a scheduled start and MCP. With the setting on, which is the default, a campaign without contacts is refused with "The campaign has no leads."

> [!WARNING]
>
> By confirming, you take responsibility for consent and for the lists that apply to your contacts. Examples: prior express consent for calls to consumers in Germany (UWG §7), prior express written consent for AI voice calls in the US (TCPA), and screening against national do-not-call registries. The platform checks your workspace [suppression list](https://docs.famulor.io/campaigns/dialer-and-compliance.md#do-not-call-dnc) before every call. It doesn't check national or state registries for you. For US numbers you can turn on [Federal and State DNC Checks](https://docs.famulor.io/settings/consent-compliance.md): until they are verified, calls to US numbers wait. This page is not legal advice.

The campaign stores who confirmed, when, from which surface (web, API, MCP or CLI) and which wording version. A sequence campaign can't be started on any surface without this confirmation.

## Parallel calls

**Parallel calls** sets how many calls of the campaign run at the same time. The slider ends at the limit of your workspace, which is your plan plus any purchased Concurrent Lines. The line under the slider shows **Workspace limit**. To raise it, select **Upgrade**: the Plan page opens in a new tab with the add-on for Concurrent Lines, and the campaign draft stays open. When you return to the campaign tab, the field reads the new limit. Workspaces with unlimited lines, and workspaces without a Plan page, show no link.

## What you can change after launch

You can change the sequence of a campaign that was started while it is **paused**. A paused campaign keeps every contact where it is, so you can fix a message, add a step or change a wait without starting over.

| Campaign status | Sequence |
| - | - |
| Draft | Editable |
| Paused | Editable |
| Running | Locked. Select **Pause** in the banner of the **Sequence** tab: "Pause the campaign to edit the sequence." |
| Scheduled | Locked. Select **Cancel schedule**: "Cancel the schedule to edit the sequence." |
| Completed | Locked. Select **Duplicate to edit**. It creates a draft with the same settings, but without contacts and without a confirmation |

The **number mode** stays fixed after the first start. You can still change the pool numbers, calling hours, time zone setting, holidays, double dial and parallel calls. A started campaign keeps its kind: you can't add a sequence to it or remove the sequence.

### Contacts keep their place

A contact that isn't finished (waiting, queued or in a call) sits on a step. A contact nobody has contacted yet sits on the first step. The edited sequence must still contain every step such contacts sit on, with the same step type. Otherwise Famulor refuses the save: `Step "<name>" still has <n> contacts. Keep the step, or wait until they have moved on.` Each card shows how many contacts wait on it, and **Delete step** is disabled while that number is above zero.

Everything else can change: names, assistants, attempts, messages, waits, outcomes, routes and new steps. You can remove steps without waiting contacts.

### What a change means for a contact in the middle

A contact continues on its step with the new settings:

* If it already made more attempts than the step now allows, the step counts as used up and the contact takes **No response**.
* A message that was sent isn't sent again.
* A wait for a reply is evaluated with the new routes.
* A wait or a delay that is already running keeps its end time. The new value applies from the next send or attempt.
* Outcomes that were already recorded keep the label they were written with. Analytics shows a step or outcome that no longer exists with its stored label.

No contact starts over. If the step of a contact is missing anyway, the contact ends as failed and never restarts at the first step.

### Confirm again when you resume

A changed sequence clears the launch confirmation, because it covered the sequence you reviewed. Select **Resume**: a window opens with the contacts, steps and phone numbers, and with the confirmation (see [Launch the campaign](#launch-the-campaign)). Tick it and select **Resume** again. **Resume** waits until you saved your changes. In the campaign list, **Resume** on such a campaign doesn't resume it directly: it opens the campaign page with the confirmation. A paused campaign whose sequence you didn't change resumes with one click. Through the API, send `compliance_attestation: true` with `resumeCampaign` or `startCampaign`; without it, the reason is `launch_required`.

If the campaign is resumed while you save, Famulor refuses the save. Reload the campaign and make the change again.

| Action | Effect |
| - | - |
| Pause | Stops new calls. Calls in progress finish normally |
| Resume | Continues a paused campaign. After a change to the sequence, it asks for the confirmation again |
| Cancel schedule | Returns a scheduled campaign to Draft and removes the start time and the confirmation. Select **Launch** again to start |

### Call a waiting contact next

**Call next** sits in the ⋮ menu of a contact in the **Contacts** tab and in the details of the contact. While the campaign is running, it makes a contact that waits for its next call due at once. The call runs through the sequence like any other attempt. For a contact that waits on a message step the action is off: the contact is called when it reaches a call step.

## Contact stages

Every contact of a sequence campaign shows its stage, the current step, the outcome and the caller ID in the **Contacts** tab.

| Stage | Meaning |
| - | - |
| Enrolled | Waiting for the next call |
| In progress | A call is running, or its result is being evaluated |
| Completed | The sequence is finished for this contact, including No response and Do not call |
| Enroll failed | The contact was never called. The reason is shown: suppressed (the number is on the suppression list), invalid number, or no calling window |
| Failed | The call could not be completed |

## Read the analytics

![The Analytics tab of a sample campaign: 198 dialed, 96 connected, 58 converted, a 29.3% conversion rate, 94 messages sent and the outcome mix](https://mintcdn.com/ouraicall/fCMXM821NmRcRdYY/images/campaigns/sequence-analytics-example.webp?fit=max\&auto=format\&n=fCMXM821NmRcRdYY\&q=85\&s=5213a0fc0d19c74b029f4e81ad221ffa)

Example with sample data

The **Analytics** tab of a launched campaign shows these figures for the selected period:

| Figure | Definition |
| - | - |
| Dialed | Contacts with at least one call in the period |
| Connected | Contacts with at least one answered call: it completed, didn't reach a voicemail or an unavailable number, and had talk time |
| Converted | Contacts that reached a successful end in the period. Campaigns without a sequence count contacts with a call marked successful, or whose goal field is true |
| Conversion rate | Converted divided by Dialed, capped at 100%. Empty while nothing was dialed |
| Messages sent | Messages that message steps sent in the period: SMS, RCS, WhatsApp and email. Messages that couldn't be sent aren't counted |

Below the figures, you find:

* **Talk time and cost:** total talk time in minutes and the cost of the campaign's calls in the period, as an amount of money in your workspace currency (not in credits).
* **Outcome mix:** a flow from the enrolled contacts through the outcomes of each step, up to four steps. Later steps are combined as "More". Message steps add **Sent**, **Replied** and **Not sent**. Contacts without an outcome yet appear as in progress, waiting or not reached. A contact whose message is sent and waits for a reply is waiting. A table view shows the same numbers. Campaigns without a sequence show their contact statuses instead.
* **Activity over time:** calls, answered calls and converted contacts per day, in the campaign's time zone.

Filter by **All time**, **7 days**, **30 days** or **90 days**, and by caller number. With a caller number filter, only contacts called from that number are counted. **Messages sent** is the exception: messages have no caller number, so this figure always counts the whole campaign.

## Plan availability

Sequences and number pools need a plan that includes **Campaign sequences**. A sequence that starts with a message step also needs **multi-channel campaigns**. If your plan lacks one of them, ask your provider. Analytics is available for every campaign.

## API, MCP and CLI

Every action above is available outside the web app:

| Action | REST operation | MCP tool | CLI command |
| - | - | - | - |
| Launch or schedule | `launchCampaign` | `launch_campaign` | `famulor launch-campaign` |
| Pause | `pauseCampaign` | `pause_campaign` | `famulor pause-campaign` |
| Resume | `resumeCampaign` | `resume_campaign` | `famulor resume-campaign` |
| Cancel schedule | `cancelCampaignSchedule` | `cancel_campaign_schedule` | `famulor cancel-campaign-schedule` |
| Duplicate | `duplicateCampaign` | `duplicate_campaign` | `famulor duplicate-campaign` |
| Analytics | `getCampaignAnalytics` | `get_campaign_analytics` | `famulor get-campaign-analytics` |
| Edit | `updateCampaign` | `update_campaign` | `famulor update-campaign` |
| Contacts per step | `getCampaignStats` | `get_campaign_stats` | `famulor get-campaign-stats` |

The confirmation is part of the request. `compliance_attestation: true` is required to launch. The start operation accepts the same option, so a sequence campaign that has not been launched can also be started with it. Without the confirmation, the API answers `attestation_required` on launch and `launch_required` on start.

```bash theme={null}
famulor launch-campaign CAMPAIGN_ID --compliance-attestation true
```

To make sure the sequence you reviewed is the one that launches, you can send `sequence_hash`. Read it unchanged from `GET /campaigns/{id}` (field `sequence_hash`) before you launch. If the sequence changed in between, the launch is rejected with `sequence_changed` and nothing starts. The field is optional; leave it out to skip the check, and leave it out for campaigns without a sequence, where `sequence_hash` is empty.

Send `start_at` as an ISO 8601 date at least 5 minutes ahead to schedule, or `null` to start now:

```bash theme={null}
curl -X POST https://app.famulor.io/api/v1/campaigns/CAMPAIGN_ID/launch \
  -H "Authorization: Bearer fam_..." \
  -H "Content-Type: application/json" \
  -d '{"compliance_attestation": true, "start_at": null}'
```

If you use a white-label domain, replace `app.famulor.io` with that domain. Create and update a campaign with `sequence`, `number_pool`, `holidays`, `double_dial` and the contact time zone mode; see the [API reference](https://docs.famulor.io/api-reference/introduction.md).

In `sequence.nodes`, a step without `channel` is a call step. A message step has `channel` set to `sms`, `whatsapp_template` or `email` and a `message` with `config`, `wait_minutes`, `next`, optional `replied` and `failed`. Steps have no position: the flow draws itself, and a `position` in a request is ignored. The analytics response carries `kpis.messages_sent`.

```json theme={null}
{
  "id": "sms_reminder",
  "name": "SMS reminder",
  "channel": "sms",
  "message": {
    "config": { "from_number_id": "NUMBER_ID", "message": "Hi {{name}}, we tried to reach you." },
    "wait_minutes": 1440,
    "next": { "type": "end", "successful": false },
    "replied": { "type": "end", "successful": true },
    "failed": { "type": "end", "successful": false }
  }
}
```

An `sms` step names exactly one sender in `config`: `from_number_id` (a workspace number) or `rcs_sender_id` (a company name, RCS). Both together, or neither, is a 400 error. The same rule applies to an SMS campaign and to the SMS follow-up of a classic campaign.

```json theme={null}
{ "rcs_sender_id": "SENDER_ID", "message": "Hi {{name}}, we tried to reach you." }
```

### Edit a paused campaign through the API

Send the new `sequence` with `PATCH /campaigns/{id}`. Read `sequence_step_contacts` from `getCampaignStats` first: it lists the unfinished contacts (waiting, queued or in a call) per step id, and a step with contacts has to stay in the sequence.

```json theme={null}
{ "campaign_id": "CAMPAIGN_ID", "sequence_step_contacts": { "first_call": 18, "sms_reminder": 7 } }
```

The change fails with 409 when it can't apply:

| Answer | Cause |
| - | - |
| `Pause the campaign to edit the sequence.` | The campaign is running |
| `Cancel the schedule before changing the sequence.` | The campaign is scheduled |
| `Duplicate the campaign to change the sequence.` | The campaign is completed, a started campaign would gain or lose its sequence, or the number pool mode would change |
| `Step "<name>" still has <n> contacts. Keep the step, or wait until they have moved on.` | The new sequence removes a step with waiting contacts or changes its type |
| `The campaign changed while it was saved. Reload it and try again.` | The status changed between your read and your write, for example through a resume. Read the campaign again and retry |

Give a step you add to a started campaign an id that was never used in it, so its history is never mixed with a removed step. The builder does this for you. Because the change clears the launch confirmation, resume with it:

```bash theme={null}
famulor resume-campaign CAMPAIGN_ID --compliance-attestation true
```

See also [Campaigns & leads](https://docs.famulor.io/campaigns/overview.md), [Dialer, retries & compliance](https://docs.famulor.io/campaigns/dialer-and-compliance.md) and the [Outbound playbook](https://docs.famulor.io/campaigns/outbound-playbook.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.