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

# Create an outbound calling campaign

> Set up a campaign name, AI assistant, outbound numbers, contact list, schedule, and call window — then launch or save as a draft.

Creating a campaign takes a few minutes. You choose which AI assistant makes the calls, which phone numbers to rotate through, which contacts to dial, and when calls are allowed. You can launch immediately or save as a draft and start manually later.

<Steps>
  <Step title="Open the Campaigns page">
    In the left sidebar, click **Campaigns**. Then click **New Campaign** in the top-right corner. A dialog opens where you fill in all campaign settings.
  </Step>

  <Step title="Set a campaign name">
    Enter a descriptive name in the **Campaign Name** field. The name appears in the campaign list and in your dashboard, so make it easy to identify (for example, "Q2 Enterprise Outreach" or "Trial Expiry Follow-Up").

    You can optionally add a **Description** for internal reference.
  </Step>

  <Step title="Select an outbound assistant">
    Choose an assistant from the **Outbound Assistant** dropdown. Only assistants that have outbound calling enabled and at least one active phone number assigned appear here.

    <Note>
      If the list is empty, go to **Assistants → \[your assistant] → Telephony**, enable outbound calling, and assign an active phone number.
    </Note>
  </Step>

  <Step title="Choose outbound numbers">
    After selecting an assistant, all phone numbers assigned to that assistant appear as checkboxes under **Which numbers do you want to use for outbound calling?**

    All assigned numbers are pre-selected. Talkturo rotates through every selected number during the campaign. Uncheck any numbers you want to exclude.
  </Step>

  <Step title="Select a company and contacts">
    Campaigns target contacts that belong to a **Company** in your CRM. Select the company from the dropdown.

    Once you select a company, the **Audience** section appears. You have two ways to build your contact list:

    **All eligible contacts** — Talkturo automatically includes every contact in the company that has a phone number and is not marked Do Not Call (DNC). As you add new contacts to the company later, they are included if you're using an evergreen campaign.

    **Manual select** — Browse and filter contacts in the company, then check exactly which ones to include. Use the **Search**, **Lead Status**, and filter options to narrow the list. Click **Select all eligible** to auto-select all callable contacts across all pages, or check contacts individually.

    <Tip>
      Check **Has phone** and **Exclude DNC** (both on by default) to avoid adding unreachable contacts. Contacts without a phone number or with DNC enabled are ineligible and cannot be selected.
    </Tip>
  </Step>

  <Step title="Configure the schedule">
    **Schedule Start (optional)** — Set a date and time for the campaign to start automatically. The time is interpreted in the call window timezone you set below. Leave this field empty to save the campaign as a draft and start it manually.

    **Keep open for new contacts** — Check this box if you plan to add contacts to the campaign continuously via the API after it launches. When checked, the campaign won't automatically move to Completed status once the initial contact list is processed.
  </Step>

  <Step title="Set the call window">
    The call window defines the daily time range during which Talkturo is allowed to place calls.

    | Field                    | Default           | Description                            |
    | ------------------------ | ----------------- | -------------------------------------- |
    | **Call Window Start**    | 09:00             | Earliest time calls can begin each day |
    | **Call Window End**      | 17:00             | Latest time calls can begin each day   |
    | **Call Window Timezone** | America/New\_York | Reference timezone for the window      |

    Calls that would start outside this window are held until the window opens again the next day.
  </Step>

  <Step title="Set concurrent calls and retry attempts">
    | Field                    | Default | Description                                                          |
    | ------------------------ | ------- | -------------------------------------------------------------------- |
    | **Max Concurrent Calls** | 1       | Maximum number of calls dialing at the same time (1–10)              |
    | **Max Attempts/Contact** | 3       | Maximum total dial attempts per contact before marking them complete |

    For retry delays and per-outcome retry settings, see [Schedule and manage campaign timing](/en/campaigns/scheduling).
  </Step>

  <Step title="Launch the campaign">
    Click **Create Campaign**. If you set a scheduled start time, the campaign status becomes **Scheduled** and starts automatically at that time. If you left the schedule empty, the status becomes **Draft** — click the play icon in the campaign list to start it manually.
  </Step>
</Steps>

## Required fields

The following fields are required when creating a campaign through the UI or the API:

| Field           | Description                                 |
| --------------- | ------------------------------------------- |
| `name`          | Human-readable campaign name                |
| `assistantId`   | ID of the outbound-enabled assistant        |
| `companyId`     | ID of the company whose contacts to dial    |
| `fromNumberIds` | Array of phone number IDs to rotate through |

## API: create a campaign

You can also create campaigns programmatically. Send a `POST` request to `/api/crm/campaigns` with a JSON body. After creating the campaign, add contacts in a second request to `/api/crm/campaigns/{id}/contacts`.

```json theme={null}
POST /api/crm/campaigns
Content-Type: application/json
Authorization: Bearer <your-token>

{
  "teamId": "your-team-id",
  "name": "Q2 Enterprise Outreach",
  "assistantId": "asst_abc123",
  "companyId": "cmp_xyz456",
  "fromNumberIds": ["num_111", "num_222"],
  "description": "Follow-up calls for enterprise trial accounts",
  "scheduledStartAt": "2026-06-01T09:00:00Z",
  "callWindowStart": "09:00",
  "callWindowEnd": "17:00",
  "callWindowTimezone": "America/New_York",
  "maxConcurrentCalls": 3,
  "maxAttemptsPerContact": 3,
  "retryDelayMinutes": 60
}
```

A successful response returns `{ "success": true, "campaign": { ... } }` with the full campaign object including its `id`. Use that `id` to add contacts:

```json theme={null}
POST /api/crm/campaigns/{id}/contacts
Content-Type: application/json
Authorization: Bearer <your-token>

{
  "contactIds": ["cnt_aaa", "cnt_bbb", "cnt_ccc"]
}
```

<Tip>
  To add all eligible contacts from a company automatically, use the `audience` parameter instead of `contactIds`:

  ```json theme={null}
  {
    "audience": {
      "mode": "all_eligible",
      "companyId": "cmp_xyz456",
      "hasPhoneOnly": true,
      "excludeDnc": true
    }
  }
  ```
</Tip>
