Skip to main content
POST
Create Campaign

Create Campaign

Create a new outbound calling campaign by uploading a CSV file with contacts and configuring campaign parameters. This is a multipart/form-data endpoint - send the CSV file and all configuration fields together in a single request.

Request Parameters

file
required
CSV file with contact data. Required columns: name, phone_number
string
required
Human-readable name for the campaign (max 255 characters)
string
required
UUID of the agent that will handle calls
integer
required
Simultaneous calls (≥ 1, ≤ organization max)
string
required
Campaign start date - YYYY-MM-DD
string
required
Campaign end date - YYYY-MM-DD (≥ from_date)
string
required
Daily call window open - UTC HH:MM 24-hour format (e.g. 02:30)
string
required
Daily call window close - UTC HH:MM 24-hour format (e.g. 14:00)
string
required
Comma-separated weekdays, e.g. monday,tuesday,friday
boolean
default:"false"
Run DND check on contacts before dialing
integer
default:"3"
Max dial attempts per contact (1–10)
integer
default:"30"
Minutes between retry attempts (0–1440)
string
Comma-separated email addresses for completion notifications (max 5)
string
HTTP/HTTPS URL to receive campaign status-change events
string
HTTP/HTTPS URL to receive per-call post-processing events

Time Window Reference

All times must be in 24-hour HH:MM format in UTC only.
TRAI compliance window is 08:00–19:59 IST. Submit the UTC equivalent.
To convert: IST − 5:30 = UTC (e.g. 13:00 IST = 07:30 UTC)

Example Request


Response 200 OK

The campaign is created with status populating while the contact file is being imported. It then moves to active (start date reached, inside calling hours), scheduled (start date in the future), paused_out_of_range (start date reached but outside calling hours) or failed (the file could not be imported). Poll Get Campaign Status to see the transition.

CSV File Requirements

Required Columns

Optional Columns

Any extra columns are treated as dynamic variables passed to the agent. Column names must exactly match (case-sensitive) the variable names configured on the agent.

File Limits

Phone Number Formats Accepted

  • +91XXXXXXXXXX (E.164 with country code)
  • 91XXXXXXXXXX (country code without +)
  • 0XXXXXXXXXX (leading zero, Indian trunk prefix)
  • XXXXXXXXXX (bare 10-digit number)

Error Responses

number
HTTP status code
string
Error name
string
Human-readable error message
string
Request path
string
When the error occurred
string
Request id, quote it when contacting support
string
Machine-readable error code, present when the failing check defines one (see the table below). Errors from the Vaani backend (for example campaign not found, insufficient balance) may carry their own code. Range errors that FastAPI rejects before the handler runs (422) have no code; read message.

Common Validation Errors

Example Error Response

Example Validation Error (422)