Upload an ad video
Standalone ad-video upload (parallel to POST /v1/ads/images), so a video creative can
be rendered via POST /v1/ads/preview or attached via video.id on POST /v1/ads/create
before an ad exists.
Accepts either an https videoUrl we download server-side (SSRF-guarded) or raw
videoBase64 bytes; exactly one is required. videoBase64 is capped by Vercel's body
limit, around 4.5 MB payload in practice, so larger videos must come via videoUrl.
Returns the Meta video.id (reusable wherever video.id is accepted) plus Meta's
auto-generated poster URL when available. By default the endpoint waits until Meta
reports the video ready (chunked upload + transcode can take minutes; the handler runs
up to 800 s) and answers 201.
Async mode. Send async: true to get a 202 as soon as Meta has accepted the bytes,
with video.status: processing. Then either poll GET /v1/ads/videos/{videoId} until
status is ready, or subscribe to the ad.video.processed webhook. A create call
that references the video while it is still processing waits up to 30 s, then answers
409 invalid_resource_state naming the status endpoint. With videoUrl the download
and byte transfer still happen inside the request; only Meta's transcode is skipped.
Authorization
bearerAuth 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.uploadAdVideo({ body: { accountId: 'account_abc123', adAccountId: 'adaccount_abc123', },});console.log(data);{ "adAccountId": "string", "video": { "id": "string", "status": "ready", "thumbnailUrl": "string" }}Upload an ad image from base64
Uploads raw image bytes to the Meta ad account's image library, for callers whose creatives aren't hosted at a public URL. Returns the image `hash` (Meta's identifier for the asset) and the Meta-hosted `url`, which can be used directly as `imageUrl` on the create endpoints. Max 30 MB decoded.
List custom audiences
Returns custom audiences for the given ad account. Supports Meta, Google, TikTok, Pinterest, LinkedIn, and X.