Share one packshot across 100 bulk items with an asset_id
To reuse one product image in a 100-item Sume bulk run, upload it once and pass asset_id. Sume does not copy an asset_id or a media.sume.com URL again.

Upload the packshot once through the Assets API and pass its asset_id in each item's attachments. Sume does not copy an asset_id, or a URL that is already on media.sume.com, again. A remote URL, by contrast, is fetched and copied into durable storage when each run is created.
The two attachment forms
A run can carry up to 30 images as attachments[]. Each entry is { "type": "input_image", ... } with either an image_url or an asset_id, plus an optional filename that the agent sees. The asset_id must be an image that is ready and in the same workspace.
| Form | Fetched per item? | Needs |
|---|---|---|
| image_url, public HTTPS | Yes, at create; copied to durable storage | Reachable without auth |
| image_url on media.sume.com | No further copy | Already a Sume URL |
| asset_id | No further copy | Ready image in the same workspace |
A bulk item that shares one image
Each item is the same body as a single run. Only the data that changes goes in input.
{
"concurrency": 4,
"items": [
{
"instruction": "Holiday hero from the attached packshot.",
"input": { "sku": "8823", "headline": "Gift it early" },
"attachments": [{ "type": "input_image", "asset_id": "asset_..." }]
},
{
"instruction": "Holiday hero from the attached packshot.",
"input": { "sku": "8824", "headline": "Wrapped and ready" },
"attachments": [{ "type": "input_image", "asset_id": "asset_..." }]
}
]
}Checking the upload first
An asset_id has to be ready before you use it, so poll the asset until it is ready, then build the batch. If the asset is in another workspace, the create fails with attachment_not_found, so use a key from the workspace that owns the upload.
Per-item data still belongs in input: the SKU, the headline and the price. The shared image is only the visual reference. If each product has its own photo, the same pattern applies with one asset per item, and the 30-image cap is per item, not per queue.
One more reason to prefer an asset is failure isolation. A public URL that returns an error at create time stops the whole bulk body. If the shared image itself is wrong, fix it once and use a new idempotency key for the rerun.
Tradeoffs
An asset_id ties the batch to one workspace and to an upload that must finish before you send the create. A public URL is simpler for one-off runs but costs a fetch per item and fails the whole create if it is dead. Media URLs on media.sume.com are public and durable, so do not use them for images that must stay private.
Sources
Related posts
More in Formats
- Shorts series bulk queue finishes out of order: publish by number
Episodes in a Sume bulk queue run in parallel and finish in any order. Sort by an episode number in your output schema, not by completion time.
- Shorts series: episode video and thumbnail from one Format run
YouTube Shorts series take a custom thumbnail per episode. Bind one output schema so each Sume Format run returns the video and the thumbnail together.
- Can a Sume Format package hold a product CSV? Only five file types
A Format package accepts .md, .json, .yaml, .yml and .txt files. Put the product feed row in each run's input, not in the package. Here are the limits.
- Sume Format run expires_at: 90 minutes, and how to set your timeout
A non-terminal Sume Format run carries an expires_at, 90 minutes from creation. Use it as your client timeout instead of inventing a number.
Written by Sume