Skip to main content
POST
The campaign supplies the agent, the caller ID, the calling hours and the compliance rules. Set the campaign up first, as described in On-Demand Calls. You don’t need to launch it.
A call is only placed when has_pewc is true, with a pewc_date. Without consent the request still returns 202, but the contact shows as Blocked in On-Demand activity and is never dialed. Send has_pewc: true only for contacts who have given you prior express written consent.
  • A 202 is not a call. Calling hours, consent, opt-out, Do Not Call scrubbing and frequency caps are checked when the call is due. See Compliance Still Applies.
  • Don’t retry blindly. There is no idempotency key: each request is a new attempt with its own request_id, even for the same phone number, so a retry places a second call.
  • Store the request_id. It is how you cancel the call if you didn’t keep the contact_id.
  • Results stay in Studio. No endpoint returns how a call went. Outcomes are on the campaign’s On-Demand tab and in Call History.

Authorizations

X-API-Key
string
header
required

An API key from Manage → API Keys in Studio. See Authentication.

Path Parameters

campaignId
string<uuid>
required

The campaign's ID, copied from its On-Demand tab in Studio.

Body

application/json
phone
string
required

The number to call, in E.164 format: +, the country code and the number, with no spaces, dashes or brackets.

Pattern: ^\+[1-9]\d{1,14}$
Example:

"+15551234567"

postcode
string
required

The contact's postcode. It sets the contact's timezone, which decides the legal calling hours. A number is also accepted, but send a string: JSON drops a leading zero.

Example:

"94107"

country
string
default:US

ISO 3166-1 alpha-2 country code, used with postcode to find the timezone.

Example:

"US"

has_pewc
boolean
default:false

Whether the contact has given prior express written consent. A call is only placed when this is true. Without it, the request still returns 202, but the contact is blocked and never dialed.

pewc_date
string

When consent was given. Required when has_pewc is true. Accepts 2026-01-04, 1/4/2026, 01/04/2026 or Jan 4 2026.

Example:

"2026-01-04"

is_voice_call_opted_out
boolean
default:false

Whether the contact has opted out of voice calls. When true, the request returns 202 but the contact is blocked and never dialed.

scheduled_at
string

When to call, as ISO 8601, no more than 48 hours from now. Leave it out to call as soon as the campaign's calling hours allow. With an offset or Z it is an exact time. Without one, it is read in scheduled_at_timezone, or in the postcode's timezone if that is missing too.

Example:

"2026-11-03T15:30:00-06:00"

scheduled_at_timezone
string

IANA timezone name used to read a scheduled_at that has no offset.

Example:

"America/Chicago"

custom_fields
object

Values for the campaign's custom fields. Every key must already be set up on the campaign; a campaign with no custom fields refuses any. Up to 50 keys and 16 KB.

Example:

Response

The contact was accepted and queued for dialing.

success
boolean
required
data
object
required