FTC 30-day shipping rule: delivery claims in a holiday sale clip
If you state no shipping time, the FTC rule gives you 30 days; a time you do state needs a reasonable basis. Burn ship-by text from data. Read 2026-10-05.

The FTC's Mail, Internet or Telephone Order Merchandise Rule applies to internet orders. Its business guide says that if you state no time, you must ship within 30 days of a properly completed order, and that you need a reasonable basis for any shipping time you do advertise. A holiday clip that says "ships in 2 days" is therefore a claim you must be able to support, and one you must be ready to revisit when orders pile up.
What the FTC guide says (read 2026-10-05)
Delays are where holiday campaigns get into trouble: a clip promises speed, then volume outruns the warehouse. The guide describes what to do then. Read it in full, because it has conditions that a table cannot carry. This is not legal advice.
| Situation | What the guide says |
|---|---|
| No shipping time stated | Ship within 30 days of a properly completed order |
| A time is advertised | You need a reasonable basis for it |
| Customer applies for credit | 50 days applies |
| Delay | Notify the customer and offer a revised date or cancellation with a full refund |
| Refund timing | Within 7 working days |
Generate the promise from data
The failure mode in a video is a number that nobody owns. Keep the shipping promise in the same data file that your warehouse system feeds, and generate the cue text from it. If the days field is over 30, the build should stop and ask for either a stated date or a delay plan.
With video captions you send cues (text, start, end in seconds) and Sume burns them with no speech-to-text, at $0.20 per clip up to 60 seconds. The sketch below builds one body with the shipping promise per stock state, and refuses to build one over 30 days.
import json
ship_days = {"in-stock": 2, "backorder": 21} # from your warehouse data
cues = []
for i, (label, days) in enumerate(ship_days.items()):
if days > 30:
raise SystemExit(f"{label}: over 30 days, add a stated date or a delay plan")
cues.append({"text": f"Ships within {days} days", "start": i * 3.0, "end": i * 3.0 + 3.0})
print(json.dumps({"video_url": "https://example.com/gift.mp4", "cues": cues}))When the promise breaks
Plan the second clip before the first goes live. If volume pushes an item past the promise, the guide's remedy is customer notice and choice, which is a message to the customer, not a change to a public ad. But a public clip that still says "ships in 2 days" is now unsupported. Pull it or re-burn it from the clean master with the new number, and use a new idempotency key version so the retry logic does not return the old job.
Limits
The guide covers when you must ship and what to do about delays. It does not tell you what delivery estimate a carrier will meet, which is a different thing from your ship time. Carrier cutoffs are in other posts. Also note that state and national rules outside the US can differ.
Sources
Related posts
More in Use cases
- FTC Made in USA claim in a holiday gift video: gate the caption text
An unqualified Made in USA claim needs all or virtually all US-made, FTC says, online too. Lint the cue text before you burn it. Read 2026-10-05.
- Furniture showroom reveal clip: 20 seconds on Seedance 2.5, priced
A 20-second one-take reveal of a sofa or table on Seedance 2.5: room-first framing, a slow push-in, the prompt, and what 480p, 720p and 1080p cost on Sume.
- Gaming montage music at 140 BPM: an electronic brief with a drop
Brief a 140 BPM electronic track for a gaming montage on Sume. A $0.125 Lyria 3.5 take, a drop at a timestamp, and a Timeline render at $0.10 a minute.
- GDPR and an employee's photo as an avatar: Recital 51 explained
Is an employee photo used for an AI avatar biometric data under GDPR? Recital 51 says photos are biometric only with specific technical means. Not legal advice.
Written by Sume