product_image 400: must be a fetchable public image URL
Sume avatar video rejects a product_image or scene image that is not a direct public image. What the 400 says, and why share links and HTML pages fail.
The error
Sume downloads product_image, scene.image_url and background image URLs before it accepts the job. If the fetch fails, you get 400 invalid_request with a message in the form <field path> must be a fetchable public image URL. The details carry path, status and content_type so you can see what came back.
How the fetch works
The server sends a GET with Accept set to image, follows redirects and gives up after 15 seconds. A non-OK status or a response whose content type is not an image fails. The size is capped by the upload maximum. Accepted images are copied into Sume storage and the job uses a media.sume.com URL; a Sume media URL passes through unchanged.
| You pass | What comes back | Result |
|---|---|---|
| A product page URL | text/html | 400, content_type text/html |
| A signed link that expired | 403 or 404 | 400, status in details |
| A link behind login | 302 to a login page, then HTML | 400 |
| A direct .jpg or .png | image/jpeg or image/png | Accepted and copied |
Fix
Use a direct HTTPS image URL that works without cookies. Test it from a clean shell before you submit.
curl -sI -L -H 'Accept: image/*' https://example.com/product.png | grep -i -E '^(HTTP|content-type)'Cost note
A video with a product image bills at the product rate: $0.194, $0.258 or $0.58 per second by tier, against $0.184, $0.245 and $0.55 without. A failed fetch is a 400 before the job, so fix the URL and resend.
Sources
Related posts
More in Developers
- Avatar Video Scene Durations: Fields Must Agree and the 2.8 Rule
How Sume sets a text scene's length: ceil(words / 2.8), the 0.001-second agreement rule across duration fields, and worked examples of 14 and 15 words.
- Avatar voice not ready: 409 avatar_not_ready, voice_not_ready
A video request can fail with 409 avatar_not_ready because the avatar's voice is not ready. How this differs from a plain not-ready avatar, and the retry hint.
- Pick the best of 4 AI image takes automatically with Pillow
Request n=4 from one Sume image call, score each take by edge contrast with Pillow ImageStat, keep the winner, and see what the four takes cost.
- Black Friday bulk queue: reconcile webhooks received against counts
A bulk queue has no webhook, and canceled runs send none. Count terminal events per item, then compare them with the queue's counts to find what is missing.
Written by Sume