estimate_ad_cost
Price a studio job before making it: a finished ad from a brief or storyboard (kind "ad"), a UGC creator video (kind "ugc"), a generated avatar (kind "avatar") or a competitor-ad decode (kind "decode"). Returns the credit lines, the total and a quote_id that generate_ad, generate_ugc_video, generate_avatar and decode_ad require. No account needed. For an ad, quote exactly the fields you will submit.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Defaults to ad. | |
| brief | No | The ad brief: brandName, brandOneLiner, valueProps (1-8 strings), cta, intent, format (an id from list_ad_formats), shotCount (2-5), totalDurationSec (6-20), aspect (9:16 | 16:9 | 1:1), language, quality (fast | premium), modelTier (standard | cinematic), garmentImageUrl for the try-on formats. | |
| quality | No | Lip-sync tier. premium costs more per talking shot. Defaults to the brief's quality, else fast. | |
| model_tier | No | cinematic renders on Seedance with director-grade camera work and costs more per shot; needs the brief. | |
| storyboard | No | The storyboard returned by write_ad_storyboard, as is or edited. When present it is what renders; the brief is optional alongside it. | |
| persona_mode | No | synthetic lets the studio substitute one consistent generated creator for the avatar; exact-avatar (default) keeps the avatar as given. | |
| needs_avatar_gen | No | True when the avatar still has to be generated (billed as a line). | |
| needs_product_gen | No | True when the product still has to be generated (billed as a line). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| basis | Yes | ||
| lines | Yes | ||
| quote_id | Yes | Signed quote. Pass it to the matching generate_* tool; it fixes the price and makes a retry safe. | |
| next_step | Yes | ||
| expires_at | Yes | ISO time after which the quote is refused. | |
| credits_total | Yes | For an ad, the most it can cost; the charge on success is never higher. | |
| expires_in_seconds | Yes |