Email SDK
Adapters

Brevo

Send through the Brevo transactional email API with full field support and metadata mapped to template params.

The Brevo adapter calls the Brevo transactional email API with plain fetch. It authenticates with Brevo's api-key header (not a Bearer token), supports every common field, and maps metadata to Brevo's params, the same values Brevo templates substitute.

Brevo logo
Brevo
@opencoredev/email-sdk/brevo
OfficialNot API testedRequest tested
Open website

Configure

Create an API key under SMTP & API in the Brevo dashboard and verify the sender or domain you use in from.

lib/email.ts
import { createEmailClient } from "@opencoredev/email-sdk";
import { brevo } from "@opencoredev/email-sdk/brevo";

export const email = createEmailClient({
  adapters: [brevo({ apiKey: process.env.BREVO_API_KEY! })],
});

Prop

Type

Send

Brevo maps cc, bcc, headers, attachments, tags (values only), and metadata (as params). replyTo accepts a single address; two or more throw an EmailValidationError before any request. sendAt maps to Brevo's scheduledAt (ISO 8601), so scheduling happens on Brevo's side. Brevo accepts at most 72 hours in the future.

const result = await email.send({
  from: "Acme <hello@acme.com>",
  to: [{ email: "user@example.com", name: "Ada" }],
  replyTo: "support@acme.com",
  subject: "You're invited to the Acme workspace",
  html: "<p>Ada invited you to join the Acme workspace.</p>",
  metadata: { workspaceId: "ws_123" },
  tags: [{ name: "type", value: "invite" }],
});

console.log(result.id); // Brevo messageId, also exposed as result.messageId

The response id is Brevo's messageId (falling back to id). Match it against events in Brevo's logs and webhooks.

Metadata becomes template params

metadata is sent as Brevo params, the values Brevo substitutes into templates. If you use Brevo template syntax in your content, pick metadata keys that don't collide with template placeholders.

Verify from the CLI

BREVO_API_KEY="xkeysib-..." npx email-sdk doctor --adapter brevo
BREVO_API_KEY="xkeysib-..." npx email-sdk send \
  --adapter brevo \
  --from "Acme <hello@acme.com>" \
  --to user@example.com \
  --subject "Brevo smoke test" \
  --text "It works" \
  --dry-run

Drop --dry-run for one real send to confirm the key, sender verification, and recipient policy end to end.

On this page