Zernio
APIFor you
Zernio
APIFor you
API Reference

Creatives

Creative libraryGETAd image libraryGETAd video libraryGETList TikTok ad identitiesGETList partnership ad contentGETList partnership permissionsGETCreate a standalone creativePOSTCreative detailsGETDirect video and image URLs for an adGETRender previews of an existing adGETGet ad video processing statusGETSet partnership permissionPOSTRename a creativePUTDelete a creativeDELETEDelete an ad videoDELETERender pre-create ad previewsPOSTUpload an ad image from base64POSTUpload an ad videoPOST
Dashboard
OverviewPlatformsAPI ReferenceResources
Creatives

Create a standalone creative

Creates a reusable Meta creative from an image or carousel without creating an ad, ready to attach to ads later.

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.


PlatformsMeta
POST
/v1/ads/creatives

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adcreatives.createAdCreative({  body: {    accountId: 'account_abc123',    adAccountId: 'adaccount_abc123',    headline: 'string',    body: 'Hello, world!',    linkUrl: 'https://example.com',  },});console.log(data);
{  "adAccountId": "act_123456789",  "creativeId": "123456789012345"}
Was this page helpful?

List partnership permissions

Lists the creators who have granted, or have pending, permission for your Instagram account to run Partnership Ads with them (private beta). Lists granted or pending creator permissions for the advertiser Instagram Business Account. Requires instagram_branded_content_ads_brand permission.

Creative details

Shows the details of one Meta creative, such as its content, status and thumbnail. One creative's details, verbatim from Meta. `fields` is a raw-passthrough override of the default projection.

accountId*string

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

adAccountId*string

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

headline*string
Lengthlength <= 255
body*string

Primary text

description?string

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

Lengthlength <= 255
callToAction?string

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

Default"LEARN_MORE"
linkUrl*string
Formaturi
imageUrl?string

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

Formaturi
imageHash?string

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

carouselCards?array<>
Items2 <= items <= 10
optimizeCardOrder?boolean

Only with carouselCards (a 400 without them). Sets link_data.multi_share_optimized: false keeps the cards in the order given, and Meta then takes at most 5 cards, so false with more than 5 cards is a 400; true lets Meta reorder them for performance. Omitted, nothing is sent and Meta's default (true) applies.

urlTags?string

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

promotion?|

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.

creativeFeatures?

Meta only. Applied to each new creative, including standalone and attach shapes. With creatives[], these are defaults; an item replaces the whole feature map, including an empty map. auto_promotion_tag is an Advantage+ enhancement, not the Ads Manager Promotion setting.

multiAdvertiser?string

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.

Value in

  • "OPT_IN"
  • "OPT_OUT"
aiDisclosure?string

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.

Value in

  • "OPT_IN"
  • "OPT_OUT"