Skip to main content
A campaign calls a list of contacts with one agent. RevRing dials inside the calling window you set, in each contact’s own time zone when you provide one, retries the outcomes you choose (no answer, busy, voicemail, declined, failed), paces new calls so your carrier is not overwhelmed, never dials numbers on your do-not-call list, and gives you a CSV of every contact with the result of their last call.

Create and start a campaign

Each contact’s variables are passed to the call exactly like variables on Send Call, merged over the campaign’s defaultVariables. Use them in the prompt and opening line as {{first_name}}. Without "start": true the campaign is created as a draft; start it with POST /campaigns/{id}/start. Set startAt to hold dialing until a later time. Campaign calls share your organization’s concurrency with everything else. Calls you place with Send Call that are waiting in the queue go first.

Outcomes and retries

When a call ends, the contact gets an outcome: With voicemailStrategy: "last_attempt", voicemail is always retried until the last attempt, which leaves the agent’s voicemail message once. If the outcome is in retryOn and the contact has attempts left, it waits retryDelayMinutes and is called again, still only inside the calling window. Otherwise the contact is completed (answered, voicemail, or an outcome you don’t retry) or exhausted (retries used up).

Follow progress

GET /campaigns/{id} returns progress: the number of contacts in each status and each outcome. GET /campaigns/{id}/contacts lists contacts with status, outcome, attempts, nextAttemptAt and lastCallId; filter with status or outcome. Every call a campaign places carries campaignId on the call record and in the post-call webhook, so your existing handler can tell campaign calls apart. The campaign completes on its own when every contact is settled.

Export results

GET /campaigns/{id}/export returns a CSV with one row per contact: number, status, outcome, attempts, the last call’s ID, status, duration, summary and recording, every contact variable (var.*), every extraction field (extraction.*) and every evaluation result (evaluation.*).

Pause, resume, cancel

  • POST /campaigns/{id}/pause stops new dials. Calls in progress finish and their outcomes are recorded.
  • POST /campaigns/{id}/start resumes.
  • POST /campaigns/{id}/cancel stops the campaign for good. Contacts not yet called become canceled.
Contacts can be added to a draft, running or paused campaign with POST /campaigns/{id}/contacts (up to 10,000 per request; numbers already in the campaign are skipped).

Do-not-call list

Numbers on your organization’s do-not-call list are never dialed by a campaign. They are marked skipped with outcome do_not_call.
List entries with GET /do-not-call and remove one with DELETE /do-not-call/{e164}.