Email SDK
Adapters

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.

Iterable logo
Iterable
@opencoredev/email-sdk/iterable
OfficialNot API testedRequest tested
Open website

Configure

Create a server-side API key in Iterable and copy the campaign ID of the template you want to trigger.

lib/email.ts
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 response

One 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 iterable
ITERABLE_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.

On this page