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

# Creating Your First Campaign

> Step-by-step to launch a batch calling campaign

# Creating Your First Campaign

This guide walks you through creating a batch campaign that places outbound calls according to a schedule.

We’ll focus on a clean, reliable API workflow. (The dashboard workflow is covered separately in the UI.)

## Who this is for

* Teams launching outbound campaigns for the first time.
* Developers who want a safe, repeatable “draft → schedule → monitor” process.

## What you need before you start

* An **agent** (with a voice and system prompt)
* At least one **assigned outbound number** for that agent
* Contacts ready in a folder (recommended) or a small inline list

If you need to prepare contacts first:

* [Preparing Contacts](/guides/preparing-contacts)

## Step 1: Create a campaign draft

Create a batch call in `draft` status, with your contact source attached.

Example: scheduled campaign using a contact folder:

```bash theme={null}
curl -X POST "https://api.truedy.ai/api/public/v1/batch-calls" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: 77777777-8888-9999-aaaa-bbbbbbbbbbbb" \
  -d '{
    "name": "First Campaign - Demo",
    "agent_id": "1f4baf16-1540-4d91-9696-7f34b2f2cb77",
    "contact_source": "folder",
    "contact_folder_id": "6f4af8be-0a96-49b0-ac2a-a359f46cc966",
    "schedule_type": "scheduled",
    "scheduled_at": "2026-03-20T14:30:00Z",
    "timezone": "America/New_York",
    "start_time": "10:00",
    "end_time": "17:00",
    "working_days": [1,2,3,4,5],
    "max_concurrent_calls": 10,
    "max_calls_per_day": 200
  }'
```

Response gives you at least:

* `id` (campaign ID)
* `status`
* `total_contacts` (or similar meta)

## Step 2: Schedule (if needed)

If you created as `draft` or your workflow requires an explicit schedule action:

```bash theme={null}
curl -X POST "https://api.truedy.ai/api/public/v1/batch-calls/CAMPAIGN_ID/schedule" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Docs:

* [Schedule Batch Call](/api-reference/batch-calls#schedule-batch-call)

## Step 3: Monitor progress

Use:

* analytics summary:
  * [`GET /batch-calls/{batch_call_id}/analytics`](/api-reference/batch-calls#get-batch-call-analytics)
* campaign contacts list:
  * [`GET /batch-calls/{batch_call_id}/contacts`](/api-reference/batch-calls#list-batch-call-contacts)

### Example: check analytics

```bash theme={null}
curl "https://api.truedy.ai/api/public/v1/batch-calls/CAMPAIGN_ID/analytics" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Example: see what’s still scheduled

```bash theme={null}
curl "https://api.truedy.ai/api/public/v1/batch-calls/CAMPAIGN_ID/contacts?status=scheduled&limit=50&offset=0" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Step 4: Operational controls (pause/resume)

When you need to stop future scheduled calls:

* Pause: `/batch-calls/{id}/pause`
* Resume: `/batch-calls/{id}/resume`

Docs:

* [Pause Batch Call](/api-reference/batch-calls#pause-batch-call)
* [Resume Batch Call](/api-reference/batch-calls#resume-batch-call)

See operational semantics:

* [Pause, Resume, and Edit Campaigns](/guides/pause-resume-edit-campaigns)

## Next steps

* Understand schedule fields in depth: [Scheduling & Delivery Logic](/guides/scheduling-and-delivery-logic)
* Read results: [Campaign Analytics & Reporting](/guides/campaign-analytics-and-reporting)
