Outreach
Campaigns
Read outbound calling campaigns and their progress.
A campaign has one agent call a list of contacts from one phone number. The API is read-only for campaigns, so you create and launch them in the dashboard. Use these endpoints to report on status and call counts.
| Endpoint | Request |
|---|---|
| List campaigns | GET/v1/campaigns |
| Get a campaign | GET/v1/campaigns/{id} |
The campaign object
Most campaign fields use snake_case. phoneNumber and assistantName are in camelCase.
Attributes
idstringrequiredThe campaign's UUID.
namestringrequiredThe campaign's name.
statusstringrequiredScheduled, Live, Completed, Cancelled, Failed or Archived. Values are capitalized.assistant_idstringrequiredThe UUID of the agent that makes the calls.
assistantNamestringThat agent's display name. Left out if it can't be found.
phone_number_idstringrequiredThe UUID of the phone number the calls come from.
phoneNumberstringThat phone number's value. Left out if the number can't be found.
audience_idstring | nullThe UUID of the audience being called, if the campaign uses one.
contact_countintegerrequiredNumber of contacts in the campaign.
total_callsintegerrequiredTotal calls in the campaign.
ended_callsintegerrequiredCalls that have ended.
picked_up_callsintegerrequiredCalls that were answered.
voicemail_callsintegerrequiredCalls that reached voicemail.
failed_initiationsintegerCalls that couldn't be started.
pickup_ratenumberrequiredStored pickup rate as a decimal, so
0.67 means 67%. It is 0 when no value is stored.click_ratenumberrequiredStored click rate as a decimal. It is
0 when no value is stored.order_ratenumberrequiredStored order rate as a decimal. It is
0 when no value is stored.schedule_typestringrequirednow or later.scheduled_atstring | nullThe scheduled start time, for a
later campaign.timezonestring | nullThe timezone for the schedule.
launched_atstring | nullWhen the campaign started.
completed_atstring | nullWhen the campaign finished.
created_atstringrequiredWhen the campaign was created.
updated_atstringrequiredWhen the campaign last changed.
List campaigns
GET
/v1/campaignsread keyReturns your campaigns, newest first. Archived campaigns are only included when you filter for them.
Query parameters
limitintegerdefault 50Maximum results, from 1 to 100.
offsetintegerdefault 0Number of results to skip, up to 1,000,000.
statusstringOnly return campaigns with this status, in any letter case. See the values below. Any other value returns
400.| Filter value | Matches campaigns with status |
|---|---|
scheduled | Scheduled |
live or running | Live |
completed | Completed |
cancelled or canceled | Cancelled |
failed | Failed |
archived | Archived |
draft or paused | None. These are accepted, but campaigns are never in these states, so the list is empty. |
curl "https://backend.synthesys.app/api/v1/campaigns?limit=10" \
-H "SYNTH_API_KEY: YOUR_API_KEY"{
"success": true,
"data": [
{
"id": "c7e2a9d4-1f3b-4a6c-9e80-2b3c4d5e6f70",
"name": "October renewals",
"status": "Live",
"assistant_id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"phone_number_id": "d4c3b2a1-6f5e-4b7a-9d8c-5c4b3a2f1e0d",
"phoneNumber": "+12025550123",
"audience_id": "8a1d4f2c-3b6e-4c7a-8d90-1e2f3a4b5c6d",
"contact_count": 200,
"total_calls": 200,
"ended_calls": 80,
"picked_up_calls": 52,
"voicemail_calls": 18,
"pickup_rate": 0,
"click_rate": 0,
"order_rate": 0,
"schedule_type": "now",
"scheduled_at": null,
"timezone": null,
"launched_at": "2026-10-01T09:30:00",
"completed_at": null,
"created_at": "2026-10-01T09:25:00",
"updated_at": "2026-10-01T11:00:00"
}
],
"pagination": { "total": 1, "limit": 10, "offset": 0 }
}Get a campaign
GET
/v1/campaigns/{id}read keyReturns one campaign. This route can also return an archived campaign, which the list leaves out.
Path parameters
idstringrequiredThe campaign's UUID.
Returns 404 if the campaign doesn't exist or belongs to another account. An id that isn't a valid UUID returns 400.
curl https://backend.synthesys.app/api/v1/campaigns/c7e2a9d4-1f3b-4a6c-9e80-2b3c4d5e6f70 \
-H "SYNTH_API_KEY: YOUR_API_KEY"{
"success": true,
"data": {
"id": "c7e2a9d4-1f3b-4a6c-9e80-2b3c4d5e6f70",
"name": "October renewals",
"status": "Completed",
"assistant_id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"phone_number_id": "d4c3b2a1-6f5e-4b7a-9d8c-5c4b3a2f1e0d",
"phoneNumber": "+12025550123",
"audience_id": "8a1d4f2c-3b6e-4c7a-8d90-1e2f3a4b5c6d",
"contact_count": 200,
"total_calls": 200,
"ended_calls": 200,
"picked_up_calls": 130,
"voicemail_calls": 44,
"pickup_rate": 0,
"click_rate": 0,
"order_rate": 0,
"schedule_type": "now",
"scheduled_at": null,
"timezone": null,
"launched_at": "2026-10-01T09:30:00",
"completed_at": "2026-10-01T15:10:00",
"created_at": "2026-10-01T09:25:00",
"updated_at": "2026-10-01T15:10:00"
}
}{
"success": false,
"error": "Campaign not found",
"code": "NOT_FOUND",
"requestId": "e3a1c5d7-2b4f-4a6c-9d8e-1f2a3b4c5d6e",
"timestamp": "2026-10-31T14:02:11.482Z"
}