Iterable
Trigger an Iterable campaign template for one recipient, with message content delivered as dataFields.
The Iterable adapter calls Iterable's target email API over fetch — no extra dependency. Instead of sending raw content, it triggers an existing campaign template for exactly one recipient and hands your message to the template as dataFields.
@opencoredev/email-sdk/iterableConfigure
Create a server-side API key in Iterable and copy the campaign ID of the template you want to trigger.
import { createEmailClient } from "@opencoredev/email-sdk";
import { iterable } from "@opencoredev/email-sdk/iterable";
export const email = createEmailClient({
adapters: [
iterable({
apiKey: process.env.ITERABLE_API_KEY!,
campaignId: Number(process.env.ITERABLE_CAMPAIGN_ID!),
}),
],
});Prop
Type
Send
The campaign template renders the email. The adapter passes subject, html, text, and from into dataFields so the template can use them, and forwards metadata as Iterable webhook metadata.
const result = await email.send({
from: "Acme <hello@acme.com>",
to: "user@example.com",
subject: "Your trial ends in 3 days",
html: "<p>Upgrade to keep your workspace.</p>",
metadata: { userId: "user_123" },
});
console.log(result.raw); // Iterable returns no message id — inspect the raw responseOne recipient, template-only fields
Iterable target sends accept exactly one to recipient and no cc, bcc, replyTo, headers,
attachments, or tags — any of those throw an EmailValidationError before a request is made.
Check field support before routing fallbacks through Iterable.
Verify from the CLI
ITERABLE_API_KEY="..." ITERABLE_CAMPAIGN_ID="12345" npx email-sdk doctor --adapter iterableITERABLE_API_KEY="..." npx email-sdk send \
--adapter iterable \
--campaign-id 12345 \
--from "Acme <hello@acme.com>" \
--to user@example.com \
--subject "Iterable smoke test" \
--text "It works" \
--dry-run--campaign-id and --send-at override ITERABLE_CAMPAIGN_ID and ITERABLE_SEND_AT. Drop --dry-run to trigger one real campaign send and confirm the API key and campaign are live.
