Amazon "up to 50% off" needs 10% of ASINs at 50%: a caption check
Amazon says an up-to claim needs 10% of products at the maximum discount. A short Python check counts the ASINs and burns the matching caption cue.

Amazon Ads says that when you advertise a range of discounts, at least 10% of the products must match the maximum discount stated: for "up to 50% off," at least 10% of ASINs should be at 50% (Amazon Ads guide, read 2026-10-05). For 40 ASINs that is 4 at full discount. Compute that number before you burn "Up to 50% off" into a video, and caption it with cues so the text is the claim you checked.
The minimum, by catalog size
The table applies the rule as stated, rounding up because you cannot discount a fraction of a product. It is an arithmetic check of your own plan, not Amazon's compliance test.
| ASINs in the promotion | At the max discount (min) | Below the max discount (max) |
|---|---|---|
| 15 | 2 | 13 |
| 40 | 4 | 36 |
| 250 | 25 | 225 |
| 333 | 34 | 299 |
| 1000 | 100 | 900 |
A check that also writes the cue
import math, os, requests
max_pct, asins_total, asins_at_max = 50, 40, 5
need = math.ceil(asins_total * 0.10)
assert asins_at_max >= need, f"need {need} ASINs at {max_pct}% off"
cues = [{"text": f"Up to {max_pct}% off", "start": 0.5, "end": 4.0}]
resp = requests.post(
"https://api.sume.com/v1/video-captions",
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Idempotency-Key": "amazon-upto-claim-001",
},
json={"video_url": os.environ["VIDEO_URL"], "cues": cues, "style": "slam"},
timeout=30,
)
print(need, resp.status_code, resp.text[:200])
What the script does and does not prove
The assertion only checks the count you give it. It does not read your Amazon listing, and it cannot tell whether the discounted ASINs are the ones in the video. Use it as a pre-flight on your own spreadsheet: total ASINs, how many are at the maximum discount, and the headline percentage you plan to show.
The cue is plain text with a start and end in seconds. The slam style is the Latin default, and a cue that holds only Latin text works with it. A claim like "Up to 50% off" is short enough to read in the 3.5 seconds the cue allows. If you also show a list of qualifying products, give each its own cue rather than packing them into one line.
Keep the page and the video in agreement
The same Amazon guide says savings claims must be identical across ads and landing pages, and that if an ad shows 10% off, the landing page must reference the percentage discount rather than just the final price. When prices move, the guide says dynamic pricing may require pausing and updating creatives to use qualified claims like "Save up to XX%".
A caption job is $0.20, so changing the claim is a $0.20 re-burn on the same source clip rather than a new render. Keep the source clip text-free and treat every claim as a caption pass, so a change in the promotion is one cue edit.
Sources
Related posts
More in Use cases
- Animal Shelter Adoption Appeal as an AI Avatar Video: Cost
A shelter adoption appeal using an avatar and a scene photo: scripted scenes, per-scene seconds, request shape and Sume cost on each quality tier.
- Animate a brand mascot still: which Sume models take a first frame
Almost every Sume video row takes a first frame, except H3 Max Recast and Genjutsu. Grok Imagine Video 1.5 is $0.0125 a second; Omni, Wan and Kling add more.
- Animate a child's drawing with AI: 6 seconds for $0.075 on Sume
Turn a photographed child's drawing into a 4 to 15 second clip. Grok Imagine on Sume bills $0.0125 a second; Kling 3 costs more but takes a last frame.
- Animate a trading or tarot card image: pick the model by aspect ratio
Card art is a tall rectangle. Kling 3 and Omni cannot take 3:4 on Sume; Wan 3.0 and MiniMax H3 can. A 5 second 3:4 card costs $0.3125 on Wan at 480p.
Written by Sume