November 4, 2026
Brands can be renamed and deleted, and listed with product counts.
- Added:
PATCH /api/v1/brands/{brand_id} renames a brand or changes its
website or selling countries (products:update).
- Added:
DELETE /api/v1/brands/{brand_id} deletes a brand and every
product in it (products:delete).
- Added:
GET /api/v1/brands returns each brand’s product_count and
takes sort, order, limit, has_products and name_contains.
- Added:
GET /api/v1/products returns each product’s creative_count
and takes has_creatives.
- Fixed:
GET /api/v1/creatives could skip creatives across pages when
several were made at the same moment (for example one campaign batch).
- Fixed:
GET /api/v1/products stopped after the first page when many
products were added at the same moment (for example a bulk import).
Every product is now returned across pages.
- Changed:
POST /api/v1/brands with a website_url now starts reading
the website into the brand’s profile (logo, colours, fonts), as adding a
brand in the app does. The response includes profile_status: reading,
failed or no_website.
See Brands.
October 26, 2026
Videos can be made from any recipe, in one call. This replaces the concept
and voice steps.
- Added: every recipe the app offers (a UGC voiceover, a Pixar style story,
a podcast clip, a song and more) is in
GET /api/v1/video-recipes, each with
min_duration_seconds, max_duration_seconds and max_credits, its top
price.
- Changed (breaking):
POST /api/v1/videos takes type: "recipe" (was
"ugc") with recipe_id, audience_id, language and an optional
story_idea, your own idea for the story. We write the story and script,
cast and voice it, and render it.
- Changed: a recipe video is charged its recipe’s top price when the
request is accepted, then costs what its script runs to: the rest is
refunded and
credits_charged drops to the real price. max_credits is
checked against the top price.
- Changed (breaking): videos read back with
type: "recipe" (was
"ugc"). GET /api/v1/video-recipes returns min_duration_seconds and
max_duration_seconds in place of duration_seconds.
- Removed (breaking):
GET and POST /api/v1/video-concepts,
GET /api/v1/voices, and concept_id and voice_id on POST /api/v1/videos.
See Create a video.
October 19, 2026
ChatGPT ad groups take any ad count up to 8. The app picks it with the same
counter as other generators.
- Changed:
ad_count on POST /api/v1/chatgpt-ad-groups and
POST /api/v1/chatgpt-ad-groups/{ad_group_id}/ads takes any whole number
from 1 to 8 (was 1, 3, 5, or 8).
Every count accepted before is still accepted.
October 11, 2026
Video generation is cheaper.
- Changed: UGC videos and photo animations now cost 1 credit per second,
down from 2. A 30 second UGC video is 30 credits and a 10 second animation
is 10.
GET /pricing and max_credits reflect the new rate.
Batches can be larger. The app now picks a count with a counter from 1 to 60,
and the API accepts the same range.
- Changed:
creative_count on POST /api/v1/campaigns and
POST /api/v1/campaigns/{campaign_id}/creatives takes any whole number from
1 to 60 (was 30). blueprint_ids takes up to 60 ad types.
- Changed:
quick_shoot.count on POST /api/v1/photoshoots takes any whole
number from 1 to 60 (was 15).
Every count accepted before is still accepted.
October 2, 2026
Counts are now any number in range, not a fixed set of steps. A campaign can
be a single ad creative.
- Changed:
creative_count on POST /api/v1/campaigns takes any whole
number from 1 to 30 (default 10). Send 1 for a single ad creative.
- Changed: with
blueprint_ids, the count no longer has to be a multiple of
the ad types. It is split as evenly as it goes, the first types taking any
remainder (10 across three is 4, 3 and 3), and must be at least the number
of types.
- Changed:
creative_count on POST /api/v1/campaigns/{campaign_id}/creatives
takes any whole number from 1 to 30.
- Changed:
quick_shoot.count on POST /api/v1/photoshoots takes any whole
number from 1 to 15.
Every count accepted before is still accepted.
September 30, 2026
Campaigns and UGC videos are made for an audience, the same way the app works:
audience first, then the ads.
Docs reorganized
The docs are reorganized by what you make: setup, ad campaigns, listing
images, photoshoots, ChatGPT ads and UGC videos, each with its own section.
Old guide URLs redirect.
Audiences
- New: every product created through the API generates its audiences
automatically, and they are saved as soon as they are written. There is
nothing to approve: list them and pass any
id as audience_id.
- New:
GET /api/v1/products/{product_id} returns
audiences: { count, generation_status }, and
GET .../audiences returns generation_status (idle, generating,
ready or failed) next to the list.
- Changed:
POST .../audiences/recommendations generates more audiences
and saves them ready to use.
- Removed:
POST .../audiences/{audience_id}/approve, the status query
parameter on the list and the status field on each audience.
Required audience
- Changed:
audience_id is required on POST /api/v1/campaigns in guided
mode, on POST /api/v1/video-concepts, and on POST /api/v1/videos with
type: "ugc". Send a saved audience’s id, or null for a deliberately
broad campaign or video. Leaving it out returns 400 invalid_request.
Prompt-mode campaigns and animations are unchanged.
September 25, 2026
The API now offers every surface of the app, with the same choices the app
gives you. Where the app lets you pick something, so does the API; where it
does not, neither does the API. Prompting is always optional.
Ad campaigns
POST /api/v1/campaigns takes the campaign creator’s choices: mode
(guided or prompt), blueprint_id or blueprint_ids, audience_id,
angles, brief, aspect_ratio, language and creative_count.
- Added
GET /api/v1/campaign-blueprints, POST /api/v1/campaign-angles and
POST /api/v1/campaigns/{campaign_id}/creatives.
- Changed:
creative_count now takes the creator’s values, 5, 10, 15
or 20, or a multiple of the ad types for blueprint_ids. language
defaults to the brand’s saved language.
- Deprecated:
prompt. It still works and keeps its original counts (3 to
30). Use mode: "prompt" with brief.
- Each campaign creative costs 2 credits.
Photoshoots
- Added
GET/POST /api/v1/moodboards and GET /api/v1/moodboards/{moodboard_id}.
POST /api/v1/photoshoots accepts quick_shoot.moodboard_id and a new
moodboard_shots kind to shoot chosen cells of a moodboard.
Video ads
- Added
GET /api/v1/video-recipes, GET/POST /api/v1/video-concepts,
GET /api/v1/voices, GET/POST /api/v1/videos and
GET /api/v1/videos/{video_id}. A UGC video follows the app’s four steps:
audience, recipe, concept and voice. type: "animation" animates a Quick
Shoot photo.
ChatGPT ads
- Added
GET/POST /api/v1/chatgpt-ad-groups,
GET/PATCH /api/v1/chatgpt-ad-groups/{ad_group_id}, POST .../ads,
POST .../targeting and POST /api/v1/chatgpt-ads/{ad_id}/copy. Each ad
costs 1 credit.
Amazon listings
- Added
GET /api/v1/amazon-marketplaces, GET/POST /api/v1/amazon-listing-ideas,
GET/PATCH /api/v1/amazon-listing-ideas/{idea_id}, POST .../image and
POST /api/v1/amazon-listing-images. Each image costs 2 credits.
Audiences
- Added
POST /api/v1/products/{product_id}/audiences,
PATCH and DELETE .../audiences/{audience_id}, POST .../recommendations
and POST .../audiences/{audience_id}/approve. The list takes
?status=recommended and each audience now has a status.
Everything else
GET /api/v1/pricing lists every paid operation.
GET /api/v1/creatives adds the amazon_listing type.
- New permissions:
videos, chatgpt_ads and amazon_listings. Keys created
earlier do not include them and show as custom access in Settings; create a
new key to use these endpoints.
- New error codes:
request_rejected, plan_required, moodboard_not_ready,
and 404s for recipes, audiences, moodboards, ad groups, ideas, concepts,
voices and videos.
September 22, 2026
Self-serve keys and access
- Pro and Enterprise workspace owners and admins can now create and revoke API
keys in Settings > API keys, with an access level (Full access, Generate,
or Read only), an optional expiry, and an optional monthly credit budget.
- API access requires the Pro or Enterprise plan. Other plans receive
403
with plan_upgrade_required; suspended workspaces receive org_suspended.
- Added
campaigns:read and photoshoots:read. Existing keys with generate
keep read access.
Spending controls
- Added
GET /api/v1/account (plan, available credits, limits, and the key’s
monthly budget) and GET /api/v1/pricing (credit cost per operation).
POST /api/v1/campaigns and POST /api/v1/photoshoots accept max_credits.
A request above it returns 422 credit_limit_exceeded and charges nothing.
- Campaigns and photoshoots now include
credits_charged.
- A key that reaches its monthly budget receives
422 key_budget_exceeded on
requests that start new generation.
New endpoints
GET /api/v1/creatives and GET /api/v1/creatives/{creative_id} for every
creative type, filterable by product, campaign, and type.
GET /api/v1/campaigns and GET /api/v1/photoshoots list summaries, newest
first.
GET /api/v1/products/{product_id}/audiences. POST /api/v1/campaigns
accepts audience_id.
Rate limits
- Each key now has separate per-minute budgets for reads (600), writes (120),
uploads (60), and generation (30).
August 24, 2026
Product deletion
- Deleting a product now removes it from active API access, stops work in
progress, and invalidates its share links.
- Subsequent requests for a deleted product return
404 Not Found. Product
deletion cannot be reversed through the public API.
August 12, 2026
Retro Quick Shoot look
- Added
retro to quick_shoot.look on POST /api/v1/photoshoots. It derives
its scenes from the product instead of applying a fixed treatment.
retro returns a print-ready 1200x1800 card at 300 DPI (4 x 6 inches): the
artwork mounted on aged paper with its line set underneath. It ignores
direction.image_urls; direction.text is still used as guidance.
- Added
caption to photoshoot outputs and to product creatives. It carries the
line printed under the artwork, and is null outside the retro look.
- Added the Quick Shoot guide covering the full path from
a product URL or image to finished images.
August 5, 2026
Local image uploads
- Added
POST /api/v1/uploads/images for multipart uploads from a computer or
private system before creating a product, Quick Shoot, or template.
- Added the dedicated
images:upload API-key permission. Uploaded image URLs
can be reused across products, Quick Shoots, and templates.
- Uploads accept one JPG, PNG, WebP, HEIC, or HEIF image up to 10 MB and return
a durable LocalAds-owned URL.
- Base64 and JSON data URLs are not supported.
August 2, 2026
Photoshoot templates
- Added
POST /api/v1/templates to create reusable photoshoot template packs
from one or more image URLs.
- Template shots now preserve each supplied image’s aspect ratio.
Product setup
- Product URLs and supplied image URLs now return
202 Accepted until the
product is ready.
- Added optional
Idempotency-Key support to product creation.
July 30, 2026
Product descriptions
- Added optional product descriptions to product creation and updates.
- Added
description to product list and detail responses.
Ad campaign API
- Added prompt-based campaign creation under
POST /api/v1/campaigns.
- Added progressive campaign and creative retrieval under
GET /api/v1/campaigns/{campaign_id}.
- Added the
campaigns:generate API-key permission.
- Added optional idempotency for safe campaign retries.
July 29, 2026
Quick Shoot API
- Added Quick Shoot creation through
POST /api/v1/photoshoots.
- Added optional text direction and up to eight HTTPS direction images.
- Added
standard, close_up, lifestyle, and out_of_the_box look
selection, with output counts of 1, 3, 5, 8, or 15.
- Template and Quick Shoot inputs are mutually exclusive.
July 24, 2026
Brand scoping
- Added brand discovery under
GET /api/v1/brands.
- Required
brand_id when creating products and listing brand-owned
collections.
- Added
brand_id to product, template, and photoshoot responses.
- Restricted photoshoots to products and templates from the same brand.
Product API
- Added product creation, listing, retrieval, updates, and deletion under
/api/v1/products.
- Added organization API-key permissions for product operations.
- Added cursor pagination for product lists.
Photoshoot API
- Added photoshoot template listing and retrieval under
/api/v1/templates.
- Added asynchronous photoshoot creation and status retrieval under
/api/v1/photoshoots.
- Added paginated photoshoot creative retrieval under
/api/v1/products/{product_id}/creatives.
- Added optional database-backed idempotency for safe photoshoot retries.
Last modified on November 13, 2026