---
title: "Create an outbound campaign"
method: POST
path: "/v1/voice-agents/campaigns"
---

# Create an outbound campaign

`POST /v1/voice-agents/campaigns`

Creates a new outbound campaign with specified recipients, voice agent, and scheduling configuration.

## Request body

- CreateCampaignRequest
  - `name` string, required — Campaign name (1-100 characters).
  - `phoneNumber` string, required — Phone number to use for the campaign in E.164 format.
  - `voiceAgentId` string, uuid, required — Voice agent ID to use for the campaign.
  - `recipients` object[], required — List of recipients for the campaign (minimum 1 recipient).
    - `phoneNumber` string, required — Recipient phone number.
    - `ignoreE164Validation` boolean — Whether to skip E.164 format validation for this recipient.
    - `name` string, nullable — Recipient name (optional).
  - `sendType` 'NOW' | 'SCHEDULED', required — When to send the campaign. Use 'NOW' for immediate sending or 'SCHEDULED' for scheduled sending.
  - `timeRange` object, required — Time range for making calls.
    - `days` string[], required — Days of the week when calls can be made.
    - `startCallingTime` string, required — Start time in HH:MM format (24-hour).
    - `endCallingTime` string, required — End time in HH:MM format (24-hour). Must be after startCallingTime.
  - `scheduledDate` string, date-time — Scheduled date/time in ISO 8601 format (required when sendType is SCHEDULED).
  - `scheduledTimezone` string — Timezone for scheduled campaign (required when sendType is SCHEDULED).
  - `reservedConcurrency` integer — Number of concurrent calls reserved for this campaign (must be positive). Defaults to 1 when omitted.

## Response `200`

Successful response

- CreateCampaignResponse
  - `success` boolean
  - `message` string
  - `messageKey` string
  - `data` object
    - `id` string, uuid
    - `name` string
    - `status` 'SCHEDULED' | 'RUNNING' | 'PAUSED' | 'COMPLETED' | 'CANCELLED'
    - `sendType` 'NOW' | 'SCHEDULED'
    - `scheduledDate` string, date-time, nullable
    - `scheduledTimezone` string, nullable
    - `timeRange` object, nullable
      - `days` string[]
      - `startCallingTime` string
      - `endCallingTime` string
    - `reservedConcurrency` integer
    - `webhookUrl` string, nullable
    - `projectId` string, uuid
    - `userId` string, uuid
    - `voiceAgentId` string, uuid
    - `phoneNumberId` string, uuid
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400` — Validation/Bad request error response
- `401` — Unauthorized
- `404` — Resource not found (voice agent or phone number)
- `500` — Server Side Error

---

[API](https://skmtc.net/tryhamsa/apis/hamsa-api.md) · [All operations](https://skmtc.net/tryhamsa/apis/hamsa-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryhamsa/hamsa-api/versions/ecbeb5d8dc13/schema)
