Resend action

Send Stripe emails with Resend, fully branded

Branded transactional emails, custom dunning, onboarding sequences. Fired from Stripe Workflows, delivered by Resend. The integration Stripe will not ship.

Free trial · From $19/mo · No credit card required

The problem

Out of the box, Stripe Workflows ships a Slack action and a Mailchimp action. That's it for email. If your transactional provider is Resend, with your templates and your verified domain, the path through Stripe Workflows is back to a hosted webhook handler with the same retry headaches as everything else. Mailchimp is a marketing list tool. Dunning, receipts, and refund confirmations are not marketing.

The Resend action closes that gap. Connect a Resend API key, pick a template id (or write inline HTML with JSONata), set From, Reply-To, and Tags, and the email fires on any Stripe event a workflow can be built on. Failed payment for the third time? Send the attempt-3 dunning email with a hosted invoice URL. New subscription? Send the welcome. Refund processed? Send the confirmation. The action dedupes on Stripe's invocation id, so a 5xx retry doesn't double-send.

How the Resend action works

  1. 1

    Add a Resend API key

    Generate a restricted API key in Resend with send permission and paste it into the action config. The key is encrypted per account. One key covers as many workflows as you want to wire up.
  2. 2

    Pick a template or write inline HTML

    Reference an existing Resend template by id and pass variables, or write inline HTML directly with JSONata-templated fields. From, Reply-To, Tags, CC, and BCC are all configurable per send.
  3. 3

    Wire it to a Stripe event

    Add the Resend step to any workflow. invoice.paid for receipts, invoice.payment_failed for dunning, customer.subscription.created for welcomes. The Stripe event provides all the templating data.
  4. 4

    Track deliveries in two places

    The Outbound execution log records which Stripe invocation triggered which Resend send. Resend's own dashboard tracks open, click, and bounce. Between them you can debug delivery without leaving either tool.
{
  "trigger": "invoice.payment_failed",
  "action": "outbound.resend",
  "config": {
    "api_key": "${RESEND_API_KEY}",
    "from": "billing@acme.com",
    "to": "{{customer.email}}",
    "reply_to": "support@acme.com",
    "subject": "Payment issue on your Acme subscription",
    "template_id": "tmpl_dunning_attempt_{{attempt_count}}",
    "variables": {
      "customer_name": "{{customer.name}}",
      "amount": "{{invoice.amount_due / 100}}",
      "update_url": "{{hosted_invoice_url}}"
    },
    "tags": [{"name": "category", "value": "dunning"}]
  }
}

Example workflow configuration

Screenshot of the Resend action panel in the Stripe Workflow builder. Shows an API key input with masked characters, From and Reply-To fields, a template id picker pulling templates from the connected Resend account, a variables grid, and a tags section. A connection-healthy indicator shows the Resend account is reachable.

Stripe ships Slack and Mailchimp. Resend is the action that fills the transactional gap.

Outbound vs Zapier

OutboundZapier
Lives inside the Stripe Dashboard
Pricing modelFrom $19/mo flatPer-task billing
Idempotent on Stripe invocation id
Inline HTML and template-id modeslimited
Setup time≈3 minutes15–25 minutes
Resend Tags supported for analytics
Native in the Stripe Workflow builder

Frequently asked questions

Why not use Stripe's built-in Mailchimp action?+
Mailchimp is a marketing list tool. Stripe Workflows' Mailchimp action adds a contact to a list — fine for newsletters, wrong for transactional. Receipts, dunning, refund confirmations need a transactional provider like Resend with per-email templates, tags, and deliverability tuned for one-off sends.
Can I send to multiple recipients?+
Yes. The to field accepts a comma-separated list or a JSONata expression that returns an array. CC and BCC are separate fields. For mass marketing emails use Resend's batch API or a list provider — this action is for transactional sends triggered by a Stripe event.
What about attachments — can I attach the Stripe PDF receipt?+
Yes. Set the attachments field to a JSONata expression that resolves to Stripe's hosted_invoice_url or invoice_pdf — Outbound fetches the PDF, base64-encodes it, and includes it as a Resend attachment. Adds ~200ms to delivery but keeps everything in the workflow.
Does it count against my Resend monthly limit?+
Yes. Every send is one Resend email, counted in your Resend plan. Outbound's execution count and Resend's email count are independent — you'll see two numbers in two dashboards. Both are flat-tier so neither surprises you.
Can I disable retries for transactional emails I don't want re-sent?+
Yes. The action has a retry_policy field with options of default, once, or never. Default retries on Resend 5xx. Once retries a single time. Never sends exactly once and surfaces any error to the workflow without re-attempting.