Developer Telephony API

Build Custom AI Voice Telephony with Simple APIs

Trigger calls, fetch results and transcripts, and create or manage voice agents programmatically with a clean REST API and post-call webhooks.

Updated

REST & Webhook Architecture

Trigger outbound calls with simple POST requests and receive each call's result via an HTTP webhook when it ends.

Agents Through the API

Create, list and fetch voice agents with the same API key, including their prompt, voice, language and the fields to extract after each call.

Mid-Call Tool Calls

The agent can hit your endpoints during the conversation and speak the result, so it gives real answers instead of promising a callback.

Structured Completion Payloads

Transcript, recording URL, disposition and your defined extraction fields arrive as JSON ready to write into your database.

Fetch Any Call by ID

Look up a call's status and results at any time, so a reconciliation job can recover any webhook your server missed.

The API exists so that a phone call can become an ordinary step in your software, triggered the same way you would send an email or write a database row. You post a number and some context; the platform handles carrier routing, streaming speech recognition, reasoning, synthesis and retries; you receive a webhook with structured results when it ends.

What that removes is substantial. Building the same capability directly on carrier infrastructure means solving SIP signalling, media handling, jitter and echo, concurrency management, number provisioning and regulatory screening before you write any product code — and then operating all of it.

REST
One POST to Place a Call
2,000/min
Call Requests Allowed
Webhooks
Results After Every Call
x-api-key
Or Bearer Token Auth

The Four-Step Integration

Most integrations use a handful of endpoints and one webhook handler, and are working end to end within a day.

  • Configure the agent once — Prompt, voice, available tools and the structured fields you want extracted. This is setup, not per-call work.
  • Trigger the call — Post the destination number, agent ID and a JSON context object. You get a call ID back immediately; dialling happens asynchronously.
  • Handle the result webhook — One event per call, call.completed or call.failed, keeps your system in sync without polling.
  • Process the completion payload — Transcript, recording, disposition and extracted fields, delivered when the call ends.

Make your webhook handler idempotent and fast — acknowledge first, process asynchronously — and run a reconciliation job that fetches any call whose webhook you missed.

Failure Modes Worth Handling Explicitly

Voice introduces failure modes a purely HTTP integration does not have, because there is a physical network and a human on the other end. Treating any non-success as a generic error loses information you need.

  • Never answered — The most common outbound outcome by volume. Your data model needs attempt-level records, not one result per contact.
  • Answered by voicemail — Dispositioned separately. Counting these as connects quietly corrupts every ratio you calculate.
  • Answered then immediately hung up — Diagnostically important — it points at your opening line rather than anything technical.
  • Partial extraction — Call completed but not every question answered. Make fields nullable and define what counts as a usable result.
  • Transfer failed — Nobody picked up the hot transfer. Define a fallback — usually a booked callback — rather than stranding the customer.
  • Duplicate triggers — Call creation has no idempotency key, so never blindly resend a request that timed out; check the call first so the customer is not dialled twice.

Frequently Asked Questions

Is there developer documentation available?
Yes, full API reference docs are accessible in your dashboard.
Is there developer documentation?
Yes, covering authentication, call creation, webhook payloads, tool definitions and error codes. The fastest way to get oriented is to place a single call to your own number and inspect the webhooks you receive.
How is authentication handled?
An API key from your dashboard, sent as a bearer token and scoped to your account. Keys can be rotated, and call creation must happen from your backend — never embed a key in client-side code.
Can the agent call our API during a conversation?
Yes. You define the available tools with their parameters and the agent invokes them when needed, then uses the response in its next turn. Keep those endpoints fast — the customer is waiting, so a two-second lookup is an audible pause.
What rate limits apply?
Limits apply to call creation rather than to concurrent conversations. For large batches, queue through the API and let the platform pace dialling rather than firing thousands of creation requests at once.
How do we test without calling real customers?
Run the full flow against your own numbers, which exercises real carrier behaviour end to end. Because actual telephony is involved, test calls consume talk minutes like any other call.

Related Reading