Delay & cancel
When a preorder slips past its expected date, what nohold does and what the FTC requires of you.
When a preorder slips past its expected date, what nohold does and what the FTC requires of you.
Available on Growth and Scale plans.
The FTC 30-day rule
The FTC Mail, Internet, and Telephone Order Rule requires that, if you can't ship an order within 30 days of receiving it, you must:
- Notify the customer of the delay.
- Give a revised shipping date.
- Offer the customer the option to cancel and receive a refund.
Civil penalty: $53,088 per violation (FTC inflation-adjusted, effective January 2025). Recent enforcement includes a $2M+ settlement with GOAT in December 2024 / January 2025 and the $9.3M Fashion Nova settlement in April 2020.
nohold automates all three requirements.
Three ways a delay notice fires
1. You change the ETA on a still-open split
Edit the date on a Splits row that hasn't dispatched yet. nohold:
- Updates the date on the split.
- Sends a delay-notice email to the customer with the new date and a one-click cancel button.
- Writes an audit log row of the send.
The email subject is:
Update on order #1042 · new ship date
If you set the same date you already had (no change), no email is sent. nohold only emails on a genuine date change.
2. The 30-day sweeper fires
nohold's background sweeper looks for splits that are:
- More than 30 days old.
- Not yet dispatched or cancelled.
- Without a customer cancel request on file.
- Haven't already received an FTC-aged notice.
Any matching split gets the same delay-notice email with copy adapted to the no confirmed ship date yet case. The email simply names the order, lists the items, and offers the cancel.
This runs automatically. You don't have to remember to send it.
3. The customer's own initiative
The customer can reply to any delay email and ask to cancel. The signed cancel link in the email is the easy path; see below.
The cancel link
The delay email includes a prominent button:
Cancel my preorder items
The button is a signed URL valid for 30 days from the date the email was sent. When the customer clicks:
- nohold's public cancel page loads with an order summary and a confirmation button.
- The customer clicks Yes, cancel these items.
- nohold records
cancel_requested_aton the split. - The customer sees a confirmation page.
Repeat clicks (same customer, same link, later) land on an already requested page. Idempotent.
A bad signature, expired link, or wrong order ID returns a friendly error page; no information about your store leaks.
What nohold does next
When cancel_requested_at is set on a split, you see a red Cancel requested badge on that Splits row in your dashboard. From there, you process the refund through Shopify's normal refund flow.
nohold never executes the refund itself. The cancel link is a request, not an authorization. This is the same boundary as the rest of the deposit-visibility surface: nohold records what's happening; the merchant takes the payment action.
After you refund:
- The refund webhook fires (see Refund reconciliation).
- The split's
refunded_atandrefund_amountpopulate. - A Refunded $X badge appears next to Cancel requested as a visible audit trail.
What about partial cancels?
A single split represents one Shopify order with its preorder half. The cancel link covers that half. If your customer wants to cancel only some preorder items (not all), they need to contact you directly; the email's reply-to is your store, and the email tells them they can reply.
Full N-way splitting (multi-shipment with per-shipment cancel) is on the roadmap.