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.

welcome.tsx
200 · 1.2s
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..."

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.

1
2
3
4
5
6
7
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.

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

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

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

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

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

Comece agora

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.

sendgrid.ts
SendGrid
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>",
});
bird.ts
Bird
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.

digest.ts
202 · batch
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.

tagged.ts
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.

app/api/webhooks/bird/route.ts
signed
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.

161%

Aumento nas taxas de abertura de e-mail relatado na história de cliente da Zillow.

Leia a história 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 vendas

Perguntas sobre envio de e-mail

Posso enviar tanto email transacional como de marketing?
Sim, ambos passam pela mesma API de envio. A única diferença é o campo category, que determina como se aplicam as supressões e cancelamentos de subscrição. Escolha transactional para reposições de palavra-passe e recibos, e marketing para campanhas.
O que acontece se um pedido expirar e eu o repetir?
Envie um cabeçalho Idempotency-Key com cada envio lógico. Se o primeiro pedido foi bem-sucedido mas não recebeu a resposta, repeti-lo com a mesma chave devolve-lhe o resultado original com um cabeçalho Idempotency-Replay, em vez de enviar o email duas vezes.
Posso agendar um envio para mais tarde?
Defina scheduled_at para qualquer hora entre 30 segundos e 30 dias à frente. O envio é devolvido como aceite imediatamente e permanece agendado até ser enviado, para que possa cancelá-lo a qualquer momento antes disso.
Posso anexar ficheiros?
Sim, em base64 no array attachments. Para mostrar uma imagem inline, atribua-lhe um content_id e referencie-o no seu HTML com cid:. Mantenha os ficheiros brutos a 15 MB ou menos para que a mensagem caiba no limite de 20 MB depois de codificada, e note que tipos de conteúdo executáveis e de script são recusados antes do envio.

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.

Seus dados

Produtos de interesse

Opcional

Política de privacidade

Escale sem
perder o controle.

Organize equipes em espaços de trabalho, controle o acesso à API e rastreie alterações nos logs de auditoria.

BirdHarborOrganization
WorkspacesProductionSandbox

Delivery agent

API key · Customer operations team
Active
PermissionsAccess
EmailRead & write
SMSRead & write
ALAlex Lee AdminPermissions updated

Audit log

Production
Workspace
Production
Resource
Delivery agent
WhatsApp
ReadRead & write
Succeeded

Comece com Email.
Construa em vários canais com a Bird.

Sua próxima ideia.
Pronta para conectar.