UK drip pricing: put the delivery fee in the Black Friday video price
The CMA wants the total price, mandatory fees included, from early advertising on. Build one video price card that shows it. Read 2026-10-05.

A UK sale video should show the total price a shopper must pay, including mandatory delivery charges, not a lower headline price with the fee revealed later. The CMA's price-transparency guidance (updated 7 January 2026) calls the opposite, drip pricing, illegal, and says price information is needed from early-stage advertising to the final sale.
What the CMA summary says (read 2026-10-05)
The points below are from the CMA's summary page, not the full guidance. The fines are in the same summary. This is a practical reading, not legal advice, and the full guidance has exceptions and examples.
| Topic | What the summary says |
|---|---|
| Total price | Provide the total price up front, including mandatory fees |
| Delivery | Mandatory delivery charges must be included in the invitation to purchase |
| Drip pricing | Illegal |
| Where it applies | From early-stage advertising to the final sale |
| Fines | Up to 10% of turnover or GBP 300,000, whichever is greater |
| Guidance updated | 7 January 2026 |
One card, two lines
The workflow is to keep the numbers in data and generate the card text, so the headline and the breakdown cannot disagree. Burn the delivered total first and the breakdown second.
Video captions takes cues with text, start and end, and burns them with no speech-to-text. A caption job is $0.20 for a clip up to 60 seconds. The sample uses the letters GBP rather than a currency symbol, to keep the sample independent of glyph support.
import json, os, urllib.request
def burn(video_url, cues, key):
req = urllib.request.Request(
"https://api.sume.com/v1/video-captions",
json.dumps({"video_url": video_url, "cues": cues}).encode(),
{"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json", "Idempotency-Key": key})
return json.load(urllib.request.urlopen(req))
price, delivery = 38.00, 4.99
cues = [
{"text": f"GBP {price + delivery:.2f} delivered", "start": 0.5, "end": 4.0},
{"text": f"GBP {price:.2f} + GBP {delivery:.2f} delivery", "start": 4.0, "end": 7.0},
]
print(burn("https://example.com/scarf.mp4", cues, "uk-total-scarf-v1"))Variants for free and paid delivery
If delivery is free above a basket threshold, that is a conditional, not a mandatory fee, and the CMA's page should be read for how to show it. A safe pattern is one clip per delivery case, each with its own total, rather than one clip with a footnote. Because a caption job costs $0.20, three delivery cases for one master clip cost $0.60, with the master rendered once.
Check the frame, not the script
After the burn, pull stills at the cue times with video frames (at[], up to 24 frames per call) and read the total in each one. The script says what you meant to show. The frame says what a shopper sees, including whether the delivered total appears before any other price in the clip. Do this for every delivery variant, because a stale cue from a previous variant is the usual way an old, lower figure ends up on screen.
Limits
Do not treat the example text as approved wording. The summary does not say how long a card must stay on screen or how large it must be. A card that flashes by too fast to read is a risk. Ask your own adviser, check the full CMA guidance, and review the final frame at the card time before you publish.
Sources
Related posts
More in Use cases
- Unboxing video music that stays under your voice: duck_db settings
Pick duck_db and gain_db on Sume Timeline so a $0.125 AI music bed dips under speech and returns between lines, plus the duck error to expect.
- University Open House Welcome With an AI Avatar: Script and Cost
A university open-house welcome from an AI avatar: a scripted 3-scene plan, request JSON, Sume cost per quality tier, and how it differs from live avatars.
- US Letter flyer at 300 dpi: 2550x3300 exceeds the GPT Image 2.5 cap
US Letter at 300 dpi is 2550x3300, 8,415,000 pixels, over the 8,294,400 cap. Render 2400x3104 with GPT Image 2.5, then fit it to 2550x3300 in Pillow.
- Video API shutdown runbook: six steps from the Sora removal
A six-step runbook for the day a video vendor removes its API: find calls, freeze ids, pick a replacement, port, canary, and archive. Dates from OpenAI's page.
Written by Sume