Coming Soon

Voz programable en JSON. Llamadas, IVR, grabación, TTS.

Voz para desarrolladores — más de 140 países con cobertura de voz, más de 1500 prefijos de números telefónicos, llamadas enmascaradas, números virtuales. La misma superficie de API que Email y SMS — las llamadas son simplemente otro recurso.

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 minutos desde la instalación hasta la primera llamada

Realiza una llamada desde el lenguaje que ya usas.

SDK en todos los runtimes principales. La primera llamada va a un número de prueba autorizado (+15005550010) para que puedas incluir una verificación de CI antes de aprovisionar un número real.

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

    Llamadas salientes y entrantes

    Realiza y recibe llamadas vía REST o SIP — mismo modelo de autenticación, mismo contrato de idempotencia.

  2. 02

    Flujos de llamada declarativos en JSON

    Compón say, play, gather, record, transfer y dial como un array JSON plano.

  3. 03

    Grabación con transcripción

    Grabación opcional en cualquier tramo; transcripciones autogeneradas en más de 40 idiomas.

  4. 04

    TTS en streaming, menos de 250 ms

    Audio del primer byte vía HTTP chunked transfer o WebSocket — facturado por carácter.

  5. 05

    OTP de voz a través de verificaciones

    El mismo recurso bird.verifications que para SMS OTP; solo cambia el campo channel.

  6. 06

    Números virtuales en más de 100 países

    Aprovisiona números largos desde el panel o la API de números en segundos.

  7. 07

    Llamadas enmascaradas

    Los números del llamante y del destinatario nunca se exponen entre sí — privacidad por enrutamiento.

  8. 08

    SmartRouting por llamada

    Operador de menor coste seleccionado en tiempo real para cada tramo, con reselección de ruta en caso de fallo.

  9. 09

    Eventos webhook por llamada

    call.ringing, call.answered, call.completed y similares — firmados con HMAC, protegidos contra repetición.

  10. 10

    SDK de cliente WebRTC

    Puentes de navegador a PSTN desde un único paquete npm; funciona en cualquier runtime moderno.

Why we build Voice

La voz es el canal que todos tratan como algo secundario. Nosotros no.

La voz es difícil — latencia inferior al segundo, enrutamiento real de operador, cumplimiento en grabaciones — y por eso la mayoría de proveedores le dan su propia autenticación, su propio SDK, su propio contrato de webhooks. Nos tomamos el tiempo de darle la misma forma que cualquier otro endpoint de Bird: misma autenticación, misma idempotencia, mismo formato de error. El control de llamadas es solo 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..."

Cada cambio de estado es un webhook.

Payloads firmados con HMAC, protegidos contra repetición, idempotentes. El mismo formato en cada canal de Bird — aprende uno y los conoces todos.

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

Programación de reintentos: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter tras el último intento; cada evento en dead-letter se puede reproducir desde el panel o la API.

  • call.queuedAceptada por la API y en cola para marcación.
  • call.ringingLa línea receptora está sonando — estado previo a la respuesta.
  • call.answeredEl destinatario contestó; la facturación comienza con este evento.
  • call.completedLa llamada finalizó normalmente — duración y precio en el payload.
  • call.failedFallo permanente (ocupado, sin respuesta, rechazo del operador) con un motivo tipificado.
  • call.recording.readyLa grabación está codificada y disponible en la URL firmada del payload.
  • call.transcript.readyTranscripción completada; el payload incluye idioma y segmentos.

OTP de voz es el mismo recurso que OTP por SMS.

Realiza una llamada personalizada o delega la verificación al runtime. Misma autenticación, misma idempotencia, mismo formato de error — el campo channel es lo único que cambia.

Llamada personalizada.

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

Compón cualquier flujo — say, gather, transfer — para los casos en que quieras el script en tu código.

Verificaciones.

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

Una línea. Bird elige la ruta, ejecuta la comprobación antifraude y envía el audio. Mismo código en todos los canales.

Por minuto, según el país.

TTS en streaming facturado por carácter. Los descuentos por volumen se aplican automáticamente en los umbrales habituales. Sin tarifa por puesto, sin funciones bloqueadas detrás de compromisos anuales.

Empieza con un canal.
Añade los demás cuando estés listo.

Una clave API de prueba es tuya de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

ComenzarLeer documentacióno

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

Cursor