Ad Creatives

Create a standalone creative

Creates a creative in the library WITHOUT an ad, reusable on the create endpoints via existingCreativeId. Provide exactly one of imageUrl (uploaded server-side), imageHash (from POST /v1/ads/images or the library list), or carouselCards (2-10 hand-built cards). The Page (and linked Instagram account, when present) is resolved from accountId as the story actor. creativeFeatures configures Advantage+ enhancements. promotion is not supported and any object is rejected with 400.

post/v1/ads/creatives

Request body

accountIdstring required

Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token and Page.

adAccountIdstring required

Platform ad account id (Meta act_<n>, Google customer id, LinkedIn account id, ...).

headlinestring required
bodystring required

Primary text

descriptionstring

Link description below the headline; omitted = Meta scrapes the destination's OG description.

callToActionstring

CTA type (same whitelist as POST /v1/ads/create).

linkUrlstring uri required
imageUrlstring uri

Publicly reachable image; uploaded to the account's library server-side.

imageHashstring

Existing library image hash (POST /v1/ads/images or GET /v1/ads/images).

urlTagsstring

Appended to every outbound URL (e.g. utm_source=fb).

promotionMetaPromotion nullable

Not supported. Meta validates creative_sourcing_spec.promotion_metadata_spec on the create call and then discards it, so a Promotion set through the Marketing API never reaches the creative. Any object is rejected with 400 invalid_field_value. Send null or omit the field, and set the Promotion on the ad in Ads Manager. Verified on 2026-09-11 across Graph v19.0 to v25.0 and every write path.

creativeFeaturesMetaCreativeFeatures

Meta Advantage+ creative enhancements. Map snake_case feature names to OPT_IN or OPT_OUT; Meta validates supported keys and unspecified features default to OPT_OUT. auto_promotion_tag is an Advantage+ enhancement, not the Ads Manager Promotion setting. The deprecated standard_enhancements bundle is rejected by Meta.

multiAdvertiser'OPT_IN' | 'OPT_OUT'

Meta only. Multi-advertiser ads: whether Meta may show this ad alongside other advertisers' in one unit. Meta auto-enrols since Aug 2024, so send OPT_OUT to leave. It is a top-level creative field, NOT a creativeFeatures key, and Meta rejects it there.

aiDisclosure'OPT_IN' | 'OPT_OUT'

Meta only. Meta's "Ad includes media created or edited with AI" disclosure, the checkbox in Ads Manager, stored on the creative as generative_asset_spec.transparency_metadata.self_disclosure. OPT_IN checks it, OPT_OUT explicitly declares no AI media, omitted leaves Meta's default. Applied to each new creative, including standalone, creatives[] and attach shapes, and preserved when a creative is rebuilt. This sets the disclosure on the ad; whether and when the viewer-facing label renders is Meta's decision.

Example request

{
  "creativeFeatures": {
    "auto_promotion_tag": "OPT_IN"
  }
}

Response

Creative created

adAccountIdstring
creativeIdstring

Platform creative id, reusable via existingCreativeId.

Changes