AI shopping referrals up 693%: a Sume output schema for listing copy
Adobe data in KTVZ has AI referrals to US retail up 693.4% in Nov-Dec 2025. Bind a headline, hero image and alt-text schema so each video returns typed JSON.

If shoppers arrive from AI assistants, what should a product video job return? Structured fields a listing page can read without a human: a headline, a hero asset and alt text. A KTVZ report on holiday shoppers and AI (published 2026-09-30, read 2026-10-04) says Adobe Analytics measured AI referrals to US retail sites up 693.4% in November and December 2025 against the prior year, and that AI-referred visitors converted 42% higher in March 2026.
Those are one article's figures from a vendor's analytics, and they describe traffic, not video. The practical reading is narrower: more of the discovery may be machine-read, so the text next to each clip should be real data, not a caption pasted by hand.
The schema
The Sume structured-output docs show this exact shape: headline, hero_image as a media object and alt_text. Bind it with output_schema on the run and the receipt's output comes back in that shape. The schema must stay inside the strict subset: a root object, additionalProperties: false everywhere, and every property listed in required. Media fields use { "$ref": "SumeMediaFile#" }.
Set primary_output_key to hero_image so primary_output_url points at the file your page embeds. You send either output_schema or response_format, never both.
Build and check the request body
The script below builds the run body and checks the strict-subset rules that are easiest to break: closed objects and a complete required list.
import json
schema = {
"type": "object",
"additionalProperties": False,
"properties": {
"headline": {"type": "string"},
"hero_image": {"$ref": "SumeMediaFile#"},
"alt_text": {"type": "string"},
},
"required": ["headline", "hero_image", "alt_text"],
}
assert schema["additionalProperties"] is False
assert set(schema["required"]) == set(schema["properties"])
body = {
"instruction": "Holiday spot for the Aurora headphones.",
"input": {"sku": "aurora-01"},
"output_schema": schema,
"primary_output_key": "hero_image",
}
print(json.dumps(body)[:120])Review before you publish
A typed object is still model output. Read alt_text against the clip before it goes live, because alt text that does not describe the product helps no one, human or machine. Treat the first fifty rows as a sample: check them by hand, tighten the instruction, and only then run the rest.
Put guardrails in the schema where the subset allows. Enumerations (up to 1,000 values) can constrain a category field, and nullable unions let a field stay empty instead of invented. The subset rejects oneOf, allOf and nullable, so express optional values as a union with null.
Finally, remember the schema describes shape, not truth. Facts like price and stock should come from your own feed in input, and be checked there.
What the page can trust
The receipt tells you whether the run filled the object itself (filled_by: "agent") or a projection built it afterwards from the media and the closing text. A projection never sees your input, so do not expect a value you sent to reappear unless the run repeated it. Sume also checks media URLs in the output against what the run produced, and a mismatch fails the gate rather than shipping a made-up link.
A run whose projection does not match your schema can still complete as degraded: media is in artifacts[] and output is null. Branch on the webhook's outcome before you write to a listing.
Numbers to cite, and numbers not to
| Figure | Source | Use it for |
|---|---|---|
| AI referrals to US retail sites up 693.4%, Nov-Dec 2025 vs prior year | Adobe Analytics, via KTVZ | Context that discovery is changing |
| AI-referred visitors converted 42% higher, March 2026 | Adobe Analytics, via KTVZ | Context only; not a promise for your store |
| Alt text and headline per clip | Your own schema | Machine-readable listing data |
Sources
Related posts
More in Use cases
- Four shoppable videos per ASIN: demo, how-to, lifestyle, unboxing
Amazon allows up to 4 shoppable videos per ASIN for sellers with a professional account and three months of history. A four-clip plan batched on Sume.
- Amazon allows four shoppable videos per ASIN: eligibility and plan
Amazon allows up to four shoppable videos per ASIN for professional sellers with three months of history. A demo, how-to, lifestyle and unboxing plan.
- Amazon Posts 9:16 video: render a vertical product clip
Set aspect_ratio 9:16 on a Sume video request and animate a product still as the first frame.
- Amazon product video shows about 3 days after approval: plan back
Amazon says shoppable product video typically displays within three days of approval. Work back from a launch date with a small planner and Sume lead times.
Written by Sume