Playbook · Resend
Cancel or duplicate a Resend Broadcast
Stop a scheduled or queued send, or copy a Broadcast into a new draft. Sending still needs your click.
2026-10-16
Who it’s for / not for
| For | Not for |
|---|---|
| People who already create API drafts via Resend Broadcast drafts and need mid-send / mid-schedule recovery | Teams with no Broadcast ID yet (create/draft first — see the human-gate playbook) |
| Agent ops: typo discovered after schedule, wrong Segment noticed while queued, or “clone last issue → edit draft” for the next send | Anyone who thinks cancel recalls emails already delivered — docs say it does not |
| Operators who want CLI / Node / curl recipes that match live Resend docs (accessed 2026-10-16) | Legal / PDPO advice; open-rate ROI promises; live sends from the bot |
Stack (spine only)
Secondary (mention only): Dashboard Cancel button, Resend CLI (resend broadcasts cancel|duplicate), Update Broadcast after scheduled→draft, Delete Broadcast — optional if you want a deeper pass.
- Cancel Broadcast —
POST /broadcasts/{broadcast_id}/cancel; onlyqueuedorscheduled(cancel-broadcast, KB) - Duplicate Broadcast —
POST /broadcasts/{broadcast_id}/duplicate; any Broadcast including sent; returns a new draft id (duplicate-broadcast) - List / Retrieve — find the
idand status before acting (list, get) - You press Send — see Resend Broadcast drafts
Bot vs human
| Bot does | Human must do |
|---|---|
List / retrieve Broadcast; report id + status (draft / scheduled / queued / sent / canceled) | Own Resend account, API key in env (never paste secrets into chat/git) |
Call cancel when status is scheduled or queued and you asked to stop | Explicit OK to cancel a live schedule / mid-send (reputation impact) |
Call duplicate to create a draft copy named … (copy) (≤70 chars) | Review the copy (subject, Segment, HTML, links) before any Send |
Flag STOP before any /send or send: true | Press Send / schedule yourself after explicit OK |
| Recap what changed (old id → new draft id; status transition) | Confirm already-sent recipients are accepted as irreversible |
| You press Send yourself | You confirm before a live Broadcast to real subscribers |
Numbered steps
- Prerequisites. You need a verified domain, an API key in env you control, and at least one Broadcast with a known
id(from the create response, Dashboard, or list). Complements Resend bilingual newsletter and Resend Broadcast drafts. Human must verify which Broadcast, why cancel vs duplicate, and that consent / Segment is still correct. - Confirm status before cancel. Retrieve or list Broadcasts (get / list). Cancel works only while status is
scheduledorqueued(cancel-broadcast).draft/sent/ alreadycanceledcannot be cancelled. Prefer Dashboard Cancel if you are mid-incident and the UI is faster — API is the agent path. - Cancel — status transitions (verified 2026-10-16).
POST https://api.resend.com/broadcasts/{BROADCAST_ID}/cancel(cancel-broadcast). `scheduled` → `draft`: no emails are sent; you can update and reschedule. `queued` → `canceled`: emails already sent are not affected; the remaining queue stops. Already-sent mail cannot be recalled (KB). Response shape:{ "object": "broadcast", "id": "<same-id>" }. Sketch — do not run with a live key in chat:resend.broadcasts.cancel(broadcastId). CLI:resend broadcasts cancel BROADCAST_ID. Use a placeholder bearer such asre_xxxxxxxxx, never a real key. - After cancel. If you landed on `draft` (from scheduled): edit subject/HTML/Segment, then you press Send or reschedule. If you landed on `canceled` (from queued): do not expect a recall. To ship a fixed version, duplicate → edit the draft → you press Send. You press Send.
- Duplicate — new draft copy.
POST https://api.resend.com/broadcasts/{BROADCAST_ID}/duplicate(duplicate-broadcast). The copy starts as a draft. It is named after the source with(copy)appended, truncated to 70 characters. It copies segment, topic, sender, subject, reply-to, preview text, and content. It works on any Broadcast, including ones already sent. The response returns a new broadcastid. Sketch:resend.broadcasts.duplicate(broadcastId)—data.idis the new draft. CLI:resend broadcasts duplicate BROADCAST_ID. You press Send when the copy looks right. - Edit the copy, then STOP — human Send gate. Update subject / HTML / Segment on the new draft; send yourself a test if available; check the unsubscribe token is still present. When you are ready: Dashboard Send / schedule, or
POST /broadcasts/{NEW_ID}/send(see the human-gate playbook). Leavesend: trueoff until you mean to send. You press Send in the Dashboard. - Agent ops pattern. Typo mid-schedule → cancel (
scheduled→draft) → fix → you reschedule. Typo mid-send → cancel (queued→canceled) → duplicate → fix the draft → you press Send on the corrected issue (accept that part of the audience already got v1). Next weekly issue from last sent → duplicate → edit → you press Send. Log source id, action, new id (if any), status before/after, and that you pressed Send.
Failure modes / HK caveats
- Cancel on wrong status — draft/sent/already-canceled cannot use cancel; check status first.
- Thinking cancel recalls mail — already-sent emails stay sent. A correction email is yours to send.
- Duplicate ≠ send — the copy is draft only; it still needs the human Send gate.
- Name truncation — long internal names get cut at 70 chars with
(copy). - Wrong Broadcast ID — always retrieve and confirm subject/Segment first.
- Secrets in chat/git — API keys in markdown or agent logs → rotate. Env only.
- Consent / PDPO — not legal advice; cancel does not erase delivered content from inboxes.
- Payment Link in a duplicated body — you check the draft before Send.
- You press Send.
Newsletter CTA
After you cancel or duplicate, sending the copy still needs your click.
Human must verify
- Correct Broadcast
idand current status before cancel or duplicate. - You confirm before canceling a
scheduledorqueuedsend (partial delivery is accepted). - Domain + API key still healthy; key only in env.
- After
scheduled→draft, edits and the reschedule plan are correct. - After
queued→canceled, already-sent recipients are accepted as irreversible. - Duplicate copy: Segment, topic, subject, HTML, unsubscribe token reviewed.
- You confirm before any
/send,send: true, or Dashboard Send on the copy. - You decide what goes in the body before you press Send.
- Quotas / plan limits checked in Billing (not frozen on this page).
Doc gaps
Exact JSON fields on retrieve/list status enums beyond cancel transitions were not exhaustively copied — confirm in a live retrieve response when you run it. Free/paid quotas are not frozen here. MCP / agent plugin cancel-duplicate recipes are deferred. PDPO marketing rules are outside Resend docs — confirm with counsel if you need to. Not legal advice.
Docs cited
- Cancel Broadcast API · 2026-10-16
- Duplicate Broadcast API · 2026-10-16
- How to cancel a Broadcast (KB) · 2026-10-16
- Cancel Broadcast API changelog · 2026-10-16
- Duplicate Broadcast API changelog · 2026-10-16
- List Broadcasts · 2026-10-16
- Retrieve Broadcast · 2026-10-16
- Resend docs home · 2026-10-16