curl --request POST \
--url https://prod-api.ringg.ai/ca/api/v0/campaign/make-call-async \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"agent_id": "00000000-0000-4000-8000-0000000000a1",
"country_code": "+91",
"campaign_start_time": "18/10/2026, 09:00",
"campaign_end_time": "18/10/2026, 18:00",
"number_pool_id": "00000000-0000-4000-8000-0000000000b1",
"call_config": {
"call_time": {
"call_start_time": "09:00",
"call_end_time": "18:00",
"timezone": "Asia/Kolkata"
},
"call_retry_config": {
"retry_count": 1,
"retry_busy": 30,
"retry_not_picked": 30,
"retry_failed": 30
}
}
}
'{
"message": "Campaign calls scheduled",
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "scheduled"
}{
"message": "Bulk list is not ready to start."
}{
"message": "Invalid credentials"
}{
"message": "Insufficient balance to start this campaign. Please top up and use /check-balance to re-verify."
}{
"message": "Provide exactly one of from_numbers / number_pool_id, not both"
}Make large campaign calls async (Beta)
Schedule the calls of a validated large campaign: set the campaign window, calling hours, retries and caller numbers or a number pool for the bulk_list_id.
curl --request POST \
--url https://prod-api.ringg.ai/ca/api/v0/campaign/make-call-async \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"agent_id": "00000000-0000-4000-8000-0000000000a1",
"country_code": "+91",
"campaign_start_time": "18/10/2026, 09:00",
"campaign_end_time": "18/10/2026, 18:00",
"number_pool_id": "00000000-0000-4000-8000-0000000000b1",
"call_config": {
"call_time": {
"call_start_time": "09:00",
"call_end_time": "18:00",
"timezone": "Asia/Kolkata"
},
"call_retry_config": {
"retry_count": 1,
"retry_busy": 30,
"retry_not_picked": 30,
"retry_failed": 30
}
}
}
'{
"message": "Campaign calls scheduled",
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "scheduled"
}{
"message": "Bulk list is not ready to start."
}{
"message": "Invalid credentials"
}{
"message": "Insufficient balance to start this campaign. Please top up and use /check-balance to re-verify."
}{
"message": "Provide exactly one of from_numbers / number_pool_id, not both"
}draft.
Fields
country_code must be the same dialling code as the upload. Send exactly one of from_numbers or number_pool_id: both, or neither, returns 422. from_numbers takes workspace number IDs from List workspace numbers; a number that is not in the workspace makes the campaign failed after launch. campaign_start_time and campaign_end_time (DD/MM/YYYY, HH:MM) are required unless call_slots is sent, and go together. email_completion_user_ids are workspace user IDs from List workspace users, emailed when the campaign completes.
call_config has two parts:
call_time:call_start_timeandcall_end_time(HH:MM, defaults09:00and21:00) andtimezone(defaultAsia/Kolkata) set the daily calling hours. They replace the agent’s calling window for this campaign.scheduled_at(ISO 8601, in that timezone) schedules the start.call_retry_config:retry_count(default0, so leaving the block out means no retries) and the wait in minutes before retrying a busy (retry_busy), unanswered (retry_not_picked) or failed (retry_failed) call, each defaulting to30.
curl --request POST "https://prod-api.ringg.ai/ca/api/v0/campaign/make-call-async" \
--header "X-API-KEY: $RINGG_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"agent_id": "your-agent-id",
"country_code": "+91",
"campaign_start_time": "18/10/2026, 09:00",
"campaign_end_time": "18/10/2026, 18:00",
"number_pool_id": "your-number-pool-id",
"call_config": {
"call_time": { "call_start_time": "09:00", "call_end_time": "18:00", "timezone": "Asia/Kolkata" },
"call_retry_config": { "retry_count": 1, "retry_busy": 30, "retry_not_picked": 30, "retry_failed": 30 }
}
}'
Calling slots
call_slots limits dialling to exact windows, in call_time.timezone. Without campaign_start_time and campaign_end_time, the campaign runs from the first slot’s start to the last slot’s end.
absolute: datedintervals, each{"start": "DD/MM/YYYY, HH:MM", "end": "DD/MM/YYYY, HH:MM"}, up to 500.weekly:windowsofdays(montosun) withstartandend(HH:MM), up to 21, repeated untiluntil(DD/MM/YYYY, HH:MM), at most 90 days ahead.
call_time window; the last one must end at least 5 minutes from now. Mixing the two modes returns 422.
{
"call_slots": {
"mode": "weekly",
"until": "31/10/2026, 18:00",
"windows": [{ "days": ["mon", "wed", "fri"], "start": "10:00", "end": "13:00" }]
}
}
concurrency_percentage (0–100) is this campaign’s share of the workspace’s concurrent calls while several campaigns are ongoing; campaigns at 0 share what is left equally.
Response
{
"message": "Campaign calls scheduled",
"bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "scheduled"
}
402 means the balance does not cover the campaign: it moves to insufficient_balance. Add balance, run Check large campaign balance, then send this request again with the same bulk_list_id.
Send each bulk_list_id once. Follow progress with Get all campaigns and the calls with call history filtered by the same bulk_list_id.
Authorizations
Headers
(Required) Your Ringg AI API key.
"rg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Body
Send exactly one of from_numbers or number_pool_id; both or neither returns 422. campaign_start_time and campaign_end_time are required unless call_slots is sent, and must be sent together.
Draft bulk list ID returned by /campaign/upload-csv.
"123e4567-e89b-12d3-a456-426614174000"
Agent ID used during upload.
"00000000-0000-4000-8000-0000000000a1"
Phone number country code.
"+91"
Show child attributes
Show child attributes
Campaign start time, DD/MM/YYYY, HH:MM, in call_config.call_time.timezone. Required unless call_slots is sent; send it with campaign_end_time.
"18/10/2026, 09:00"
Campaign end time, DD/MM/YYYY, HH:MM. Required unless call_slots is sent; send it with campaign_start_time.
"18/10/2026, 18:00"
Caller numbers, as workspace number IDs from List workspace numbers (recommended) or as numbers written exactly as listed there. Send exactly one of from_numbers or number_pool_id. A number that is not in the workspace makes the campaign failed after launch.
Number pool ID. Ringg picks caller numbers from the pool, rotating numbers and skipping ones flagged as spam. Send exactly one of from_numbers or number_pool_id.
"00000000-0000-4000-8000-0000000000b1"
This campaign's share, in percent, of the workspace's concurrent calls while several campaigns are ongoing. Campaigns at 0 share what is left equally.
0 <= x <= 10025
(Optional) Exact windows the campaign may dial in, in call_config.call_time.timezone. absolute lists dated intervals (DD/MM/YYYY, HH:MM); weekly repeats day-of-week windows (HH:MM). Each slot is 1 minute to 24 hours, not in the past, and inside the daily call_time window; the last must end at least 5 minutes from now. Without campaign_start_time/campaign_end_time, the campaign runs from the first slot's start to the last slot's end.
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?