API v1 · Production Ready

Audovo Developer Platform

Incorporate the complete power of Audovo—cloud telephony, programmable IVRs, real-time WebRTC softphones, two-way SMS, automated alert calls, and voicemail transcription—into any custom application or CRM. Built with transparent cost translation so developers and resellers can track usage and automatically pass wholesale charges along to their customers.

SPEC https://audovo.com/api/v1/openapi.json Download OpenAPI 3.1 →

Authentication & Scopes

All REST API requests require an API key generated in Dashboard → Developer API Keys. Pass your key via Bearer token, X-API-Key header, or URL query parameter:

Authorization: Bearer ak_live_your_key_here
X-API-Key: ak_live_your_key_here
ScopeGrants Access To
*Full access to all resources (default for developer keys)
callsMake calls, list logs, manage active audio streams, alert calls
smsSend text messages, list inbound/outbound messages, conversation threads
numbersList and update routing configuration of leased phone numbers
voicemailsListen to voicemail audio, read AI transcripts, mark archived
contactsAddress book CRUD and CRM contact activities
billingInspect rates, real-time wallet deductions, and cost usage aggregations
webhooksManage webhooks, inspect delivery logs, send test events

Base URL

https://audovo.com/api/v1

Cost Translation & Reseller Billing

Audovo is designed for software platforms, agencies, and SaaS developers who bundle voice & SMS services for their own end-clients. Every billable event in Audovo (voice calls, SMS segments, number leases) automatically translates costs so you can pass them along transparently or mark them up.

How Cost Translation Works When a call completes or an SMS is sent, Audovo calculates your exact wholesale cost based on your plan's rate card. In both the REST API responses and real-time Webhook payloads, a structured cost object is returned:
{
  "event": "call.completed",
  "data": {
    "call_sid": "CA1a2b3c4d5e...",
    "duration": 105,
    "cost": {
      "currency": "USD",
      "billed_amount": 0.0400,
      "rate_per_minute": 0.0200,
      "duration_seconds": 105,
      "billable_minutes": 2,
      "unit_type": "minute",
      "markup_suggestions": {
        "cost_plus_20_pct": 0.0480,
        "cost_plus_30_pct": 0.0520,
        "cost_plus_50_pct": 0.0600
      }
    }
  }
}

Interactive Wholesale → Retail Cost Calculator

Model your customer pass-through billing or SaaS profit margins with our live formula simulator:

Audovo Wholesale Cost
$33.50
Recommended Retail Charge
$60.23
Your Gross Profit
+$26.73

GET /costs/rates — Telephony Rate Card

Inspect the live pricing rates applied to your account, current wallet balance, and overage rates.

GET /api/v1/costs/rates

GET /costs/usage — Usage Aggregation

Retrieve itemized seconds, billable minutes, SMS counts, and wallet deductions for any custom date range.

GET /api/v1/costs/usage?start_date=2026-09-01&end_date=2026-09-30

GET /calls — List Calls with Costs

Search and paginate historical calls with translated costs, duration, status, and recording URLs.

GET /api/v1/calls?direction=inbound&status=completed&page=1&per_page=20

GET /calls/{id} — Retrieve Call & Audio

Fetch complete details for a single call leg by ID or Twilio Call SID.

GET /api/v1/calls/CA1a2b3c4d5e6f7g8h9i0j...

POST /calls — Programmatic Outbound Call

Initiate an automated outbound phone call from your Audovo number to any client destination.

POST /api/v1/calls
curl -X POST https://audovo.com/api/v1/calls \
  -H "Authorization: Bearer ak_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+18435551234",
    "from": "+18435559876",
    "contact_name": "Jane Smith"
  }'
from audovo import Audovo

client = Audovo(api_key="ak_live_xxxx")
call = client.calls.create(to="+18435551234", from_number="+18435559876")
print(call["call_sid"], call["status"])
const { Audovo } = require('./audovo-client.js');
const audovo = new Audovo('ak_live_xxxx');

const call = await audovo.calls.create({
  to: '+18435551234',
  from: '+18435559876'
});
console.log(call.call_sid);
require_once 'sdk/php/Audovo.php';
$audovo = new \Audovo\AudovoClient('ak_live_xxxx');

$call = $audovo->createCall('+18435551234', '+18435559876');
echo $call['call_sid'];

POST /calls/notify — Automated Alert Calls & SMS

Trigger text-to-speech alert phone calls, SMS notifications, or both simultaneously to critical staff.

POST /api/v1/calls/notify

POST /sms — Send Outbound SMS

Send an SMS text message from your Audovo leased number to any mobile phone.

POST /api/v1/sms
curl -X POST https://audovo.com/api/v1/sms \
  -H "Authorization: Bearer ak_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+18435551234",
    "body": "Hello from Audovo! Your scheduled delivery is ready."
  }'

GET /sms — List Message Logs

Retrieve message history with segment counting and calculated costs.

GET /api/v1/sms?direction=outbound&page=1

GET /sms/threads — Conversation Threads

Get messages grouped by contact with last message previews and unread counts for building messaging UIs.

GET /api/v1/sms/threads

GET /numbers — List Active Leased Numbers

List all phone numbers assigned to your Audovo organization with routing modes and assigned IVR menus.

GET /api/v1/numbers

PUT /numbers/{id} — Update Number Settings

Modify friendly names, routing mode (normal, voicemail, contacts_only), or notification emails.

PUT /api/v1/numbers/num_1a2b3c

GET /numbers/available — Search Numbers to Purchase

Search available local and toll-free numbers by area code or digit pattern.

GET /api/v1/numbers/available?area_code=843

GET /voicemails — List Voicemails

Retrieve recorded voicemail messages with audio stream links, duration, and read/archive filters.

GET /api/v1/voicemails?status=new

GET /voicemails/{id} — Voicemail Audio & Transcription

Retrieve single voicemail details with AI text transcription and audio recording URL.

GET /api/v1/voicemails/42

PATCH /voicemails/{id} — Update Read / Archive State

PATCH /api/v1/voicemails/42

DELETE /voicemails/{id} — Delete Voicemail & Purge Audio

DELETE /api/v1/voicemails/42

GET /contacts — Address Book & CRM Contacts

Search contacts by name, company, or phone number with full pagination.

GET /api/v1/contacts?q=Jane

POST /contacts — Create Contact

POST /api/v1/contacts

GET & PUT /settings — Account Telephony Settings

Manage office timezone, voicemail greetings, email notifications, and holiday closures.

GET /api/v1/settings

GET /ivr — IVR Menus & Graph Trees

Inspect active daytime and after-hours IVR menus with keypress routing branches.

GET /api/v1/ivr

Real-time Webhook Infrastructure

Audovo streams real-time HTTP POST events to your servers whenever telephony or messaging events occur. All payloads include timestamps, unique event IDs, and automated cost translation.

Event TypeDescription
call.startedInbound call detected on a leased number before ringing
call.answeredCall picked up by an agent, IVR menu, or softphone
call.completedCall ended; includes recording URL and cost translation
voicemail.receivedNew voicemail audio message recorded and saved
voicemail.transcribedAI voicemail transcription finished and available
sms.receivedIncoming text message received on any Audovo number
sms.sentOutbound SMS dispatched with segment cost breakdown
contact.createdNew contact added to the address book

HMAC-SHA256 Signature Verification

Each webhook request includes an X-Audovo-Signature header computed using your webhook's secret key (whsec_...):

X-Audovo-Signature: sha256=a1b2c3d4e5f6...
import hmac, hashlib

def verify_audovo_webhook(raw_body_bytes, signature_header, secret):
    expected = "sha256=" + hmac.new(secret.encode('utf-8'), raw_body_bytes, hashlib.sha256).hexdigest()
    return hmac.compare_digest(signature_header, expected)
const crypto = require('crypto');

function verifyAudovoWebhook(rawBodyBuffer, signatureHeader, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBodyBuffer).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
}
function verify_audovo_webhook($rawBody, $signatureHeader, $secret) {
    $expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
    return hash_equals($signatureHeader, $expected);
}

Managing Webhooks via API

POST /api/v1/webhooks

Register new endpoints dynamically or send an instant test event with POST /api/v1/webhooks/{id}.

GET /webhooks/deliveries — Webhook Audit Logs

Inspect real-time HTTP response status codes, execution duration in milliseconds, and response payloads for debugging your integration.

GET /api/v1/webhooks/deliveries

Official Python SDK

Install or include sdk/python/audovo.py. Fully typed with zero external dependencies:

from audovo import Audovo

client = Audovo("ak_live_xxxx")

# Fetch rates & calculate markup
rates = client.costs.get_rates()
markup = client.costs.calculate_markup(wholesale_cost=0.04, markup_percent=35)

# Send SMS
client.sms.send(to="+18435551234", body="Your code is 4920")

Official PHP SDK

Drop sdk/php/Audovo.php into your project:

require_once 'sdk/php/Audovo.php';
$audovo = new \Audovo\AudovoClient('ak_live_xxxx');
$calls  = $audovo->listCalls(['direction' => 'inbound']);

Universal JavaScript Client

Use sdk/v1/audovo-client.js in Node.js or browser:

const { Audovo } = require('./audovo-client.js');
const audovo = new Audovo('ak_live_xxxx');
const numbers = await audovo.numbers.list();

Click-to-Call Website Embed

Add a "Call Us" floating button or automated callback modal to any site with one line of HTML:

<script src="https://audovo.com/sdk/v1/embed-click-to-call.js"
        data-api-key="ak_live_xxxx"
        data-phone="+18435551234"
        data-label="Call Our Team"
        data-theme="dark"></script>

"Text Us" SMS Chat Bubble Embed

Allow website visitors to send an SMS to your team directly from your homepage:

<script src="https://audovo.com/sdk/v1/embed-sms.js"
        data-api-key="ak_live_xxxx"
        data-label="Text Us"
        data-position="bottom-left"></script>