Un'unica API per ogni
email che invii.
Transazionali o di marketing, un messaggio o cento, inviati attraverso la stessa Email API, con idempotenza, soppressione e webhook integrati. Passa HTML grezzo o renderizza i tuoi template 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.
Invii già tramite SMTP?
Mantieni il tuo client SMTP esistente e collegalo al relay di Bird. Usa la pagina di configurazione SMTP per host regionali, porte TLS e autenticazione. Se la tua applicazione deve ricevere e analizzare i messaggi, inizia con le email in entrata.
Invia la tua prima email in cinque minuti.
Dal linguaggio che già usi.
L'invio è il cuore della Bird Email API. Il primo invio può andare a un indirizzo sandbox (delivered@messagebird.dev), così puoi testare l'intera piattaforma (invii, webhook, soppressione) prima di verificare un dominio.
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"Cinque cose che non devi costruire da solo.
Lo stesso contratto su ogni canale Bird.
- 01
Transazionali + marketing.
Lo stesso endpoint invia un reset password o una campagna. Un campo categoria decide come si applicano soppressione e disiscrizioni.
- 02
Template come preferisci.
Passa HTML grezzo, renderizza i template React Email in HTML nella tua app e invia il risultato, oppure indica un template salvato e fallo renderizzare per te. La tua toolchain, invariata.
- 03
Batch fino a 100.
Fino a 100 messaggi indipendenti per chiamata, ciascuno con il proprio destinatario e le proprie variabili, validati come un'unica unità così non invii mai a metà.
- 04
Idempotente per contratto.
Ogni invio accetta una chiave di idempotenza: una richiesta ripetuta dopo un timeout restituisce il risultato originale invece di inviare due volte.
- 05
Un webhook per ogni cambio di stato.
Accettato, consegnato, aperto, cliccato, rimbalzato, segnalato. Ognuno firmato con HMAC, protetto da replay, idempotente, lo stesso formato su ogni canale.
Effettua la prima richiesta dalla tua applicazione.
Crea un account e una chiave API, poi segui la guida all'invio con un destinatario di test.
Invii già da un'altra piattaforma? Migra in un pomeriggio.
La chiamata che già fai cambia appena: sostituisci il client, tieni i tuoi template, punta i webhook a un unico endpoint. Le guide alla migrazione coprono 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>",
});
Un messaggio o cento, una sola chiamata.
Raggruppa fino a 100 messaggi indipendenti in una richiesta, ciascuno con il proprio destinatario e le proprie variabili. Il batch viene validato come unità: un messaggio non valido rifiuta la chiamata con un 422, così non invii mai a metà. Un'unica chiave di idempotenza rende sicuro riprovare l'intera richiesta.
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`);
Associa il tuo contesto a ogni invio.
I tag sono una dimensione di primo livello e filtrabile: segmenta consegne e interazioni per campagna, template o esperimento nelle statistiche API (fino a 20 per messaggio). I metadati sono JSON arbitrario, fino a 2 KB, che transita inalterato in ogni lettura e webhook, così i tuoi ID viaggiano con il messaggio.
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" },
});
Segui ogni messaggio lungo tutto il suo ciclo di vita.
Un invio restituisce 202 immediatamente; l'esito arriva come webhook per destinatario. Verifica una firma, fai switch sul tipo: lo stesso formato che già gestisci per SMS, voce 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 });
}
I bounce permanenti e i reclami aggiornano le soppressioni dei destinatari. Le disiscrizioni registrano una preferenza di opt-out. Questi record vengono verificati durante l'elaborazione degli invii successivi.
email.acceptedL'invio è stato accettato ed è in preparazione per la consegna.email.processedIn coda verso il mail server del destinatario.email.deliveredIl mail server del destinatario ha accettato il messaggio.email.deferredRifiutato temporaneamente, verrà ritentato.email.bouncedFallito in modo permanente: tipo di bounce e codice SMTP nel payload.email.openedIl destinatario ha aperto il messaggio. Può scattare più di una volta.email.clickedIl destinatario ha cliccato un link tracciato.email.complainedIl destinatario ha segnalato il messaggio come spam.email.unsubscribedIl destinatario si è disiscritto tramite un link di disiscrizione tracciato.
Testa ogni esito prima di andare in produzione.
Nella sandbox l'indirizzo del destinatario decide il risultato, senza dipendere dallo stato del tuo account. Invia a delivered@messagebird.dev per una consegna pulita, oppure a bounce@, softbounce@, deferred@, complaint@ e suppressed@ per attivare ogni percorso di errore attraverso la pipeline e i webhook reali. Nessun dominio da verificare, nessun rischio per la tua reputazione. La produzione è volutamente controllata: prima verifichi un dominio, e un nuovo dominio o IP dedicato passa attraverso il warmup prima di gestire il volume pieno.
Approfondisci nella documentazione.
Leggi la guida all'invio, configura eventi email e webhook oppure, se stai migrando da un altro provider, segui una guida alla migrazione da SendGrid, SES, Mailgun o Resend.
Testa il comportamento legato all'invio.
Una chiamata di invio funzionante è l'inizio di un'integrazione. Simula bounce e reclami, gestisci le consegne di webhook duplicate e decidi come la tua applicazione pianifica i messaggi o riceve le risposte.
Prosegui con il flusso di lavoro di cui hai bisogno
Scegli il prodotto o la guida adatti al prossimo obiettivo.
161%
Aumento del tasso di apertura delle email riportato nella storia di Zillow.
Costruito con Bird
Quando appare la casa giusta, l'email deve arrivare.
Zillow ha portato gli avvisi immobiliari urgenti su Bird, con la capacità di gestire picchi di invio e l'analisi per comprendere il coinvolgimento. Il team ha riportato un aumento del 161% nel tasso di apertura nel primo mese.
Stai pianificando una migrazione o un invio a volumi più elevati?
Contatta il team commercialeDomande sull'invio di email
Posso inviare sia email transazionali che di marketing?
Cosa succede se una richiesta va in timeout e la reinvio?
Posso programmare un invio per un momento successivo?
Posso allegare file?
Collega l'invio al resto del tuo flusso di lavoro
Parla con il nostro team email
Costruisci la tua prossima integrazione email.
Discuti di messaggi transazionali, invii in batch ed eventi di consegna. Ti aiuteremo a pianificare integrazione, volumi di invio e migrazione.
Crea il tuo account, poi crea una chiave API e invia un messaggio di test.
Scala senza
perdere il controllo.
Organizza i team in spazi di lavoro, controlla l'accesso alle API e traccia le modifiche tramite log di audit.
Audit log
Production- Workspace
- Production
- Resource
- Delivery agent
- ReadRead & write