Skip to content
StackQuay

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

ForNot for
People who already create API drafts via Resend Broadcast drafts and need mid-send / mid-schedule recoveryTeams 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 sendAnyone 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; only queued or scheduled (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 id and status before acting (list, get)
  • You press Send — see Resend Broadcast drafts

Bot vs human

Bot doesHuman 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 stopExplicit 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: truePress 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 yourselfYou confirm before a live Broadcast to real subscribers

Numbered steps

  1. 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.
  2. Confirm status before cancel. Retrieve or list Broadcasts (get / list). Cancel works only while status is scheduled or queued (cancel-broadcast). draft / sent / already canceled cannot be cancelled. Prefer Dashboard Cancel if you are mid-incident and the UI is faster — API is the agent path.
  3. 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 as re_xxxxxxxxx, never a real key.
  4. 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.
  5. 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 broadcast id. Sketch: resend.broadcasts.duplicate(broadcastId) — data.id is the new draft. CLI: resend broadcasts duplicate BROADCAST_ID. You press Send when the copy looks right.
  6. 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). Leave send: true off until you mean to send. You press Send in the Dashboard.
  7. 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

  1. Correct Broadcast id and current status before cancel or duplicate.
  2. You confirm before canceling a scheduled or queued send (partial delivery is accepted).
  3. Domain + API key still healthy; key only in env.
  4. After scheduled→draft, edits and the reschedule plan are correct.
  5. After queued→canceled, already-sent recipients are accepted as irreversible.
  6. Duplicate copy: Segment, topic, subject, HTML, unsubscribe token reviewed.
  7. You confirm before any /send, send: true, or Dashboard Send on the copy.
  8. You decide what goes in the body before you press Send.
  9. 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

Related playbooks