Voice is being upgraded

Programmierbare Sprachtelefonie in JSON. Anrufe, IVR, Aufzeichnung, TTS.

Voice für Entwickler — über 140 Länder mit Sprachabdeckung, mehr als 1.500 Telefonnummern-Präfixe, maskierte Anrufe, virtuelle Nummern. Dieselbe API-Oberfläche wie bei E-Mail und SMS — Anrufe sind einfach eine weitere Ressource.

place-call.ts
201 · 0.4s
import { BirdClient } from "@bird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.voice.calls.create({
  to:   "+15005550010",
  from: "+14155550199",
  flow: [
    { say:    "Your verification code is..." },
    { say:    "4. 2. 9. 1. 7." },
    { gather: { digits: 1, timeout: 5 } },
    { record: { transcribe: true } },
  ],
}).safe();

if (error) throw error;
console.log(data.id);
// → "call_7tQ04Lp2n..."

5 Minuten von der Installation bis zum ersten Anruf

Starten Sie einen Anruf in der Sprache, die Sie bereits verwenden.

SDKs für jede gängige Laufzeitumgebung. Der erste Anruf geht an eine freigegebene Testnummer (+15005550010), sodass Sie einen CI-Check ausliefern können, bevor Sie eine echte Nummer einrichten.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@bird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.voice.calls.create({
  to:   "+15005550010",
  from: "+14155550199",
  flow: [{ say: "Hello from Node." }],
}).safe();

Ten parts of voice you'd rather not write yourself.

Carrier routing, call control, and observability primitives — named and audit-able.

  1. 01

    Ausgehende und eingehende Anrufe

    Tätigen und empfangen Sie Anrufe über REST oder SIP — gleiches Auth-Modell, gleicher Idempotenz-Vertrag.

  2. 02

    Deklarative Anrufabläufe in JSON

    Kombinieren Sie say, play, gather, record, transfer und dial als flaches JSON-Array.

  3. 03

    Aufzeichnung mit Transkription

    Optionale Aufzeichnung für jede Verbindung; Transkripte werden automatisch in über 40 Sprachen generiert.

  4. 04

    Streaming-TTS, unter 250 ms

    Erstes Audio-Byte über HTTP Chunked Transfer oder WebSocket — Abrechnung pro Zeichen.

  5. 05

    Sprach-OTP über Verifikationen

    Dieselbe bird.verifications-Ressource wie bei SMS OTP; einfach das channel-Feld ändern.

  6. 06

    Virtuelle Nummern in über 100 Ländern

    Stellen Sie Langwahlnummern über das Dashboard oder die Numbers-API in Sekunden bereit.

  7. 07

    Maskierte Anrufe

    Anrufer- und Empfängernummern werden niemals gegenseitig offengelegt — Datenschutz durch Routing.

  8. 08

    SmartRouting pro Anruf

    Günstigster Carrier wird in Echtzeit für jede Verbindung ausgewählt, mit automatischer Routenumleitung bei Fehlern.

  9. 09

    Webhook-Events pro Anruf

    call.ringing, call.answered, call.completed und weitere — HMAC-signiert, Replay-geschützt.

  10. 10

    WebRTC-Client-SDK

    Browser-zu-PSTN-Bridges aus einem einzigen npm-Paket; funktioniert in jeder modernen Laufzeitumgebung.

Why we build Voice

Voice ist der Kanal, den alle als Nebensache behandeln. Wir nicht.

Voice ist anspruchsvoll — Sub-Sekunden-Latenz, echtes Carrier-Routing, Aufzeichnungs-Compliance — und genau deshalb geben die meisten Anbieter dem Kanal eine eigene Auth, ein eigenes SDK, einen eigenen Webhook-Vertrag. Wir haben uns die Zeit genommen, ihn wie jeden anderen Bird-Endpunkt aufzubauen: gleiche Auth, gleiche Idempotenz, gleicher Fehler-Envelope. Anrufsteuerung ist einfach JSON.

place-call.ts
201 · 0.4s
import { BirdClient } from "@bird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.voice.calls.create({
  to:   "+15005550010",
  from: "+14155550199",
  flow: [
    { say:    "Your verification code is..." },
    { say:    "4. 2. 9. 1. 7." },
    { gather: { digits: 1, timeout: 5 } },
    { record: { transcribe: true } },
  ],
}).safe();

if (error) throw error;
console.log(data.id);
// → "call_7tQ04Lp2n..."

Jede Statusänderung ist ein Webhook.

HMAC-signierte Payloads, Replay-geschützt, idempotent. Derselbe Envelope auf jedem Bird-Kanal — einen lernen, alle beherrschen.

POST /webhooks/bird
signed
{
  "type": "call.completed",
  "id":   "evt_8qC42v...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "call_id":    "call_7tQ04Lp2n",
    "from":       "+14155550199",
    "to":         "+15005550010",
    "direction":  "outbound",
    "status":     "completed",
    "duration_s": 42,
    "answered_at": "2026-05-19T15:41:18.402Z",
    "ended_at":    "2026-05-19T15:42:00.117Z",
    "price":       { "amount": 0.014, "currency": "USD" }
  }
}

Retry-Zeitplan: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-Letter nach dem letzten Versuch; jedes Dead-Letter-Event kann über das Dashboard oder die API erneut abgespielt werden.

  • call.queuedVon der API akzeptiert und für den Verbindungsaufbau in die Warteschlange gestellt.
  • call.ringingDie Gegenstelle klingelt — Status vor der Annahme.
  • call.answeredDer Angerufene hat abgenommen; die Abrechnung beginnt mit diesem Event.
  • call.completedDer Anruf wurde normal beendet — Dauer und Preis im Payload.
  • call.failedPermanenter Fehler (besetzt, keine Antwort, Carrier-Ablehnung) mit typisiertem Grund.
  • call.recording.readyAufzeichnung ist kodiert und unter der signierten URL im Payload verfügbar.
  • call.transcript.readyTranskription abgeschlossen; Payload enthält Sprache und Segmente.

Sprach-OTP ist dieselbe Ressource wie SMS OTP.

Starten Sie einen benutzerdefinierten Anruf oder übergeben Sie die Verifizierung an die Laufzeitumgebung. Gleiche Auth, gleiche Idempotenz, gleicher Fehler-Envelope — nur das channel-Feld ändert sich.

Benutzerdefinierter Anruf.

voice.calls.create
await bird.voice.calls.create({
  to:   "+15005550010",
  flow: [
    { say: `Your code is ${code}.` },
  ],
});

Erstellen Sie beliebige Abläufe — say, gather, transfer — für die Fälle, in denen Sie das Skript in Ihrem Code haben möchten.

Verifikationen.

verifications.start
await bird.verifications.start({
  to:      "+15005550010",
  channel: "voice",
});

Eine Zeile. Bird wählt die Route, führt die Betrugsprüfung durch und sendet den Audio-Prompt. Derselbe Code auf jedem Kanal.

Pro Minute, länderabhängig.

Streaming-TTS wird pro Zeichen abgerechnet. Mengenrabatte greifen automatisch bei gängigen Schwellenwerten. Keine Lizenzgebühr, keine Funktionen hinter jährlichen Vertragsbindungen.

Starten Sie mit einem Kanal.
Fügen Sie die anderen hinzu, wenn Sie bereit sind.

Ein Test-API-Key steht Ihnen sofort zur Verfügung. Der Produktivzugang wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Jetzt startenDokumentation lesenoder

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor