Unosend
Send through the Unosend REST API — a single Bearer-authenticated endpoint with CC, BCC, tags, and attachments.
The Unosend adapter calls the Unosend REST API over fetch — no extra dependency. It is one of the simplest providers to wire up: one Bearer-authenticated /emails endpoint, one API key, no other configuration.
@opencoredev/email-sdk/unosendConfigure
Create a server-side API key in your Unosend account and verify the domain you send from.
import { createEmailClient } from "@opencoredev/email-sdk";
import { unosend } from "@opencoredev/email-sdk/unosend";
export const email = createEmailClient({
adapters: [unosend({ apiKey: process.env.UNOSEND_API_KEY! })],
});Prop
Type
Send
Unosend maps cc, bcc, headers, tags, attachments, and a single replyTo address.
const result = await email.send({
from: "Acme <hello@acme.com>",
to: [{ email: "user@example.com", name: "Ada" }],
replyTo: "support@example.com",
subject: "You're invited to the Acme workspace",
html: "<p>Grace invited you to join the Acme workspace.</p>",
tags: [{ name: "type", value: "invite" }],
});
console.log(result.id); // Unosend email id, also exposed as result.messageIdThe adapter checks success in the response body and throws an EmailProviderError when Unosend reports a failure, even on an HTTP 200.
No metadata, one reply-to
Unosend has no metadata field and accepts only one replyTo address. A message with metadata
or multiple reply-to addresses throws an EmailValidationError before any request is made — use
tags, or pick a metadata-capable adapter.
Verify from the CLI
UNOSEND_API_KEY="un_..." npx email-sdk doctor --adapter unosendUNOSEND_API_KEY="un_..." npx email-sdk send \
--adapter unosend \
--from "Acme <hello@acme.com>" \
--to user@example.com \
--subject "Unosend smoke test" \
--text "It works" \
--dry-runDrop --dry-run for one real send — that is the only check that proves the API key and sending domain are ready.
