API reference
Base URL https://voiceorbit.p.nextaweb.com/api/v1 · JSON in, JSON out · version 1.0.1
Authentication
Create a key in Settings → API keys, choose its scopes, and send it as a bearer token. Keys can be limited to IP addresses and given an expiry date.
curl https://voiceorbit.p.nextaweb.com/api/v1/me -H "Authorization: Bearer vk_live_XXXXXXXX_your-secret"
Errors, pagination & limits
- Errors look like
{"error":{"code":"validation_failed","message":"…"}}with a matching HTTP status (401, 402 out of credits, 403, 404, 409, 422, 429). - List endpoints use cursor pagination:
?limit=50&cursor=…→{"data":[…],"has_more":true,"next_cursor":"…"}. - Rate limits depend on your plan; every response carries
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Reset; 429 responses includeRetry-After. - Send
Idempotency-KeyonPOST /callsandPOST /campaignsso a retried request never dials twice. - Calls via the API follow the same credit, DND, calling-hours and concurrency rules as the dashboard.
Webhooks
Events: call.started, call.answered, call.completed, call.failed, call.analysis_ready, campaign.started, campaign.completed, lead.qualified, credits.low, task.triggered. Each POST has X-Webhook-Event, X-Webhook-Timestamp and X-Signature: sha256=HMAC(secret, timestamp + "." + body). Non-2xx responses are retried after 1 m, 5 m, 30 m, 2 h and 12 h.
// Node.js
const sig = 'sha256=' + crypto.createHmac('sha256', SECRET).update(req.headers['x-webhook-timestamp'] + '.' + rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(req.headers['x-signature']));Calls
/calls— Start an outbound AI callcalls:writeSupports the Idempotency-Key header. Variables fill {{placeholders}} in the agent prompt and first message.
curl -X POST https://voiceorbit.p.nextaweb.com/api/v1/calls \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":12,"to":"+919876543210","variables":{"name":"Priya","amount":"2500"}}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/calls');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'agent_id' => 12,
'to' => '+919876543210',
'variables' =>
array (
'name' => 'Priya',
'amount' => '2500',
),
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/calls', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"agent_id": 12,
"to": "+919876543210",
"variables": {
"name": "Priya",
"amount": "2500"
}
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/calls",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"agent_id": 12,
"to": "+919876543210",
"variables": {
"name": "Priya",
"amount": "2500"
}
},)
print(r.json())
/calls— List callscalls:readFilters: status, direction, agent_id, campaign_id, created_after (ISO date). Cursor pagination: limit (max 100), cursor.
curl -X GET https://voiceorbit.p.nextaweb.com/api/v1/calls \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/calls');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/calls', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/calls",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/calls/{id}— Get a call with transcript and AI analysiscalls:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/calls/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/calls/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/calls/123', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/calls/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/calls/{id}/hangup— End a live callcalls:writecurl -X POST https://voiceorbit.p.nextaweb.com/api/v1/calls/123/hangup \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/calls/123/hangup');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/calls/123/hangup', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/calls/123/hangup",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
Campaigns
/campaigns— Create a campaign (optionally with contacts)campaigns:writeSupports Idempotency-Key. Without list_id a new contact list is created for the campaign.
curl -X POST https://voiceorbit.p.nextaweb.com/api/v1/campaigns \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"October renewals","agent_id":12,"timezone":"Asia/Kolkata","window_start":"10:00","window_end":"19:00","concurrency":3,"max_attempts":2,"contacts":[{"phone":"+919876543210","name":"Priya","variables":{"amount":"2500"}}]}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'name' => 'October renewals',
'agent_id' => 12,
'timezone' => 'Asia/Kolkata',
'window_start' => '10:00',
'window_end' => '19:00',
'concurrency' => 3,
'max_attempts' => 2,
'contacts' =>
array (
0 =>
array (
'phone' => '+919876543210',
'name' => 'Priya',
'variables' =>
array (
'amount' => '2500',
),
),
),
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "October renewals",
"agent_id": 12,
"timezone": "Asia/Kolkata",
"window_start": "10:00",
"window_end": "19:00",
"concurrency": 3,
"max_attempts": 2,
"contacts": [
{
"phone": "+919876543210",
"name": "Priya",
"variables": {
"amount": "2500"
}
}
]
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"name": "October renewals",
"agent_id": 12,
"timezone": "Asia/Kolkata",
"window_start": "10:00",
"window_end": "19:00",
"concurrency": 3,
"max_attempts": 2,
"contacts": [
{
"phone": "+919876543210",
"name": "Priya",
"variables": {
"amount": "2500"
}
}
]
},)
print(r.json())
/campaigns— List campaignscampaigns:readFilter: status.
curl -X GET https://voiceorbit.p.nextaweb.com/api/v1/campaigns \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/campaigns/{id}— Get a campaign with live progresscampaigns:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/campaigns/{id}— Update name, window, concurrency or retriescampaigns:writecurl -X PATCH https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123 \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"concurrency":5}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'concurrency' => 5,
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123', {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"concurrency": 5
}),
});
const data = await res.json();
import os, requests
r = requests.request("PATCH", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"concurrency": 5
},)
print(r.json())
/campaigns/{id}/start— Start (or resume) a campaigncampaigns:writeAlso /pause and /resume.
curl -X POST https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/start \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/start');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/start', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/start",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/campaigns/{id}/contacts— Add contacts to a campaigncampaigns:writeUp to 1000 per request. Running campaigns dial them automatically.
curl -X POST https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/contacts \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"contacts":[{"phone":"+919812345678","name":"Arjun"}]}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/contacts');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'contacts' =>
array (
0 =>
array (
'phone' => '+919812345678',
'name' => 'Arjun',
),
),
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/contacts', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"contacts": [
{
"phone": "+919812345678",
"name": "Arjun"
}
]
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123/contacts",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"contacts": [
{
"phone": "+919812345678",
"name": "Arjun"
}
]
},)
print(r.json())
/campaigns/{id}— Delete a campaigncampaigns:writecurl -X DELETE https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("DELETE", "https://voiceorbit.p.nextaweb.com/api/v1/campaigns/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
Agents
/agents— List agentsagents:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/agents \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/agents');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/agents', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/agents",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/agents— Create an agentagents:writecurl -X POST https://voiceorbit.p.nextaweb.com/api/v1/agents \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Riya — Sales","language":"en-IN","system_prompt":"You are Riya…","first_message":"Hi {{name}}!"}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/agents');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'name' => 'Riya — Sales',
'language' => 'en-IN',
'system_prompt' => 'You are Riya…',
'first_message' => 'Hi {{name}}!',
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/agents', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "Riya — Sales",
"language": "en-IN",
"system_prompt": "You are Riya…",
"first_message": "Hi {{name}}!"
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/agents",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"name": "Riya — Sales",
"language": "en-IN",
"system_prompt": "You are Riya…",
"first_message": "Hi {{name}}!"
},)
print(r.json())
/agents/{id}— Get an agentagents:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/agents/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/agents/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/agents/123', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/agents/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/agents/{id}— Update an agentagents:writecurl -X PATCH https://voiceorbit.p.nextaweb.com/api/v1/agents/123 \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"first_message":"Hello {{name}}, this is Riya."}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/agents/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'first_message' => 'Hello {{name}}, this is Riya.',
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/agents/123', {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"first_message": "Hello {{name}}, this is Riya."
}),
});
const data = await res.json();
import os, requests
r = requests.request("PATCH", "https://voiceorbit.p.nextaweb.com/api/v1/agents/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"first_message": "Hello {{name}}, this is Riya."
},)
print(r.json())
/agents/{id}— Delete an agentagents:writecurl -X DELETE https://voiceorbit.p.nextaweb.com/api/v1/agents/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/agents/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/agents/123', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("DELETE", "https://voiceorbit.p.nextaweb.com/api/v1/agents/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
Contacts
/contacts— List contactscontacts:readFilters: phone, lead_status, tag.
curl -X GET https://voiceorbit.p.nextaweb.com/api/v1/contacts \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/contacts');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/contacts', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/contacts",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/contacts— Create or update a contact (dedupes by phone)contacts:writecurl -X POST https://voiceorbit.p.nextaweb.com/api/v1/contacts \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"phone":"+919876543210","name":"Priya","tags":"website,hot","custom_fields":{"city":"Kolkata"},"list_id":3}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/contacts');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'phone' => '+919876543210',
'name' => 'Priya',
'tags' => 'website,hot',
'custom_fields' =>
array (
'city' => 'Kolkata',
),
'list_id' => 3,
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/contacts', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "+919876543210",
"name": "Priya",
"tags": "website,hot",
"custom_fields": {
"city": "Kolkata"
},
"list_id": 3
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/contacts",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"phone": "+919876543210",
"name": "Priya",
"tags": "website,hot",
"custom_fields": {
"city": "Kolkata"
},
"list_id": 3
},)
print(r.json())
/contacts/{id}— Get a contactcontacts:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/contacts/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/contacts/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/contacts/{id}— Update a contactcontacts:writecurl -X PATCH https://voiceorbit.p.nextaweb.com/api/v1/contacts/123 \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"lead_status":"qualified"}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'lead_status' => 'qualified',
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123', {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"lead_status": "qualified"
}),
});
const data = await res.json();
import os, requests
r = requests.request("PATCH", "https://voiceorbit.p.nextaweb.com/api/v1/contacts/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"lead_status": "qualified"
},)
print(r.json())
/contacts/{id}— Delete a contactcontacts:writecurl -X DELETE https://voiceorbit.p.nextaweb.com/api/v1/contacts/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/contacts/123', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("DELETE", "https://voiceorbit.p.nextaweb.com/api/v1/contacts/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
Account
/me— Workspace, plan and key infocurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/me \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/me');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/me', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/me",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/credits/balance— Credit balancecredits:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/credits/balance \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/credits/balance');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/credits/balance', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/credits/balance",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/credits/usage— Credit ledgercredits:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/credits/usage \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/credits/usage');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/credits/usage', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/credits/usage",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/analytics/calls— Call analyticsanalytics:readQuery: days (1–365), direction (inbound|outbound|campaign).
curl -X GET https://voiceorbit.p.nextaweb.com/api/v1/analytics/calls \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/analytics/calls');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/analytics/calls', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/analytics/calls",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/numbers— Phone numbers available to younumbers:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/numbers \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/numbers');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/numbers', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/numbers",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
Webhooks
/webhooks— List webhookswebhooks:readcurl -X GET https://voiceorbit.p.nextaweb.com/api/v1/webhooks \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/webhooks');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/webhooks', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("GET", "https://voiceorbit.p.nextaweb.com/api/v1/webhooks",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/webhooks— Create a webhook (returns its signing secret once)webhooks:writeEvents: call.started, call.answered, call.completed, call.failed, call.analysis_ready, campaign.started, campaign.completed, lead.qualified, credits.low, task.triggered or "*".
curl -X POST https://voiceorbit.p.nextaweb.com/api/v1/webhooks \
-H "Authorization: Bearer $VO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/voice","events":["call.completed","lead.qualified"]}'
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/webhooks');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(array (
'url' => 'https://example.com/hooks/voice',
'events' =>
array (
0 => 'call.completed',
1 => 'lead.qualified',
),
)),
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/webhooks', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"url": "https://example.com/hooks/voice",
"events": [
"call.completed",
"lead.qualified"
]
}),
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/webhooks",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},
json={
"url": "https://example.com/hooks/voice",
"events": [
"call.completed",
"lead.qualified"
]
},)
print(r.json())
/webhooks/{id}/test— Send a test eventwebhooks:writecurl -X POST https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123/test \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123/test');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123/test', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("POST", "https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123/test",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())
/webhooks/{id}— Delete a webhookwebhooks:writecurl -X DELETE https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123 \ -H "Authorization: Bearer $VO_KEY"
$ch = curl_init('https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VO_KEY'), 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch('https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.VO_KEY}`, 'Content-Type': 'application/json' },
});
const data = await res.json();
import os, requests
r = requests.request("DELETE", "https://voiceorbit.p.nextaweb.com/api/v1/webhooks/123",
headers={"Authorization": f"Bearer {os.environ['VO_KEY']}"},)
print(r.json())