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

Configure em:
Cursor

190+ 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-notification.ts
202 · 0.4s
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:       "+31612345678",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
Hi Ada, reminder of your appointment tomorrow at 14:30 with Dr. Kowalski.
Your order #4821 has shipped. Track it: bird.ly/t/4821x
Your subscription renews on 3 Sep for €12/mo. Manage it here: bird.ly/account

5 minutos do npm install ao primeiro envio

Envie um SMS na linguagem que já utiliza.

SDKs em todos os principais runtimes. Envie para o destinatário de teste autorizado +15005550006 e Bird simula todo o ciclo de vida até à entrega, para que uma verificação de CI nunca toque numa operadora. É um número dos EUA, por isso o envio ainda precisa de um número dos EUA como remetente.

1
2
3
4
5
6
7
const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

Dez coisas que nós registamos, configuramos e encaminhamos para que não tenha de o fazer.

Encaminhamento, conformidade e primitivas de entrada — nomeadas e auditáveis.

  1. 01

    190+ country coverage

    Uma API unificada, um único relacionamento de faturação. Sem contratos por região para gerir.

  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

    Códigos longos, códigos curtos, 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.accepted 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.

O SMS é um canal dentro de um conjunto de ferramentas mais amplo. Verifique utilizadores com códigos de uso único através de Verifications, confirme o tipo de linha e o operador de um número antes de enviar com Lookup, ou alcance o mesmo dispositivo com cartões enriquecidos por RCS.

A comparar Bird com o incumbente? Bird vs Twilio para SMS coloca as duas chamadas de envio, ambas as interfaces 10DLC, e o que cada um oferece a um agente de código, lado a lado.

Por que criamos o SMS

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

Cada país tem regras diferentes, cada operadora tem rotas diferentes, cada região tem convenções de sender-ID diferentes. Gerimos SMS há dez anos, por isso todo esse conhecimento está por trás de um único endpoint, um único modelo de autenticação, um único contrato de webhook. Independentemente do que mude a montante, a chamada que escreveu para bird.sms.send continua a funcionar.

send-notification.ts
202 · 0.4s
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:       "+31612345678",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

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

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 e terá aprendido todos.

POST /webhooks/bird
signed
{
  "type": "sms.delivered",
  "timestamp": "2026-05-19T15:42:01.221Z",
  "data": {
    "sms_id":       "sms_4kT01Lq2m",
    "workspace_id": "ws_8KQ2",
    "to":           "+15005550006",
    "from":         "+12025550188",
    "tags":         [{ "name": "campaign", "value": "otp" }],
    "metadata":     { "user_id": "usr_12345" },
    "carrier":      "Verizon",
    "mcc_mnc":      "311480",
    "cost": {
      "amount":             "0.0079",
      "currency_code":      "USD",
      "transaction_amount": "0.0079",
      "passthrough_amount": null
    }
  }
}

Agenda de tentativas: 5s, 5m, 30m, 2h, 5h e depois 10h duas vezes. Após a última, a entrega falha permanentemente, e o reenvio permite recuperá-la a partir do painel ou da API.

  • sms.acceptedAceite 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.rejectedRejeitado antes do envio à operadora: destino inválido, supressão ou política de conteúdo.
  • sms.undeliveredA operadora reportou uma falha não permanente na entrega.
  • sms.failedFalha terminal: a mensagem não será entregue.

Se já integrou SMS, já integrou WhatsApp.

O mesmo modelo de autenticação, o mesmo contrato de idempotência, o mesmo envelope de erros, a mesma forma de webhook. A diferença está no que cada um faz, não em como o invoca.

SMS

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

otp.ts
await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

WhatsApp

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

otp.ts
await bird.whatsapp.send({
  to: "+15005550006",
  template: {
    slug: "bird_otp",
    language: "en",
    components: [
      { type: "body", parameters: [{ type: "text", text: code }] },
    ],
  },
});

Preços

De menos de um cêntimo a alguns cêntimos por segmento

Com preço por utilização e país de destino. A tabela completa por país está na página de preços, e os descontos por volume aplicam-se automaticamente ao nível da conta. Sem taxa de plataforma, sem taxa por lugar, sem funcionalidades bloqueadas por trás de compromissos anuais.

Escolhida todos os dias por equipas que criam software de classe mundial

Send your first request before you write any code.

The whole public API is a Postman collection, converted from the same OpenAPI specification the SDKs are generated from, with an example request and response on every endpoint. Fork it into your own workspace, set an API key, and send a live request.

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.

Usa Claude Code, Cursor ou Codex? Copie um prompt de configuração e o seu agente instala o Bird CLI e as skills por si. Escolha o seu:

Cursor