notifly
IntegrationsEmail providerUpdated

Resend for delivery, Notifly for the workflow.

Keep Resend as your email API. You connect it to Notifly with your own API key, and the email steps of your Notifly workflows are sent through your Resend account, from your domain, on your Resend plan.

Notifly covers what sits around the email: one trigger for email, in-app, SMS, push and chat; digest, delay and throttle steps; subscriber preferences checked before each send; and an activity feed that shows what Resend said.

What you need from Resend

These are the fields the dashboard asks for when you connect Resend, quoted from the create form.

FieldRequiredStoredNotes
API KeyRequiredEncrypted at rest
From email addressRequiredAs enteredUse the same email address you used to authenticate your delivery provider
Sender nameRequiredAs entered
  • From email address and Sender name. Combined into Resend's Sender name <address> form on every email this integration sends.

Connect Resend in the dashboard

  1. Sign in at app.notifly.io, open Integration Store in the sidebar and choose Connect Provider.
  2. In the Connect Integration sheet, open the E-Mail tab (or search across channels), find Resend and choose Connect.
  3. Pick the environment the integration belongs to. Development and Production keep separate integrations, so you can point each at a different Resend account or key.
  4. Fill in Delivery Provider Credentials with the fields in the table above, then choose Create Integration.
  5. A new integration starts switched on as both Active Integration and Primary Integration, so email steps in that environment send through Resend by default. If the environment already has a primary email integration, the dashboard asks before replacing it.

Trigger a Resend email from your code

Your backend triggers a workflow; Notifly renders the email step and sends it with Resend. The subscriber is created or updated from to on the way, first name included.

Node.js · @notiflyio/api@0.1.26
// npm install @notiflyio/api@0.1.26
import { Notifly } from "@notiflyio/api";

const notifly = new Notifly({ security: { secretKey: process.env.NOTIFLY_SECRET_KEY } });

await notifly.trigger({
  workflowId: "welcome",
  to: { subscriberId: "user_123", email: "ada@example.com", firstName: "Ada" },
  payload: { plan: "Pro" },
  overrides: {
    // Merged into this send's Resend request.
    providers: { resend: { tags: [{ name: "workflow", value: "welcome" }] } },
  },
});

Prefer plain HTTP? The same trigger is POST https://api.notifly.io/v1/events/trigger with an Authorization: ApiKey header and a body of { "name", "to", "payload" }.

What reaches Resend

  • The message. Subject and HTML, plus cc, bcc, reply-to and custom headers when the send has them.
  • Attachments. Sent with their content id, so images referenced by cid: render inline.
  • Your Resend options. Anything under overrides.providers.resend is merged into the request, workflow-wide, or for one step under overrides.steps.<stepId>.providers.resend.
  • Resend's answer. A refused send fails the step with Resend's own error text, recorded in the activity feed.

What Notifly adds on top of Resend

Workflows around the send

One trigger runs a workflow: this provider’s step can sit beside in-app, email, SMS, push and chat steps, behind digest, delay and throttle steps.

Subscriber preferences, enforced at send

Before each step runs, the subscriber’s workflow and channel preferences are checked; an opted-out step is skipped and the reason is recorded.

An in-app Inbox next to it

The same workflow can write to the Notifly Inbox, a real-time in-app feed you embed with the React component or the JavaScript SDK.

Per-trigger provider parameters

Anything the trigger passes under overrides.providers.<provider id> is merged into the request Notifly sends to the provider, per workflow or per step.

Activity you can debug

Every message gets execution details in the activity feed, including the response or error the provider returned.

Secrets encrypted at rest

API keys, tokens and service accounts are stored encrypted with AES-256; new and re-saved credentials use authenticated AES-256-GCM. The table above marks which of this provider’s fields that covers.

Several accounts, one primary

Connect more than one account on this channel. The primary integration is the default; another active integration takes the send when its conditions match the subscriber or the tenant in the trigger’s context.

Go deeper in the docs

Frequently asked questions

What does Notifly need from my Resend account?

A Resend API key, a From email address and a Sender name. Notifly creates the Resend client with your key and sends every email step through your account; the key is stored encrypted at rest. The dashboard asks for the From address you authenticated with Resend.

How does the sender appear in Resend?

As "Sender name <address>", built from the integration's Sender name and From email address fields, so recipients see a name rather than a bare address. If Sender name is ever empty, Notifly sends the bare address instead of an empty name.

Can I add Resend tags to Notifly emails?

Yes. Anything under overrides.providers.resend is merged into the request Notifly sends to Resend, so tags: [{ name, value }] on the trigger reach Resend as the email's tags. Use overrides.steps.<stepId>.providers.resend to tag one email step only.

What happens when Resend refuses an email?

Notifly fails the email step with Resend's own error message and records it as a provider error in the activity feed, next to the rest of that workflow run, so a wrong domain or key shows up in words rather than as a silent drop.

Bring your provider account. Keep your sender reputation.

One POST /v1/events/trigger — email, SMS, push, in-app, and chat. 10,000 events a month, free.

Get started freeSee pricing