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.
Authorization
bearerAuth 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"}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.