Home Blog Pricing Developers Compare Features
API v1 · Stable

Automated Alert Calls & SMS

Trigger real phone calls or text messages from any software, webhook, or script. Connect your timeclock, monitoring tools, CRM, or any system — let Audovo call the right people when something important happens.

Authentication

All API requests require an API key. Generate one in Dashboard → API Keys.

Pass your key in the Authorization header:

Authorization: Bearer ak_live_your_key_here

Alternatively append ?key=ak_live_xxx to the URL — useful on servers that strip Authorization headers.

Base URL

https://audovo.com/api/v1

All endpoints return Content-Type: application/json. Send request bodies as JSON with Content-Type: application/json.

POST /calls/notify — Trigger an Alert Call or SMS

The core endpoint. Fires a text-to-speech call, an SMS, or both simultaneously. The recipient picks up and hears your message, or receives it as a text — your choice.

POST /api/v1/calls/notify

Request Parameters

ParameterTypeRequiredDescription
tostring | arrayrequiredPhone number(s) to call/text. US 10-digit or E.164. Array of up to 10 numbers.
messagestringrequired*Text to speak or send as SMS. Max 4,000 chars. *Not required if template_id provided.
action_typestringoptionalcall (default), sms, or both. Controls whether a call, SMS, or both are sent.
template_idstringoptionalUse a saved template. Inline params override template defaults.
fromstringoptionalCaller/sender ID. Must be an active Audovo number. Auto-selected by default.
voicestringoptionalalice (default), man, woman. Call only.
repeatintegeroptionalTimes to repeat message. 1–5. Default: 1. Call only.
gatherbooleanoptionalAsk recipient to press 1 to acknowledge. Logged in your dashboard. Call only.
send_smsbooleanoptionalShorthand for action_type: "both". Pass true to add an SMS alongside a call.
sourcestringoptionalLabel for your dashboard logs. E.g. timeclock_system. Max 100 chars.

Call only (minimal)

curl -X POST https://audovo.com/api/v1/calls/notify \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"to":"+15551234567","message":"Alert: No staff have clocked in.","source":"timeclock"}'

Call + SMS simultaneously

curl -X POST https://audovo.com/api/v1/calls/notify \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "to": ["+15551234567", "+15559876543"],
    "message": "Emergency: Server room temperature exceeded threshold.",
    "action_type": "both",
    "repeat": 2,
    "gather": true,
    "source": "server_monitor"
  }'

Response

{
  "ok": true,
  "calls": [
    {
      "to": "+15551234567",
      "type": "both",
      "call_sid": "CA9f4e5b2a...",  // present when action_type includes "call"
      "sms_sid":  "SM7c3d8e1f...",  // present when action_type includes "sms"
      "status": "initiated",
      "log_id": 42
    }
  ]
}

GET /calls/templates — List Templates

Returns all saved templates. Create them in Dashboard → Automations or via API.

GET /api/v1/calls/templates
curl https://audovo.com/api/v1/calls/templates \
  -H 'Authorization: Bearer ak_live_YOUR_KEY'

POST /calls/templates — Create Template

Save a reusable config. Your integration only needs to send the template_id at trigger time.

POST /api/v1/calls/templates
curl -X POST https://audovo.com/api/v1/calls/templates \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "No Staff Clocked In",
    "message": "Alert: No staff have clocked in. Please call your manager immediately.",
    "action_type": "both",
    "voice": "alice",
    "repeat": 2,
    "gather": true
  }'
// Response
{ "ok": true, "template_id": "tpl_a3f8b2c1d4e5", "name": "No Staff Clocked In" }

POST /calls/templates — Delete Template

curl -X POST https://audovo.com/api/v1/calls/templates \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"delete","template_id":"tpl_a3f8b2c1d4e5"}'

Use Cases

Any system that can send an HTTP POST can trigger an Audovo alert. Here are common real-world scenarios your team can implement in minutes:

🕐

Timeclock — No Staff Alert

Timeclock detects nobody clocked in 15 min after open. Calls + texts the manager automatically.

"action_type": "both"
"source": "timeclock_busybusy"
🔒

Security — After-Hours Motion

Door/motion sensor triggers a webhook. Owner receives a call immediately.

"repeat": 3
"gather": true
🌡️

Server Monitoring

Datadog or UptimeRobot hits a webhook. On-call engineer gets called within seconds.

"source": "datadog"
"action_type": "call"
📦

Order Shipped SMS

Your CRM texts a customer the moment a shipping label is created.

"action_type": "sms"
"source": "shopify_webhook"
📅

Shift Reminder

Scheduling software texts staff 1 hour before their shift — reducing no-shows.

"action_type": "sms"
"source": "scheduling_app"
💳

Payment Failed

Billing system calls a key account before they churn when payment fails.

"action_type": "call"
"gather": true
🚨

System Down

Monitoring calls + texts your entire on-call rotation at once.

"to": ["eng1","eng2","eng3"]
"action_type": "both"
🏥

Appointment Reminder

CRM sends an SMS the morning of a scheduled appointment.

"action_type": "sms"
"language": "es-MX"

5-Minute Quickstart

Step 1 — Get an API key

Go to Dashboard → API Keys → Create Key. Copy the key — it starts with ak_live_.

Step 2 — Create a template

curl -X POST https://audovo.com/api/v1/calls/templates \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Test Alert","message":"This is a test. Your alert system is working correctly.","gather":true}'

Step 3 — Trigger it

curl -X POST https://audovo.com/api/v1/calls/notify \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"template_id":"tpl_YOUR_ID","to":"+1YOUR_NUMBER","source":"quickstart"}'

Your phone should ring within a few seconds. Check Dashboard → Automations → Trigger Log to see it logged.

Code Examples

curl -X POST https://audovo.com/api/v1/calls/notify \
  -H 'Authorization: Bearer ak_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "to": "+15551234567",
    "message": "Alert: No staff have clocked in at your location.",
    "action_type": "both",
    "repeat": 2,
    "gather": true,
    "source": "my_timeclock_system"
  }'
import requests

response = requests.post(
    "https://audovo.com/api/v1/calls/notify",
    headers={"Authorization": "Bearer ak_live_YOUR_KEY"},
    json={
        "to": "+15551234567",
        "message": "Alert: No staff have clocked in.",
        "action_type": "both",
        "source": "timeclock_system",
    }
)
data = response.json()
print(data["calls"][0]["call_sid"])
const res = await fetch('https://audovo.com/api/v1/calls/notify', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ak_live_YOUR_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    to: '+15551234567',
    message: 'Alert: No staff have clocked in.',
    action_type: 'both',
    source: 'timeclock_system',
  }),
});
const data = await res.json();
console.log(data.calls[0].call_sid);
$ch = curl_init('https://audovo.com/api/v1/calls/notify');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode([
        'to'          => '+15551234567',
        'message'     => 'Alert: No staff have clocked in.',
        'action_type' => 'both',
        'source'      => 'timeclock_system',
    ]),
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ak_live_YOUR_KEY',
        'Content-Type: application/json',
    ],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data['calls'][0]['call_sid'];

Zapier & Make (No-Code)

No code needed. Use Webhooks by Zapier or Make HTTP module:

  1. Create a Zap · Trigger: your timeclock/CRM/monitoring app
  2. Action: Webhooks by Zapier → POST
  3. URL: https://audovo.com/api/v1/calls/notify
  4. Headers: Authorization: Bearer ak_live_YOUR_KEY
  5. Body Type: JSON · Body: paste your payload with template_id
💡 Pro tip Create the template in Dashboard → Automations first. Then in Zapier just send {"template_id":"tpl_xxx","to":"{{contact_phone}}"} — mapping the recipient from whatever app triggered the Zap.

Receiving Status Webhooks

After a call completes, Twilio posts a status update. You can view all triggered calls and their status in Dashboard → Automations → Trigger Log, including whether the recipient pressed 1 to acknowledge.

Error Handling

{ "ok": false, "error": "Invalid phone number format.", "code": 400 }
HTTP CodeMeaning
400Bad request — missing or invalid field
401Missing or invalid API key
403Account suspended, or caller ID not owned by account
404Template not found
503Twilio credentials not configured
⚠️ Rate limits Maximum 10 recipients per request. Twilio enforces its own per-account rate limits independently.