SMS is being upgraded

A API de SMS para developers que precisam mesmo de entregar.

150+ countries, 240 direct-to-carrier connections, one auth model. About 40% of the world's commercial SMS volume transits the Bird network — we've been at this a decade. 95% of messages delivered in under 2.5 seconds.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@messagebird/sdk";

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

const code = generateOtp();

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();

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

5 minutos do npm install ao primeiro envio

Envie um SMS na linguagem que já utiliza.

SDKs em todos os principais runtimes. O primeiro envio vai para um destinatário de teste autorizado (+15005550006) para que possa incluir um check de CI antes de provisionar um número.

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

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

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: "Hello from Node.",
}).safe();

Ten things we file, configure, and route so you don't.

Routing, compliance, and inbound primitives, named and audit-able.

  1. 01

    Cobertura em mais de 150 países

    Uma API unificada, uma única relação de faturação — sem contratos por região para andar a perseguir.

  2. 02

    240 ligações diretas a operadoras

    Sem agregadores intermediários a comer margem ou a perder recibos entre nós e o operador móvel.

  3. 03

    Routing de nível operador

    Reseleção de rota em tempo real quando um caminho de operadora degrada; o failover acontece antes de dar conta.

  4. 04

    SMS bidirecional de entrada

    As mensagens de entrada chegam como webhooks assinados com HMAC no número que provisionou.

  5. 05

    Números de todos os tipos

    Long codes, short codes, toll-free e sender IDs alfanuméricos — provisionados através de um único endpoint.

  6. 06

    A2P 10DLC no dashboard

    Registo de marca e campanha gerido na consola; o estado pode ser consultado via API.

  7. 07

    Consulta MNP antes do envio

    Resolvemos a operadora atual do destinatário em cada envio para que a rota esteja sempre correta.

  8. 08

    Conformidade STOP / HELP

    Palavras-chave de opt-out respeitadas automaticamente por destinatário; a lista de supressão pode ser consultada.

  9. 09

    Recibos de entrega como webhooks

    Cada transição de estado dispara um evento assinado — de sms.queued até sms.delivered ou sms.failed.

  10. 10

    Segmentos e segurança Unicode

    O SDK conta os segmentos antes do envio e avisa sobre alterações de encoding que dividiriam a mensagem.

Por que criamos o SMS

SMS é o canal complicado. Construímos a API que o torna aborrecido.

Every country has different rules, every carrier has different routes, every region has different sender-ID conventions. We've been running SMS for ten years, so that knowledge lives behind one endpoint, one auth model, one webhook contract. Whatever changes upstream, the call you wrote against bird.sms.send doesn't.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@messagebird/sdk";

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

const code = generateOtp();

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();

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

Cada mudança de estado é um webhook.

Payloads assinados com HMAC, protegidos contra replay, idempotentes. O mesmo envelope em todos os canais Bird — aprenda um, aprendeu todos.

POST /webhooks/bird
signed
{
  "type": "sms.delivered",
  "id":   "evt_7jR42x...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "sms_id":     "sms_4kT01Lq2m",
    "from":       "Bird",
    "to":         "+15005550006",
    "mcc_mnc":    "310-260",
    "country":    "US",
    "segments":   1,
    "latency_ms": 1284
  }
}

Calendário de tentativas: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter após a última tentativa; cada evento em dead-letter pode ser reenviado a partir do dashboard ou da API.

  • sms.queuedAceite pela API e colocado em fila para entrega à operadora.
  • sms.sentSubmetido ao SMSC da operadora de destino.
  • sms.deliveredRecibo de entrega recebido da operadora (DLR).
  • sms.failedFalha permanente — rejeição da operadora, número inválido, supressão ativa.
  • sms.receivedMensagem de entrada num dos seus números provisionados.
  • sms.opted_outO destinatário enviou a palavra-chave STOP; envios futuros para este número serão suprimidos.

Se já integrou SMS, já integrou WhatsApp.

Mesmo modelo de autenticação, mesmo contrato de idempotência, mesmo envelope de erro, mesma estrutura de webhook. A diferença está no que cada um faz — não em como o chama.

SMS.

sms
await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your code is ${code}.`,
});

Um verbo. Texto simples. To/from numérico. A estrutura que qualquer developer já tem na memória muscular.

WhatsApp.

whatsapp
await bird.whatsapp.send({
  from: "+15551234567",
  to:   "+15005550006",
  template: { name: "otp", variables: { code } },
});

Mesmo verbo. Payload diferente — com templates, opt-in, no canal que dois mil milhões de pessoas abrem diariamente.

Depende do país. De menos de um cêntimo a alguns cêntimos por segmento.

Preço por utilização. As tarifas de SMS dependem do país de destino e da rota — a tabela completa está na página de preços. Descontos por volume aplicados automaticamente ao nível da conta. Sem taxa por utilizador, sem funcionalidades bloqueadas atrás de compromissos anuais.

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours: