---
title: "Create a standalone creative"
method: POST
path: "/v1/ads/creatives"
tags: ["Ad Creatives"]
---

# Create a standalone creative

`POST /v1/ads/creatives`

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.

## Request body

- object
  - `accountId` string, required — Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token and Page.
  - `adAccountId` string, required — Meta ad account id (act_<n>).
  - `headline` string, required
  - `body` string, required — Primary text
  - `description` string — Link description below the headline; omitted = Meta scrapes the destination's OG description.
  - `callToAction` string — CTA type (same whitelist as POST /v1/ads/create).
  - `linkUrl` string, uri, required
  - `imageUrl` string, uri — Publicly reachable image; uploaded to the account's library server-side.
  - `imageHash` string — Existing library image hash (POST /v1/ads/images or GET /v1/ads/images).
  - `carouselCards` object[]
    - `imageUrl` string, uri, required
    - `linkUrl` string, uri, required
    - `headline` string
    - `description` string
    - `callToAction` string
  - `urlTags` string — Appended to every outbound URL (e.g. utm_source=fb).
  - `creativeFeatures` object — 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` '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 — Meta rejects it there.

## Response `201`

Creative created

- object
  - `adAccountId` string
  - `creativeId` string — Platform creative id, reusable via existingCreativeId.

## Other responses

- `400` — Invalid input, or Meta rejected the create
- `401` — Unauthorized
- `422` — No Facebook Page found to act as the story actor
- `501` — Only supported on Meta (facebook/instagram)

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/26bee5940ef6/schema)
