Campaigns
Your campaigns. Start and pause them.
Every example sends your key ID and secret as CALLVIEW_KEY_ID and CALLVIEW_SECRET (see Keys and authentication). The base address is https://v2-api.callview.ai/api/v1/external.
List campaigns
Section titled “List campaigns”GET /campaigns
The campaigns this key can use, page by page (cursor = the next_cursor you were given). Needs campaigns:read.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
cursor |
query | string | ||
limit |
query | integer | Default 50. 1 to 100. |
curl -X GET 'https://v2-api.callview.ai/api/v1/external/campaigns' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET"const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/campaigns', { method: 'GET', headers: { Authorization: `Basic ${auth}` },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os
import requests
res = requests.request( "GET", "https://v2-api.callview.ai/api/v1/external/campaigns", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/campaigns');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 A page of campaigns
{ "data": [ { "id": "7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01", "name": "Roofing leads", "status": "active", "livemode": true } ], "meta": { "next_cursor": null, "has_more": false }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |
Get a campaign
Section titled “Get a campaign”GET /campaigns/{id}
Needs campaigns:read. A test key sees the id and name only.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
id |
path | string (uuid) | yes |
curl -X GET 'https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET"const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01', { method: 'GET', headers: { Authorization: `Basic ${auth}` },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os
import requests
res = requests.request( "GET", "https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 The campaign
{ "data": { "id": "7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01", "name": "Roofing leads", "status": "active", "livemode": true }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 404 | not_found |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |
Start a campaign
Section titled “Start a campaign”POST /campaigns/{id}/activate
Starts (or restarts) dialing. The campaign needs an SDR and must be a draft or paused. A test key changes nothing and answers what the status would be. Needs campaigns:write.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
id |
path | string (uuid) | yes | |
Idempotency-Key |
header | string | Any string you choose (1 to 255 visible characters), new for each new action. Send the same key again within 24 hours and you get the first answer back instead of a second lead or call. At most 255 characters. |
curl -X POST 'https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/activate' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET" \ -H 'Idempotency-Key: postCampaignsIdActivate-0001'import { randomUUID } from 'node:crypto';
const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/activate', { method: 'POST', headers: { Authorization: `Basic ${auth}`, 'Idempotency-Key': randomUUID() },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os, uuid
import requests
res = requests.request( "POST", "https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/activate", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/activate');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Idempotency-Key: ' . bin2hex(random_bytes(16))], CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 Started
{ "data": { "id": "e4d3c2b1-a09f-4e8d-9c7b-6a5f4e3d2c1b", "livemode": true }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 404 | not_found |
| 409 | idempotency_mismatch, idempotency_in_progress |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |
| 503 | service_unavailable |
Pause a campaign
Section titled “Pause a campaign”POST /campaigns/{id}/pause
Stops new calls. Calls already up carry on. Leads you add while it is paused are kept (status held) and dialed when it starts again. A test key changes nothing. Needs campaigns:write.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
id |
path | string (uuid) | yes | |
Idempotency-Key |
header | string | Any string you choose (1 to 255 visible characters), new for each new action. Send the same key again within 24 hours and you get the first answer back instead of a second lead or call. At most 255 characters. |
curl -X POST 'https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/pause' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET" \ -H 'Idempotency-Key: postCampaignsIdPause-0001'import { randomUUID } from 'node:crypto';
const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/pause', { method: 'POST', headers: { Authorization: `Basic ${auth}`, 'Idempotency-Key': randomUUID() },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os, uuid
import requests
res = requests.request( "POST", "https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/pause", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/campaigns/7c1f2b9e-4a3d-4e8f-9b21-5d6a7e8f9a01/pause');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Idempotency-Key: ' . bin2hex(random_bytes(16))], CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 Paused
{ "data": { "id": "e4d3c2b1-a09f-4e8d-9c7b-6a5f4e3d2c1b", "livemode": true }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 404 | not_found |
| 409 | idempotency_mismatch, idempotency_in_progress |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |
| 503 | service_unavailable |