Ballad
Sending

Connect Resend for sending

Send newsletter issues and lifecycle email from your own domain, and let bounces, complaints, unsubscribes, opens and clicks come back into Ballad on their own.

~10 min8 sectionsResend · your own domain

Resend is how Ballad sends email for you. Connect it and your newsletter issues and lifecycle sequences go out from your own domain, under your own sending reputation — and the bounces, complaints, unsubscribes, opens and clicks come back into Ballad without you exporting anything.

Without it, Ballad still writes your issues; you copy them into whatever tool you already use. Everything below is optional in that case.

This takes about ten minutes, most of it waiting for DNS.

1. Verify a sending domain

In resend.com, add the domain you want to send from and add the DNS records it gives you. Use a subdomain you don't send anything else from — mail.yourdomain.com or news.yourdomain.com — so a marketing issue can never affect delivery of your product's own email.

Wait for Resend to mark the domain verified. Ballad checks this when you connect, and a broadcast to a list won't send from an unverified domain.

2. Make an API key

Under API Keys, create a key with full access. Ballad does more than send with it: it creates the list for the voice, registers a webhook so results come back, and reads your domains to check the one you're sending from. A sending-only key fails at the first step.

Copy the key once — Resend won't show it again.

3. Connect it to a voice

Sending belongs to whoever signs the issue, so this lives with the voice, not the workspace. In Ballad: Settings → Voices → the voice that sends → Email tool → Resend.

FieldWhat to put in it
From nameThe name on the envelope — usually the person or the company.
From addressAn address on the verified domain.
Resend API keyThe key from step 2. Leave blank later to keep the stored one.
Reply-toOptional, if replies should land somewhere else.
Postal addressA real one. Anti-spam law in most countries requires it in the footer of a list email.
Send issues toEveryone with consent, or one of your own segments.

Press Connect Resend. Ballad checks the key, confirms the domain is verified, creates a list for this voice, and registers a read-back webhook — then shows a pill: Resend connected, the number of recipients with consent, and a warning if the domain isn't verified or the webhook couldn't be registered.

What Ballad creates in your Resend account

  • A segment named <voice> list (Ballad). The people Ballad's own segments select are mirrored into it at send time, so Resend never holds a list Ballad hasn't applied consent to.
  • A webhook pointing back at Ballad, subscribed to email.bounced, email.complained, email.opened, email.clicked, contact.updated and suppression.added.

Both are reused if they already exist, so reconnecting or rotating a key doesn't duplicate anything.

What comes back

Event in ResendWhat happens in Ballad
Opened, clickedRecorded against the issue, and per person for a sequence step
Hard bounceConsent withdrawn; sequences for that person stop
Spam complaintConsent withdrawn, permanently
UnsubscribeConsent withdrawn; they leave every segment that needs it

That's why the webhook matters: without it Ballad would keep emailing someone who asked you to stop.

Rotating or disconnecting

Paste a new key in the same row and save — the list and webhook are kept. Disconnect removes the key from Ballad and issues go back to being pasted by hand; your Resend account, list and history are untouched.

Troubleshooting

  • "Resend rejected the key" — the key is wrong, revoked, or not full access. Make a new one under resend.com/api-keys.
  • "domain unverified" — the from address is on a domain Resend hasn't verified yet. Check the DNS records; sending to a list will fail until it is.
  • "no read-back webhook" — the key couldn't create one, usually a permissions problem. Fix the key and save again.
  • Nobody receives an issue — check the recipient segment actually selects people with consent. The count is on the same row.

Next

Next guideVoice