On-demand calling is for voice campaigns. On a chat or email campaign the tab reads “On-demand calls are for voice campaigns”.
Before You Start
1
Create an API key
Go to Manage → Advanced → API Keys and create a key. The key is shown once — copy it then. See API Keys.
2
Set up a voice campaign
The campaign needs an AI agent assigned and an outbound number pool holding at least one active number, both on its Setup tab. See Campaign Setup.
3
Copy the campaign ID
Open Studio → Manage → Campaigns → your campaign → On-Demand Calls. The campaign ID is at the top with a copy button — that ID goes in the request path.
The On-Demand Calls Tab
Every campaign has an On-Demand Calls tab, at Studio → Manage → Campaigns → your campaign. It holds:- The campaign ID, with a copy button.
- API reference — a drawer with your API base URL as its own copyable field, plus ready-to-run curl and JavaScript snippets for all three endpoints, and a Manage API Keys button.
- A status card for the campaign’s on-demand run, once your first call has landed. Before that the tab reads “No on-demand calls yet” — the run is created for you by the first successful request, so there is nothing to set up.
Copy the base URL from the API reference drawer rather than assuming it — it differs between environments, and the drawer always shows the correct one for the Studio you are signed in to.
Place a Call
Request fields
How
scheduled_at is interpreted:
- With an offset or a
Z, it is a self-contained instant and is used as-is. - Without one, it is read in
scheduled_at_timezoneif you supplied that. - Without either, it is read in the timezone derived from the
postcode.
Response
dialing_status is pending for an immediate call and callback_requested for a scheduled one. Keep the request_id — it is the reference you can cancel by, and the only identifier you hold if you did not store contact_id.
Cancel a Call
A call can be cancelled any time before it is dialed. Either identifier works:already_cancelled telling you which of the two things happened:
already_cancelled: true. Only a contact still at pending or callback_requested can actually be cancelled; once dialing has begun there is nothing to stop.
Responses and Errors
Things to Design Around
There is no idempotency key
There is no idempotency key
A retried
POST places a second real call. Repeat submissions of the same phone number are accepted deliberately — each one is its own attempt with its own request_id — so de-duplicate on your side, and store the request_id you get back.48 hours is a hard ceiling
48 hours is a hard ceiling
Anything further out is rejected with a
400. There is no long-horizon scheduler behind this endpoint. To call someone next week, hold the request in your own system until it is inside the window.On-demand calls take concurrency first
On-demand calls take concurrency first
A campaign’s on-demand run can be dialing at the same time as a CSV run, and the on-demand run has first claim on the campaign’s
max_concurrent_calls budget. While on-demand traffic is flowing, the CSV run visibly dials fewer calls per tick — and nothing in the Studio explains the slowdown. Raise the campaign’s concurrency if both need to run hard at once.The on-demand run always uses current settings
The on-demand run always uses current settings
A CSV run is frozen at launch: it keeps immutable snapshots of the settings, schedule, agent and number pool. The on-demand run is not. It re-reads the campaign’s dialing settings, schedule, number pool and agent on every request, which is why its cards are labelled “current” rather than “snapshot”. Editing the campaign therefore re-points on-demand calling immediately, with no relaunch — convenient, but easy to do by accident.
There is no status read-back
There is no status read-back
The response is fire-and-forget. There is no key-authenticated way to ask how a call went — outcomes live in the Studio, on the On-Demand activity list and in Call History.
Compliance Still Applies
Placing a call through the API skips the CSV pool, not the rules. Every compliance gate is evaluated again at dial time, exactly as it is for a CSV run:- Legal calling hours for the contact’s resolved timezone, and TCPA restrictions — see Scheduling.
- Prior express written consent, and voice opt-out.
- DNC and reassigned-number scrubbing, with its per-dial charge — see Compliance & DNC.
- Frequency caps.
Where On-Demand Activity Shows Up
This keeps your CSV run reporting comparable across launches. When you need the on-demand picture, go to the tab.
Where to go next
API Keys
Create and revoke the keys this API authenticates with.
Campaign Setup
Assign the agent, number pool and dialing settings on-demand calls will use.