Call campaigns

Outbound calling campaigns at scale

Upload a list, set the objective, and let AI agents call, qualify and report back — hundreds of calls in parallel.

Scale instantly

Hundreds of simultaneous calls with no team to hire or train.

AI-driven objective

Surveys, reminders, lead qualification, follow-ups: you set the goal, the agent adapts.

Structured results

Every call returns a summary and actionable data, pushed to your CRM.

How it works

1

Import your contacts

Upload a list or sync your CRM.

2

Set the objective

Describe what the agent should achieve on each call.

3

Launch and track

The campaign runs; follow results in real time.

# A campaign is one AI call per contact — loop in your stack.
curl -X POST https://api.phonevoice.ai/api/v1/calls/initiate \
  -H "Authorization: Bearer $PHONEVOICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient_phone_number": "+33612345678",
    "agent_id": 1533,
    "objective": "Confirm the appointment"
  }'
const contacts = ["+33611111111", "+33622222222", "+33633333333"];
for (const recipient_phone_number of contacts) {
  await fetch("https://api.phonevoice.ai/api/v1/calls/initiate", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.PHONEVOICE_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ recipient_phone_number, agent_id: 1533, objective: "Confirm the appointment" }),
  });
}
import os, requests

contacts = ["+33611111111", "+33622222222", "+33633333333"]
for number in contacts:
    requests.post(
        "https://api.phonevoice.ai/api/v1/calls/initiate",
        headers={"Authorization": f"Bearer {os.environ['PHONEVOICE_API_KEY']}"},
        json={"recipient_phone_number": number, "agent_id": 1533, "objective": "Confirm the appointment"},
    )
require "net/http"
require "json"

contacts = ["+33611111111", "+33622222222", "+33633333333"]
uri = URI("https://api.phonevoice.ai/api/v1/calls/initiate")
contacts.each do |number|
  req = Net::HTTP::Post.new(uri)
  req["Authorization"] = "Bearer #{ENV['PHONEVOICE_API_KEY']}"
  req["Content-Type"] = "application/json"
  req.body = { recipient_phone_number: number, agent_id: 1533, objective: "Confirm the appointment" }.to_json
  Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
end

Ready to give your apps a voice?

Create your developer account and place your first call in minutes.