Zernio
Zernio
API Reference

Creatives

List a catalog's product setsGETList Meta product catalogsGETCreative libraryGETAd image libraryGETAd video libraryGETCreate a standalone creativePOSTCreative detailsGETDirect video and image URLs for an adGETRender previews of an existing adGETRename a creativePUTDelete a creativeDELETEDelete an ad videoDELETERender pre-create ad previewsPOSTUpload an ad image from base64POSTUpload an ad videoPOST
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
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.


PlatformsMeta
POST
/v1/ads/creatives

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication - use your Zernio API key as a Bearer token

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

{  "adAccountId": "string",  "creativeId": "string"}
Was this page helpful?

Ad video library

Lists the ad account's video library (Meta's `/act_X/advideos`), rows returned verbatim. The default projection covers id, title, status, poster frames, length and `source` (the playable MP4); `fields` is a raw-passthrough override. Any `id` here is reusable as `video.id` on the create endpoints, so N ads that differ only in copy share one upload. `source` lets you PLAY a video before picking it, which a poster frame alone can't settle when several videos share a first frame. It is a signed CDN URL that EXPIRES, so treat it as good for preview at selection time only — never persist it, re-list to get a fresh one. This is the only way to reach a video uploaded OUTSIDE Zernio (Ads Manager, another tool); videos we uploaded also come back as `creative.videoId` on GET /v1/ads. Meta transcodes asynchronously, so a row is only usable once `status.video_status` reads `ready`. Upload a new video via POST /v1/ads/videos, or inline via `video.url` on POST /v1/ads/create.

Creative details

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
urlTags?string

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

creativeFeatures?

Advantage+ creative enhancements: partial map of Meta creative feature keys (snake_case) to enroll status, forwarded as degrees_of_freedom_spec.creative_features_spec. Unspecified features default to OPT_OUT.

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 — Meta rejects it there.

Value in

  • "OPT_IN"
  • "OPT_OUT"