Una API para cada
correo que envías.

Transaccional o marketing, un mensaje o cien, enviados por la misma Email API, con idempotencia, supresión y webhooks integrados. Pasa HTML directo o renderiza tus plantillas de 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..."

¿Ya envías a través de SMTP?

Conserva tu cliente SMTP actual y conéctalo al relay de Bird. Usa la página de configuración de SMTP para hosts regionales, puertos TLS y autenticación. Si tu aplicación necesita recibir y analizar mensajes, empieza con el correo entrante.

Envía tu primer email en cinco minutos.

Desde el lenguaje que ya usas.

El envío es el núcleo de la Bird Email API. Tu primer envío puede ir a una dirección sandbox (delivered@messagebird.dev), así puedes ejercitar toda la plataforma (envíos, webhooks, supresión) antes de verificar un dominio.

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 cosas que no construyes tú.

El mismo contrato en cada canal de Bird.

  1. 01

    Transaccional + marketing.

    El mismo endpoint envía un restablecimiento de contraseña o una campaña. Un campo de categoría decide cómo se aplican la supresión y las cancelaciones de suscripción.

  2. 02

    Plantillas a tu manera.

    Pasa HTML directo, renderiza plantillas de React Email a HTML en tu app y envía el resultado, o nombra una plantilla almacenada y deja que se renderice por ti. Tu toolchain, sin cambios.

  3. 03

    Lotes de hasta 100.

    Hasta 100 mensajes independientes por llamada, cada uno con su propio destinatario y variables, validados como una unidad para que nunca envíes a medias.

  4. 04

    Idempotente por contrato.

    Cada envío acepta una clave de idempotencia, así que un reintento tras un timeout devuelve el resultado original en lugar de enviar dos veces.

  5. 05

    Un webhook en cada cambio de estado.

    Aceptado, entregado, abierto, clicado, rebotado, reportado. Cada uno firmado con HMAC, protegido contra replay, idempotente, el mismo formato en cada canal.

Haz la primera solicitud desde tu aplicación.

Crea una cuenta y una clave API, luego sigue la guía de envío con un destinatario de prueba.

Empezar

¿Ya envías desde otro servicio? Migra en una tarde.

La llamada que ya haces apenas cambia: intercambia el cliente, conserva tus plantillas, apunta tus webhooks a un solo endpoint. Las guías de migración cubren SendGrid, Amazon SES, Mailgun y 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>",
});

Un mensaje o cien, una sola llamada.

Agrupa hasta 100 mensajes independientes en una solicitud, cada uno con su propio destinatario y variables. El lote se valida como unidad: un mensaje inválido rechaza la llamada con un 422, así nunca envías a medias. Una sola clave de idempotencia hace que toda la solicitud sea segura de reintentar.

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`);

Adjunta tu propio contexto a cada envío.

Las etiquetas son una dimensión de primera clase y filtrable: segmenta entrega e interacción por campaña, plantilla o experimento en la API de estadísticas (hasta 20 por mensaje). Los metadatos son JSON arbitrario, hasta 2 KB, que viajan intactos en cada lectura y webhook, así tus propios IDs acompañan al mensaje.

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" },
});

Sigue cada mensaje durante todo su ciclo de vida.

Un envío devuelve 202 de inmediato; el resultado llega como un webhook por destinatario. Verifica una firma, filtra por tipo: el mismo formato que ya manejas para SMS, voz y 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 });
}

Los rebotes permanentes y las quejas actualizan las supresiones de destinatarios. Las cancelaciones de suscripción registran una preferencia de exclusión. Esos registros se verifican al procesar envíos posteriores.

  • email.acceptedEl envío fue aceptado y se está preparando para la entrega.
  • email.processedEn cola para el servidor de correo del destinatario.
  • email.deliveredEl servidor de correo del destinatario aceptó el mensaje.
  • email.deferredRechazado temporalmente, se reintentará.
  • email.bouncedFallo permanente: tipo de rebote y código SMTP en el payload.
  • email.openedEl destinatario abrió el mensaje. Puede dispararse más de una vez.
  • email.clickedEl destinatario hizo clic en un enlace rastreado.
  • email.complainedEl destinatario reportó el mensaje como spam.
  • email.unsubscribedEl destinatario canceló su suscripción a través de un enlace de baja rastreado.

Prueba cada resultado antes de pasar a producción.

En el sandbox, la dirección del destinatario decide el resultado, sin depender del estado de tu cuenta. Envía a delivered@messagebird.dev para una entrega limpia, o a bounce@, softbounce@, deferred@, complaint@ y suppressed@ para recorrer cada ruta de fallo a través del pipeline real y los webhooks reales. Sin dominio que verificar, sin riesgo para tu reputación. La producción está deliberadamente restringida: primero verificas un dominio, y un dominio nuevo o IP dedicada pasa por un calentamiento antes de asumir volumen completo.

Profundiza en la documentación.

Lee la guía de envío, conecta eventos de email y webhooks o, si vienes de otro proveedor, sigue una guía de migración desde SendGrid, SES, Mailgun o Resend.

Prueba el comportamiento del envío.

Una llamada de envío funcional es el inicio de una integración. Ensaya rebotes y quejas, gestiona entregas duplicadas de webhooks y decide cómo tu aplicación programa mensajes o recibe respuestas.

161%

Aumento en las tasas de apertura de email reportado en la historia de cliente de Zillow.

Lee la historia de Zillow

Creado con Bird

Cuando aparece la casa indicada, el email tiene que llegar.

Zillow trasladó sus alertas de propiedades urgentes a Bird, con la capacidad de gestionar picos de envío y la analítica para entender la interacción. Su equipo reportó un aumento del 161 % en las tasas de apertura durante el primer mes.

¿Planeas una migración o un envío de mayor volumen?

Contactar con ventas

Preguntas sobre el envío de correo

¿Puedo enviar correo tanto transaccional como de marketing?
Sí, ambos se envían a través de la misma API de envío. La única diferencia es el campo de categoría, que determina cómo se aplican las supresiones y las cancelaciones de suscripción. Elige transactional para restablecimiento de contraseñas y recibos, y marketing para campañas.
¿Qué pasa si una solicitud expira y la reintento?
Envía un encabezado Idempotency-Key con cada envío lógico. Si la primera solicitud tuvo éxito pero nunca viste la respuesta, reproducirla con la misma clave te devuelve el resultado original con un encabezado Idempotency-Replay, en lugar de enviar el correo dos veces.
¿Puedo programar un envío para más tarde?
Establece scheduled_at en cualquier momento entre 30 segundos y 30 días en el futuro. El envío se devuelve como aceptado de inmediato y permanece programado hasta que se ejecute, por lo que puedes cancelarlo en cualquier momento antes de eso.
¿Puedo adjuntar archivos?
Sí, como base64 en el array de attachments. Para mostrar una imagen en línea, dale un content_id y referéncialo desde tu HTML con cid:. Mantén los archivos sin codificar en 15 MB o menos para que el mensaje quepa dentro del límite de 20 MB una vez codificado, y ten en cuenta que los tipos de contenido ejecutable y de script se rechazan antes del envío.

Habla con nuestro equipo de email

Crea tu próxima integración de email.

Hablemos de mensajes transaccionales, envíos masivos y eventos de entrega. Te ayudaremos a planificar tu integración, volumen de envío y migración.

Crea tu cuenta, luego crea una clave API y envía un mensaje de prueba.

Tus datos

Productos de interés

Opcional

Política de privacidad

Escala sin
perder el control.

Organiza equipos en espacios de trabajo, controla el acceso a la API y rastrea cambios en los registros de auditoría.

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

Empieza con Email.
Construye en todos los canales con Bird.

Tu próxima idea.
Lista para conectar.