Skip to content

APIs for AI voice agents

One key, one balance, every voice engine, no subscriptions.

API endpoints
55
Resource types
12
Voice engines
4
Quickstart

From nothing to a ringing phone in four requests

This is the whole quickstart. Telephony stays with your carrier; everything else is one key against one balance.

  1. 1

    Connect your SIP trunk

    Your carrier’s credentials. The password is stored encrypted and is never returned by the API again, including to you.

    POST /v1/sip-trunks
    $ curl https://api.voice.wixzel.com/v1/sip-trunks \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -d '{
          "name": "My carrier",
          "host": "sip.carrier.example",
          "username": "acct123",
          "password": "…"
        }'
  2. 2

    Register a number on it

    Give the number an inbound_agent_id later and calls to it are answered automatically.

    POST /v1/phone-numbers
    $ curl https://api.voice.wixzel.com/v1/phone-numbers \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -d '{
          "phone_number": "+14155550100",
          "sip_trunk_id": "st_01HXYZ"
        }'
  3. 3

    Create an agent

    Name the models you want and we wire them together, or hand the whole turn to one realtime model. All three stages are required: defaulting a missing one would bill you for a model you never chose.

    POST /v1/agents
    $ curl https://api.voice.wixzel.com/v1/agents \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -d '{
          "name": "Support",
          "system_prompt": "You are a concise support agent.",
          "opening_message": "Hi, how can I help?",
          "voice": {
            "stt": { "model": "deepgram/nova-3" },
            "llm": { "model": "openrouter/gpt-4o-mini" },
            "tts": { "model": "elevenlabs/eleven_turbo_v2_5" }
          }
        }'
      // or hand the whole turn to one model
      "voice": {
        "realtime": {
          "model": "google/gemini-live",
          "voice": "Charon"
        }
      }
  4. 4

    Place a call

    Idempotency-Key is required here. A timeout tells you nothing about whether the call was placed; the key makes retrying safe instead of dialling twice.

    POST /v1/calls
    $ curl https://api.voice.wixzel.com/v1/calls \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -d '{
          "to": "+14155551234",
          "agent_id": "ag_01HXYZ"
        }'

Then GET /v1/usage/events?session_id=… explains every micro of what it cost. Read the quickstart

More than a gateway in front of the model vendors

Unifying the model providers is the easy half. The rest of a voice agent is the part that takes months and never appears in a demo: the media server, RTP pacing, barge-in, endpointing, trunk registration, campaign pacing, per-second metering.

Without Wixzel Voice

  • Accounts with Deepgram, OpenRouter and ElevenLabs
  • Three sets of keys to rotate and leak
  • Three invoices, none of them per-call
  • Your own media server, RTP pacing and barge-in logic

With Wixzel Voice

  • One key, scoped and rotatable
  • One prepaid balance, spent per second
  • Every charge itemised by component and call
  • Barge-in, endpointing and pacing already solved
Pricing

Pick an engine, or compose one

Prices are per connected minute at typical speech rates, including the flat $0.012 orchestration fee. The table is generated from the same price book the meter bills against, so it cannot drift from what you are charged.

EnginePipelinePer minute
classicDeepgram + GPT-4o-mini + ElevenLabs$0.0867
sarvamSarvam, Indian languages end to end$0.0623
gemini-liveGemini Live, native audio$0.0466
deepgram-agentDeepgram Voice Agent$0.1851

Telephony is not included and not marked up. Calls run over your own SIP trunk, so you keep your carrier rates and your carrier relationship.

How credit works, and the minimum top-up

Estimate a month

Estimated monthly cost
$433.50
Per call
$0.4335
Minutes per month
5,000
classic, per minute
$0.0867

At typical speech rates, including the $0.012/min platform fee. Metered per second, token and character, so a quiet call costs less and a talkative one more. Telephony is billed by your carrier and is not included.

Billing

Every charge is traceable to a second of audio

Credit is reserved before a call is placed and debited as it runs. Every micro that leaves the balance is explained by a usage row, so a bill is answerable without asking support.

  1. Reserved at admission

    Credit for the first stretch of the call is held before a port is opened or a provider socket is created. An account that cannot fund it is refused with 402, so a call that never happens costs nothing.

  2. Debited as it runs

    Speech seconds, tokens and characters are metered against the balance every few seconds while the call is live. Run low and the agent warns your caller; run out and it says goodbye rather than dropping the line.

  3. Settled at hangup

    The hold is released and only what was used stays debited, one row per component, reconciled against the call’s real duration.

$ curl .../v1/billing/balance

{
  "object": "balance",
  "balance_display": "$24.75",
  "held_micros": 250000,   # held by live calls
  "available_micros": 24500000
}

Amounts are integer micro-USD, so a charge of $0.000021 has a representation that agrees with the ledger. Every response carries a display string beside it.

No surprise invoices

Prepaid. You cannot be billed for more than you added.

Prices frozen per call

A call is priced at admission and finishes on those rates, so a price change never moves a meter mid-conversation.

Under-billed on our failures

If we crash mid-call you are charged for the seconds we can prove, not the amount we reserved.

Refused before it costs you

A call that cannot fund its first 15 seconds is refused before anything is allocated. At about a minute of runway the agent warns your caller and then hangs up cleanly.

FAQ

Questions the docs answer

The short versions. Each one links to the page with the long one.

Start with a curl

Sign up, create a key, point a SIP trunk at us. From there the quickstart is four requests long.