---
title: "Create a draft creative from an uploaded asset."
method: POST
path: "/v1/agent/creatives"
---

# Create a draft creative from an uploaded asset.

`POST /v1/agent/creatives`

## Request

- Base URL: `https://api.nowyourlink.com`
- URL: `https://api.nowyourlink.com/v1/agent/creatives`
- Auth: OAuth 2 (authorization code, authorization URL `https://api.nowyourlink.com/oauth/authorize`, token URL `https://api.nowyourlink.com/oauth/token`, scopes: `creatives:write`)

Create a draft creative from an uploaded asset.

## Request body

- object
  - `headline` string, nullable
  - `body` string, nullable
  - `target_url` string, uri, nullable
  - `display_url` string, nullable
  - `cta_label` 'learn-more' | 'shop-now' | 'sign-up' | 'book' | 'download' | 'contact' | 'null', nullable
  - `clone_from` string: Reuse another owned creative's asset.

## Response `201`

Draft creative created.

- object
  - `ad_id` string, required
  - `state` 'draft', required

## Other responses

- `400`: Unknown field or an invalid copy value (ads.bad-body, ads.bad-headline, ads.bad-body-text, ads.bad-target-url, ads.bad-display-url, ads.bad-cta, ads.bad-clone-from).
- `401`: The bearer token is missing, expired or invalid. A missing Authorization header returns an empty body.
- `403`: This grant lacks the scope the operation requires.
- `404`: clone_from does not name an owned creative (ads.clone-source-not-found).
- `405`: The path exists but does not accept this method (agent.method-not-allowed).
- `429`: This grant's 120-per-minute token bucket is empty. Wait Retry-After seconds before retrying.

---

[API](https://skmtc.dev/nowyourlink/apis/nowyourlink-public-spotlight-api.md) · [All operations](https://skmtc.dev/nowyourlink/apis/nowyourlink-public-spotlight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nowyourlink/apis/nowyourlink-public-spotlight-api/revisions/cd8408529b48?raw)
