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

Configure em:
Cursor

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.`,
  category: "authentication",
}).safe();

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

Today at 2:14 PM

Hey Ada, your Bird sign-in code is 482917. It'll expire in 10 minutes. Don't share it with anyone.
482917
Delivered

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

    Cobertura em mais de 150 países

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

  2. 02

    240 direct-to-carrier links

    No middleman aggregator skimming margin or dropping receipts between us and the MNO.

  3. 03

    Routing de nível operador

    Real-time route reselection when a carrier path degrades; failover happens before you notice.

  4. 04

    SMS bidirecional de entrada

    Inbound messages arrive as HMAC-signed webhooks on the number you provisioned.

  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 in-dashboard

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

  7. 07

    MNP lookup before send

    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

    Delivery receipts as webhooks

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

  10. 10

    Segment and Unicode safety

    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.

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.`,
  category: "authentication",
}).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 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":         "Bird",
    "tags":         [{ "name": "campaign", "value": "otp" }],
    "metadata":     { "user_id": "usr_12345" },
    "carrier":      "Verizon",
    "mcc_mnc":      "311480"
  }
}

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.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({
  to:       "+15005550006",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

WhatsApp

Same verb. Different payload: templated, opted-in, in the channel two billion people open daily.

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

Preços

From sub-cent to a few cents per segment

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.

Trusted every day by teams that build world-class software

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:

Cursor