Resend + Tevyr
Send transactional email from any Tevyr macro — notify a speaker their session is starting, page a producer when blackout fires, deliver a post-event recap to your hot-list. Resend handles the deliverability; Tevyr fires the request.
Resend is a transactional email API with first-class DKIM / SPF / DMARC tooling, built for developers who don't want to babysit SMTP. Tevyr's template calls Resend's /emails endpoint with Authorization: Bearer re_… auth. Get an account at resend.com.
What you can do
Email a speaker before their session starts
Schedule a macro that fires 10 minutes before each session via flow.wait_until → Resend send_email with the speaker's address, the session title, and the green-room link.
Page a producer on critical events
On blackout, on overrun, on Q&A spike — fire a templated email to the on-call producer. SMS-style alerts without an SMS gateway.
Post-event recap to the hot-list
At the end of every event, send a structured recap to your stakeholders: which sessions ran on time, which overran, how many questions came in. One macro, one email blast.
Speaker handoff email between sessions
As one session ends and the next starts, email the incoming speaker a 'you're on next' nudge with their dial-in. Removes a manual stage-manager step.
Prerequisites
- Tevyr Starter plan or above — Free plan ships 0 integration connections
- Resend account with billing set up (Resend has a generous free tier — 100 emails/day, 3000/month — but production volume needs paid)
- Verified sender domain in Resend (DKIM + SPF + DMARC) — Resend refuses to send from unverified domains in production. The dev sandbox
onboarding@resend.devworks for testing - An API key from resend.com/api-keys
One-time setup
1. Verify a sender domain in Resend
If you haven't already, follow Resend's domain verification flow:
- resend.com/domains → Add Domain
- Add the DKIM, SPF, and (optional but recommended) DMARC records to your DNS
- Wait for verification (usually under 5 minutes)
Skip this in dev and use onboarding@resend.dev as the From address — it works for testing but emails will land in your test recipient's inbox with a sandbox warning.
2. Create an API key
- resend.com/api-keys → Create API Key
- Name it
Tevyr, scope: Sending access (or Full access if you also want Tevyr to read domain status) - Copy the key — it starts with
re_…and is shown only once
3. Paste into Tevyr
- Settings → Integrations → Add new → Resend
- Paste the key, name the connection (e.g. "Resend — production"), click Save
- Click Test — Tevyr calls
/domains(read-only, lists verified senders). A green toast confirms the key is valid; if the domain list is empty, you'll still get a green toast but you won't be able to send from unverified senders
Recipes
Drag flow.http_request, pick your Resend connection, pick the Send email action.
Recipe 1 — Speaker pre-session ping (10-minute warning)
Trigger: flow.wait_until set to {{ctx.session.scheduled_start_time}} - 10 minutes.
| Field | Value |
|---|---|
| From | Tevyr <no-reply@your-verified-domain.com> |
| To | {{ctx.session.speaker_email}} |
| Subject | Your {{ctx.event.name}} session starts in 10 minutes |
| HTML body | <p>Hi {{ctx.session.speaker_name}}, you're up at {{ctx.session.scheduled_start_time}}. Join here: <a href="{{ctx.event.green_room_url}}">Green Room</a>.</p> |
Recipe 2 — On-call page on critical overrun
Trigger: lifecycle event on_timer_overrun with threshold ≥ 60 seconds.
| Field | Value |
|---|---|
| From | Tevyr Alerts <alerts@your-verified-domain.com> |
| To | oncall@your-team.com |
| Subject | [ALERT] {{ctx.session.name}} overrun by {{ctx.timer.overrun_seconds}}s |
| Plain-text body | Session {{ctx.session.name}} just overran by {{ctx.timer.overrun_seconds}} seconds at {{ctx.now.local}}. |
Recipe 3 — Post-event recap (multiple recipients)
Trigger: lifecycle event on_event_end.
| Field | Value |
|---|---|
| From | Tevyr Recap <recap@your-verified-domain.com> |
| To | producer@team.com, exec@team.com, comms@team.com (comma-separate up to 50) |
| Subject | {{ctx.event.name}} — post-show recap |
| HTML body | (a templated summary with {{ctx.event.*}} and {{steps['<gpt-step>'].output.body.choices[0].message.content}} if you want AI-generated copy) |
Limits and rules
Body required: Resend rejects requests with both html and text blank. The macro editor validates this at save time, but if you build a step programmatically, set at least one. Resend prefers html when both are provided.
| Limit | Value |
|---|---|
| Recipients per send (To/CC/BCC combined) | 50 |
| Attachments | Up to 40 MB total |
| Free tier | 100 emails/day, 3000/month |
Troubleshooting
403 Domain not verified
You set From to an unverified domain. Either verify the domain in Resend's dashboard, or use onboarding@resend.dev as a temporary sandbox sender (only delivers to addresses you verify in the sandbox).
400 Missing required field: html or text
Both body fields are blank. Set at least one — Resend doesn't accept subject-only emails.
Email doesn't arrive
- Check Resend's dashboard log — every send shows up at resend.com/emails with delivery status
- If Resend shows "Delivered" but the inbox is empty, check the recipient's spam folder
- If Resend shows "Bounced", the recipient address is invalid
Sandbox-domain rate limits
onboarding@resend.dev is rate-limited and only delivers to addresses you've pre-verified. For production, always send from your own verified domain.
Context variables
The From, To, Subject, HTML, and Text fields all support {{ctx.*}} interpolation — Tevyr resolves them at fire time. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.
Triggered by webhook events
Resend can be fired automatically from any webhook event (session.completed, session.upcoming, etc.) — great for post-event recap emails. When creating a webhook, pick Integration mode and select your Resend connection.
Related
- Macros — build "speaker on deck" SMS-style flows using Resend + timer warnings
- Integrations overview — other tools you can wire alongside Resend
- Slack guide — Slack notifications instead of email
- Webhooks — for "Tevyr fires when email is delivered" via Resend's outbound webhooks (configured in Resend's dashboard)