---
title: Make an Amazon listing or Sponsored Brands video ready for moderation
description: Make an Amazon product listing video or Sponsored Brands video ad with the real product, no claims you cannot back, faces and labels blurred, and a pre-flight check.
---
Make a product video for an Amazon listing or a Sponsored Brands video ad, the kind Amazon reviews before it runs. Your agent cuts real footage of your product, keeps claims to what you can back, blurs faces and other brands' labels, and checks the cut against Amazon's rules in words before export. Amazon makes the final call in its own review, and this page does not promise approval.

This is ordinary ad work for a real product. The agent makes the file. You upload it in Seller Central or the Amazon Ads console and launch the campaign there. The agent never publishes, never launches a campaign and never sends an email.

Use invideo for this when you want to fix a rejection in minutes: the video stays an editable timeline, so a cut, a blur or a text change is an edit and a free export, not a new shoot.

## Quickest path

Set up your agent first with [invideo for AI agents](/agents). Then give it this prompt.

```text
Make a Sponsored Brands video for our Brewly cold brew from the clips in
./product. Real product only, no prices or deals, no star ratings, and only
these claims: "brews in 12 hours", "no sugar added". Blur any face and any
other brand's label. Check it against Amazon's rules and show me the first
and last frame and a frame at every cut before you export.
```

In a chat app, you drag the clips into the project. In a terminal, the agent uploads them from the folder you name.

## What you need

The agent needs real footage and your list of claims.

- Footage or photos of the real product, the same one buyers get.
- The claims you can back, word for word. Anything not on this list stays out.
- Where it runs: the product listing, or a Sponsored Brands video ad.
- The marketplace, so on-screen text and voice match its language.
- Amazon's own pages. For Sponsored Brands video, read <a href="https://advertising.amazon.com/resources/ad-specs/sponsored-brands-video" target="_blank">Sponsored Brands video creative</a>. For listing videos, read the video rules in Seller Central help, behind your seller sign-in.

## Amazon's rules in words

Amazon publishes its rules and changes them, so the agent reads the pages on the day. These are the points that most often matter for video, from Amazon's pages. The length, size, frame rate and file format are on the spec page; check the page, because this page gives no numbers.

- **Shape.** Sponsored Brands video asks for widescreen, with no black, colored or blurred bars at the sides or top. Keep text out of the lower-right corner.
- **Language.** Spoken words and on-screen text match the marketplace's language.
- **Claims.** No claim you cannot back. No customer reviews or star ratings in the video.
- **Offers.** No prices, deals, discounts or savings in the video.
- **Amazon itself.** No Amazon logos or references to Amazon.
- **Quality.** No black or blank frames at the start or end, no abrupt ending, no flashing effects, and text that is easy to read against its background.
- **Sound.** No sudden jumps in volume and no harsh sounds.

The moderation guide has the full list: <a href="https://advertising.amazon.com/library/guides/sponsored-brands-sponsored-display-moderation" target="_blank">A complete guide to Sponsored Brands and display ads moderation</a>. The policies are on <a href="https://advertising.amazon.com/resources/ad-policy/sponsored-ads-policies" target="_blank">Sponsored ads guidelines and acceptance policies</a>.

## Steps

The agent builds on a branch, blurs what must not show, and checks before export.

<Steps>
<Step title="Bring in the real footage">
The agent uploads the clips with `start_upload` and `add_media`, or `invideo asset upload`. It looks at each with `media` `video.frames`. It sees one sequence per clip.
</Step>
<Step title="Cut the video">
The agent makes a widescreen timeline with `new_timeline` and branches with `timeline_history`. It places the shots with `place_media`, product first. It adds only your approved claims with `add_text`. It sees a new `state_token`.
</Step>
<Step title="Find faces and labels to hide">
The agent looks at frames for faces and other brands' labels. It runs `find_models` with the job in words and reads the pick's inputs with `get_model`. A good pick is `object_track`, with `points` on the object, the `time` of that frame, and `output` set to `matte`. It calls `generate` with `dry_run: true` and tells you the price, then runs with `max_credits` set to that price and an `idempotency_key`. It sees a sequence URL for a black-and-white matte video, white where the object is, and reads it with `read`.
</Step>
<Step title="Blur through the matte">
The agent places the matte on its own track above the shot. It places a copy of the shot on the track between, adds `gaussian_blur` and `track_matte_key` to the copy with `add_effect`. In a second call, with the key's id from `get_timeline`, it points the key at the matte's track with `set_matte_source` and sets its `mode` to `luma` with `set_effect_parameter`. It sees the blur only where the face or label was.
</Step>
<Step title="Add sound">
The agent adds music from `search_library` in `stock_music`. For a voice in the marketplace's language, it runs `find_models` with the job in words, reads `elevenlabs_text_to_speech.elevenlabs_tts_v4` with `get_model` and finds a `voice_id` with `search_library` in `elevenlabs_text_to_speech_voices`. It calls `generate` with `dry_run: true`, the script as `prompt` and that `voice_id`, and tells you the price. Then it calls `generate` with `max_credits` set to that price and an `idempotency_key`. It checks each source with `media` `audio.loudness`. It sees a sequence URL for the voice and reads it with `read`. It never calls `generate` again to check.
</Step>
<Step title="Pre-flight against the rules">
The agent calls `capture` at `0`, at one frame before the end, at every cut and every text. It checks the list above: no black first or last frame, no bars, no text in the lower-right corner, no price, no stars, no Amazon logo, readable text. It runs `check_timeline`. It sees frames and findings, and fixes each one.
</Step>
<Step title="Export">
The agent runs `export` with `quality` and `fps` set to what the spec page asks. It sees an export card with status `completed`, and tells you what it checked and what needs your eye.
</Step>
</Steps>

The terminal version:

```bash
invideo agent register <project-url> --name <name>
export INVIDEO_AS=<name>
invideo asset upload <project-url> ./product/*.mp4
invideo edit new <project-url> --name "Brewly SB video" --width 1920 \
  --height 1080
invideo edit show <edit-url> --json
invideo branch new <edit-url> --name sb-v1 --token <state_token>
invideo edit show <branch-url> --json
invideo gen models <project-url> --query "object matte to blur a face"
invideo gen model <project-url> --model object_track
invideo gen models <project-url> --query "text to speech voice"
invideo gen model <project-url> \
  --model elevenlabs_text_to_speech.elevenlabs_tts_v4
invideo gen run <page-url> \
  --model elevenlabs_text_to_speech.elevenlabs_tts_v4 \
  --dry-run -i prompt=@voice.txt -i voice_id=<voice-id>
invideo gen run <page-url> \
  --model elevenlabs_text_to_speech.elevenlabs_tts_v4 \
  --max-credits <price> --idempotency-key brewly-sb-voice-v1 \
  -i prompt=@voice.txt -i voice_id=<voice-id>
invideo edit change <branch-url> --timeline T1 \
  --token <state_token> --operations @blur.json
invideo edit check <branch-url>
invideo edit capture <branch-url> --at 0,4,8,12,14.96 --out ./frames
invideo edit export <branch-url> --format video --quality 1080 --json
invideo status <card-url> --wait
invideo notebook show <card-url> --out ./out
mv ./out/export.mp4 ./out/brewly_sb_v1.mp4
```

Where the values come from:

- `<project-url>` is your project's URL, or what `invideo project new` returns. `<edit-url>` comes from `invideo edit new`.
- `<name>` is the name you choose in `invideo agent register`. `<page-url>` is a notebook page from `invideo notebook show <project-url>`.
- `<state_token>` comes from `invideo edit show <edit-url>`, and on the branch from `invideo edit show <branch-url>`; the main token is stale there. `<branch-url>` is the `.branch_url` that `invideo branch new` returns.
- `<voice-id>` is an id from `search_library` in `elevenlabs_text_to_speech_voices`. `<price>` is the dry run's `.estimated_credits`.
- `<card-url>` is `.sequences[0]` of what the export returns. `invideo status` waits and does not download; `invideo notebook show` saves `./out/export.mp4`.
- `<sequence-url>` is the matte's sequence URL, which the `object_track` run returns.

The file voice.txt holds the script in the marketplace's language. The `object_track` input `points` is a list, so the agent sends that generation over MCP with `dry_run` first. The file `./blur.json` holds the blur as a bare list of operations; on the MCP path the same list goes in the `operations` field of `edit_timeline`. `c8` is the copy of the shot on `V2`, read from `get_timeline`, and the matte sits on `V3`, which is free over this shot. After this call the agent reads the key's effect id with `get_timeline`. In a second call it sends `set_matte_source` with `target` `c8`, that `effect` and `source_track` `V3`, and `set_effect_parameter` with `parameter` `mode` and `value` `luma`.

```json
[
  { "op": "place_media", "asset": "<sequence-url>", "track": "V3",
    "at_f": 120, "source_start_seconds": 0, "source_end_seconds": 4,
    "mode": "overwrite", "linked_audio": false },
  { "op": "add_effect", "clip": "c8", "effect": "gaussian_blur" },
  { "op": "add_effect", "clip": "c8", "effect": "track_matte_key" }
]
```

## Cost and time

Edits and exports are free. Generation and transcripts cost credits. Paid stock costs a small credit charge, or one of your workspace's iStock licenses. Your agent runs a dry run first and tells you the price before it spends anything.

- Costs credits: `object_track` or `sam_3_1_video` for each shot that needs a blur, a voice, and paid stock music.
- Free: the cut, the claims, the blur effects, `capture`, `check_timeline` and `export`.

A short product video takes under an hour. A fix after a rejection takes a few minutes. See [Credits](/account/credits) for prices.

## If something goes wrong

Amazon's review gives a reason for each rejection. Fix that reason on a new branch and export again.

| Symptom | Fix |
| --- | --- |
| `get_model` or `generate` refuses the model as not found | Models retire. Run `find_models` with the job in words, use the best match, and tell the person which model you used. |
| Exit code 6, or `status` is `held` | A safety review, not a refusal. Wait, then run `invideo status <url> --wait` again. Do not resend. If it ends `failed`, change the input the review flagged. |
| Rejected for black frames at the start or end | Capture `0` and the last frame. Trim the empty frames with `trim_clip`. |
| Rejected for bars at the sides | Run `fill_frame` on each clip so the picture covers the canvas. |
| Rejected for a claim | Remove the text with `delete_clip`, or change it with `set_text` to a claim on your list. |
| Rejected for language | Change the text with `set_text`, and voice it again in the marketplace's language. |
| The matte clip shows in the capture | Hide its track with `set_track_hidden` and capture again. If the blur then stops, file `report_bug`. |
| The blur drifts off the face | Run `object_track` again with more `points`, on a frame where the face is clear. |
| An object is hard to point at for `object_track` | Run `sam_3_1_video` with words like "face, logo". It draws its masks on the video. Read those frames to pick the points, then run `object_track` for the clean matte. |
| CLI exit 3 on the branch | The token is from main. Run `invideo edit show <branch-url>` and use its `state_token`. |
| The saved file is called `./out/export.mp4` | `notebook show` always saves `./out/export.mp4`. Rename it. |
| Avoid: adding a claim the person did not give | Instead: use only the approved list. Ask before adding any line. |
| Avoid: promising the video will pass | Instead: say what was checked. Amazon decides in its review. |

## Prompts to try

Each prompt is a real variation of this job.

```text
Amazon rejected my video for "text in the lower-right corner". Move every
text clip out of that corner on a new branch, capture each, and export.
```

```text
Make a listing video for my blender from these 8 clips: what's in the box,
the blades, a smoothie, cleaning. No voice, music only, my claims only.
```

```text
Blur the logo on the mug in shot 3 and the face of the person in shot 5.
Price it first.
```

## When to use something else

invideo does not upload to Amazon, launch campaigns or read the review result. Upload the video in Seller Central or the Amazon Ads console. For a claim like "clinically proven" or "number one", ask your legal team for the proof before it goes in. For product photography and studio shots, book a photographer, then bring the footage in.

## Related

- [Make a Shopify and TikTok Shop product video that follows the no-stills rule](/how-to/marketing/shopify-and-tiktok-shop-video)
- [Turn a product photo into a video without redrawing the product](/how-to/marketing/product-photo-to-video)
- [Resize one master ad for every placement, with safe zones](/how-to/marketing/every-placement-from-one-master)
- [Label AI content so your ad runs on TikTok, Meta and Google](/how-to/marketing/ai-disclosure-for-ads)
- [Check your video before you say it is done](/how-to/check-your-video)