Flow: create → add records → start. Start runs a dry run first and refuses with 422 dry_run_failed (the checks are in error.details.checks) if anything is wrong. Then pause, resume, cancel.

AI agent campaigns

POST /v1/campaigns
The agent’s required variables (GET /v1/campaign-agents/{agentId}) must be in every record.

Pre-recorded message campaigns

No agent. Each record hears the message with its own values.
POST /v1/campaigns
  • {name} placeholders are required variables of each record.
  • Write the message in the language’s script; write values as spoken (5th November, not 05/11). Max 500 characters with values.
  • Records with the same text share one recording (made at the first call, then reused; listed in the portal under Broadcasts → Audio files).
  • Outcomes: played (default goal), partial, voicemail (retried like no answer), invalid.

Records

POST /v1/campaigns/{campaignId}/records
CSV campaigns: upload the file instead (multipart/form-data, field file). Up to 5000 records per request.
  • Payments: POST /v1/customer-events (type: "payment") closes the record.
  • Do-not-call: numbers on /v1/dnc are never called.
  • An api campaign stays running until its end date (records can keep arriving). A csv campaign completes when every record is done.
Webhooks: campaign.started, campaign.paused, campaign.resumed, campaign.completed, campaign.canceled, campaign.record.updated.