Uma API para cada
e-mail que você envia.
Transacional ou marketing, uma mensagem ou cem, enviadas pela mesma Email API, com idempotência, supressão e webhooks integrados. Envie HTML puro ou renderize seus templates React Email.
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { WelcomeEmail } from "./emails/welcome";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
});
const { data, error } = await bird.email.send({
from: "Bird <hello@bird.com>",
to: ["ada@example.com"],
subject: "Your invite is ready",
html: await render(<WelcomeEmail name="Ada" />),
}).safe();
if (error) throw error;
console.log(data.id);
// → "em_2bX91Yk8h..."
You can sign in any time at bird.com/login.
Your test API key is on your dashboard, ready to send.
Já envia por SMTP?
Mantenha seu cliente SMTP existente e conecte-o ao relay do Bird. Use a página de configuração SMTP para hosts regionais, portas TLS e autenticação. Se sua aplicação precisa receber e processar mensagens, comece pelo e-mail de entrada.
Envie seu primeiro e-mail em cinco minutos.
Na linguagem que você já usa.
O envio é o núcleo da Bird Email API. Seu primeiro envio pode ir para um endereço sandbox (delivered@messagebird.dev), para que você exercite toda a plataforma (envios, webhooks, supressão) antes de verificar um domínio.
const msg = await bird.email.send({
from: { email: "onboarding@messagebird.dev", name: "Bird" },
to: ["delivered@messagebird.dev"],
subject: "Hello from Bird",
html: "<p>My first Bird email.</p>",
});
console.log(msg.id, msg.status); // "em_…", "accepted"Cinco coisas que você não precisa construir.
O mesmo contrato em todos os canais Bird.
- 01
Transacional + marketing.
O mesmo endpoint envia uma redefinição de senha ou uma campanha. Um campo de categoria define como supressão e cancelamentos de inscrição se aplicam.
- 02
Templates do seu jeito.
Envie HTML puro, renderize templates React Email para HTML no seu app e envie o resultado, ou nomeie um template armazenado e deixe a renderização por nossa conta. Sua toolchain, sem mudanças.
- 03
Lote de até 100.
Até 100 mensagens independentes por chamada, cada uma com seu próprio destinatário e variáveis, validadas como uma unidade para que você nunca envie pela metade.
- 04
Idempotente por contrato.
Todo envio aceita uma chave de idempotência, então uma solicitação repetida após um timeout retorna o resultado original em vez de enviar duas vezes.
- 05
Um webhook a cada mudança de estado.
Aceito, entregue, aberto, clicado, devolvido, denunciado. Cada um assinado com HMAC, protegido contra replay, idempotente, o mesmo envelope em todos os canais.
Faça a primeira requisição a partir da sua aplicação.
Crie uma conta e uma chave API, depois siga o guia de envio com um destinatário de teste.
Já envia por outro serviço? Migre em uma tarde.
A chamada que você já faz quase não muda: troque o client, mantenha seus templates, aponte seus webhooks para um endpoint. Os guias de migração cobrem SendGrid, Amazon SES, Mailgun e Resend.
import sgMail from "@sendgrid/mail";
sgMail.setApiKey(process.env.SENDGRID_API_KEY!);
await sgMail.send({
from: "hello@yourdomain.com",
to: "delivered@messagebird.dev",
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
});
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.email.send({
from: "hello@yourdomain.com",
to: ["delivered@messagebird.dev"],
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
});
Uma mensagem ou cem, uma chamada.
Agrupe até 100 mensagens independentes em uma solicitação, cada uma com seu próprio destinatário e variáveis. O lote é validado como uma unidade: uma mensagem inválida rejeita a chamada com um 422, para que você nunca envie pela metade. Uma única chave de idempotência torna toda a solicitação segura para tentar novamente.
import { BirdClient } from "@messagebird/sdk";
import { render } from "@react-email/render";
import { Digest } from "./emails/digest";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const messages = await Promise.all(
users.map(async (u) => ({
from: "Acme <hello@yourdomain.com>",
to: [u.email],
subject: "Your weekly digest",
html: await render(<Digest user={u} />),
})),
);
const { data: batch, error } = await bird.email
.sendBatch(messages)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);
Anexe seu próprio contexto a cada envio.
Tags são uma dimensão de primeira classe e filtrável: segmente entrega e engajamento por campanha, template ou experimento nas estatísticas da API (até 20 por mensagem). Metadata é JSON arbitrário, até 2 KB, que vai e volta intacto em cada leitura e webhook, para que seus próprios IDs acompanhem a mensagem.
await bird.email.send({
from: "Acme <hello@yourdomain.com>",
to: ["delivered@messagebird.dev"],
subject: "Your invite is ready",
html: "<p>Welcome aboard, Ada.</p>",
tags: [{ name: "campaign", value: "spring-2026" }],
metadata: { user_id: "u_2bX91", order_id: "ord_5512" },
});
Acompanhe cada mensagem por todo o seu ciclo de vida.
Um envio retorna 202 imediatamente; o resultado chega como um webhook por destinatário. Verifique uma assinatura, faça switch pelo tipo: o mesmo envelope que você já trata para SMS, voz e WhatsApp.
import { bird } from "@/lib/bird";
export async function POST(req: Request) {
const event = bird.webhooks.unwrap(
await req.text(),
Object.fromEntries(req.headers),
);
switch (event.type) {
case "email.delivered":
await markDelivered(event.data.email_id);
break;
case "email.bounced":
await flag(event.data.recipient, event.data.bounce_type);
break;
}
return new Response(null, { status: 204 });
}
Hard bounces e reclamações atualizam as supressões de destinatários. Cancelamentos de inscrição registram uma preferência de opt-out. Esses registros são verificados ao processar envios posteriores.
email.acceptedO envio foi aceito e está sendo preparado para entrega.email.processedNa fila para o servidor de e-mail do destinatário.email.deliveredO servidor de e-mail do destinatário aceitou a mensagem.email.deferredRecusado temporariamente, tentaremos novamente.email.bouncedFalha permanente: tipo de bounce e código SMTP no payload.email.openedO destinatário abriu a mensagem. Pode disparar mais de uma vez.email.clickedO destinatário clicou em um link rastreado.email.complainedO destinatário denunciou a mensagem como spam.email.unsubscribedO destinatário cancelou a inscrição por um link rastreado de unsubscribe.
Teste cada resultado antes de ir para produção.
No sandbox, o endereço do destinatário define o resultado, sem depender do estado da sua conta. Envie para delivered@messagebird.dev para uma entrega limpa, ou para bounce@, softbounce@, deferred@, complaint@ e suppressed@ para percorrer cada caminho de falha pelo pipeline real e pelos webhooks reais. Sem domínio para verificar, sem risco para sua reputação. A produção é intencionalmente controlada: você verifica um domínio primeiro, e um novo domínio ou IP dedicado passa por aquecimento antes de receber volume total.
Aprofunde-se na documentação.
Leia o guia de envio, configure eventos de e-mail e webhooks ou, se você está migrando de outro provedor, siga um guia de migração do SendGrid, SES, Mailgun ou Resend.
Teste o comportamento em torno do envio.
Uma chamada de envio funcional é o início de uma integração. Simule bounces e reclamações, trate entregas duplicadas de webhooks e defina como sua aplicação agenda mensagens ou recebe respostas.
Continue com o fluxo que você precisa
Escolha o produto ou guia que corresponde à próxima tarefa.
161%
Aumento nas taxas de abertura de e-mail relatado na história de cliente da Zillow.
Construído com Bird
Quando o imóvel certo aparece, o e-mail precisa chegar.
A Zillow trouxe alertas de imóveis urgentes para a Bird, com capacidade para lidar com picos de envio e analytics para entender o engajamento. A equipe relatou um aumento de 161% nas taxas de abertura no primeiro mês.
Planejando uma migração ou um envio de alto volume?
Fale com vendasPerguntas sobre envio de e-mail
Posso enviar tanto email transacional como de marketing?
O que acontece se um pedido expirar e eu o repetir?
Posso agendar um envio para mais tarde?
Posso anexar ficheiros?
Conecte o envio ao restante do seu fluxo
Fale com nosso time de email
Crie sua próxima integração de email.
Converse sobre mensagens transacionais, envios em lote e eventos de entrega. Vamos ajudar você a planejar sua integração, volume de envio e migração.
Crie sua conta, depois crie uma chave API e envie uma mensagem de teste.
Escale sem
perder o controle.
Organize equipes em espaços de trabalho, controle o acesso à API e rastreie alterações nos logs de auditoria.
Audit log
Production- Workspace
- Production
- Resource
- Delivery agent
- ReadRead & write