Coming Soon

Voix programmable en JSON. Appels, IVR, enregistrement, TTS.

Voice pour les développeurs — plus de 140 pays couverts, plus de 1 500 préfixes de numéros de téléphone, appels masqués, numéros virtuels. Même surface API qu'Email et SMS — les appels sont simplement une ressource de plus.

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 minutes entre l'installation et le premier appel

Passez un appel depuis le langage que vous utilisez déjà.

SDK dans chaque runtime majeur. Le premier appel est dirigé vers un numéro de test autorisé (+15005550010) pour que vous puissiez intégrer un check CI avant de provisionner un vrai numéro.

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

    Appels sortants et entrants

    Passez et recevez des appels via REST ou SIP — même modèle d'authentification, même contrat d'idempotence.

  2. 02

    Flux d'appels déclaratifs en JSON

    Composez say, play, gather, record, transfer et dial sous forme de tableau JSON plat.

  3. 03

    Enregistrement avec transcription

    Enregistrement optionnel sur chaque segment ; transcriptions générées automatiquement dans plus de 40 langues.

  4. 04

    TTS en streaming, moins de 250 ms

    Premier octet audio via HTTP chunked transfer ou WebSocket — facturation au caractère.

  5. 05

    OTP vocal via les vérifications

    Même ressource bird.verifications que pour l'OTP par SMS ; changez simplement le champ channel.

  6. 06

    Numéros virtuels dans plus de 100 pays

    Provisionnez des numéros longs depuis le tableau de bord ou l'API numbers en quelques secondes.

  7. 07

    Appels masqués

    Les numéros de l'appelant et de l'appelé ne sont jamais exposés l'un à l'autre — confidentialité par routage.

  8. 08

    SmartRouting par appel

    Opérateur au moindre coût sélectionné en temps réel pour chaque segment, avec re-sélection de route en cas d'échec.

  9. 09

    Événements webhook par appel

    call.ringing, call.answered, call.completed et associés — signés HMAC, protégés contre le rejeu.

  10. 10

    SDK client WebRTC

    Ponts navigateur-PSTN depuis un seul package npm ; fonctionne dans tout runtime moderne.

Why we build Voice

La voix est le canal que tout le monde traite comme secondaire. Pas nous.

La voix est complexe — latence inférieure à la seconde, routage opérateur réel, conformité des enregistrements — et c'est pourquoi la plupart des fournisseurs lui attribuent sa propre authentification, son propre SDK, son propre contrat webhook. Nous avons pris le temps de lui donner la même forme que tout autre endpoint Bird : même authentification, même idempotence, même enveloppe d'erreur. Le contrôle d'appel n'est que du 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..."

Chaque changement d'état est un webhook.

Payloads signés HMAC, protégés contre le rejeu, idempotents. La même enveloppe sur chaque canal Bird — apprenez-en un, vous les connaissez tous.

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" }
  }
}

Calendrier de retry : 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter après la dernière tentative ; chaque événement dead-lettered est rejouable depuis le tableau de bord ou l'API.

  • call.queuedAccepté par l'API et mis en file d'attente pour l'appel sortant.
  • call.ringingLa ligne destinataire sonne — état pré-réponse.
  • call.answeredL'appelé a décroché ; la facturation commence à cet événement.
  • call.completedL'appel s'est terminé normalement — durée et prix dans le payload.
  • call.failedÉchec permanent (occupé, sans réponse, rejet opérateur) avec un motif typé.
  • call.recording.readyL'enregistrement est encodé et disponible à l'URL signée dans le payload.
  • call.transcript.readyTranscription terminée ; le payload inclut la langue et les segments.

L'OTP vocal est la même ressource que l'OTP par SMS.

Passez un appel personnalisé ou confiez la vérification au runtime. Même authentification, même idempotence, même enveloppe d'erreur — le champ channel est la seule chose qui change.

Appel personnalisé.

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

Composez n'importe quel flux — say, gather, transfer — pour les cas où vous souhaitez le script dans votre code.

Vérifications.

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

Une ligne. Bird choisit la route, effectue le contrôle anti-fraude, envoie le message audio. Même code sur chaque canal.

À la minute, selon le pays.

TTS en streaming facturé au caractère. Les remises sur volume s'appliquent automatiquement aux seuils courants. Pas de frais par utilisateur, pas de fonctionnalités verrouillées derrière un engagement annuel.

Commencez avec un seul canal.
Ajoutez les autres quand vous êtes prêt.

Une clé API de test est disponible immédiatement. L'accès production se débloque dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

CommencerLire la docou

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

Cursor