Set product photo
set_product_imageLock a product photo for ad rendering by passing an image URL. The server validates the image contains the product and matches the brand category, then returns a durable URL for use in generate_image or render_ad.
Instructions
Lock an image as the ad's real PRODUCT photo so every render grounds on the true packaging. Pass imageUrl = a product shot's URL — an image from a prior research result (an organic Instagram/TikTok post, a scraped page image), a workspace / list_product_photos url, or any public product photo. The server downloads it and runs a product+safety check: a lifestyle/scene shot with no clear product, or an off-category / unsafe image, is REJECTED and NOTHING is locked (the summary says why). On PASS it persists the photo to a DURABLE url and returns it — pass that url as a reference to generate_image / render_ad. Bills one vision check. Reads YOUR saved brand for the category match (pass brandId to target a specific brand — switches this key's active brand like use_brand).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| brandId | No | a brand id/name from list_brands to lock the product for; omit to use the active brand | |
| imageUrl | Yes | the image URL to lock as the product (from a research result, a workspace / list_product_photos url, or any public product photo) | |
| source_note | No | a short note on where it came from, e.g. "from their IG post" |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | the durable served URL of the locked product photo | |
| summary | No | the check verdict — on rejection, why nothing was locked | |
| attached | No | true when the image passed the product check and was locked | |
| source_note | No | where the photo came from |