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.
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.
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.
- 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.
- 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.
- 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.
- 04
SMS bidirecional de entrada
As mensagens de entrada chegam como webhooks assinados com HMAC no número que provisionou.
- 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.
- 06
A2P 10DLC no dashboard
Registo de marca e campanha gerido na consola; o estado pode ser consultado via API.
- 07
Consulta MNP antes do envio
Resolvemos a operadora atual do destinatário em cada envio para que a rota esteja sempre correta.
- 08
Conformidade STOP / HELP
Palavras-chave de opt-out respeitadas automaticamente por destinatário; a lista de supressão pode ser consultada.
- 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
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.
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.
{
"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.
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.
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.