# Get a creative

Returns the data record of one approved creative of your organisation. Use it to fetch a single creative, or to check whether a creative you stored is still available.

```
GET /api/delivery/v1/creatives/{id}
```

**Scope:** `creatives:export`

## Description

Returns the same record as [List creatives](https://docs.wandura.ai/developers/reference/creatives-list#the-creative-record), wrapped in the `{code, message, data, server_time}` envelope. A creative that does not exist, belongs to another organisation, or is not in status `approved` or `pushed` returns the same `404`, so you cannot tell these cases apart.

## Request parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `Authorization` | header | string | Yes | `Bearer <API key>` for a key with the `creatives:export` scope. |
| `id` | path | string (UUID) | Yes | The `creative_id` of the creative. A value that is not a UUID returns `404`. |

## Request example

```bash
curl -s https://www.wandura.ai/api/delivery/v1/creatives/5e1b7c3a-2d4f-4a6b-9c8d-0e1f2a3b4c5d \
  -H "Authorization: Bearer $WANDURA_API_KEY"
```

## Response

`200 OK`

| Field | Type | Description |
|---|---|---|
| `code` | integer | `0`. |
| `message` | string | `"ok"`. |
| `data` | object | The creative record. Fields are listed in [The creative record](https://docs.wandura.ai/developers/reference/creatives-list#the-creative-record). |
| `server_time` | integer | Server time in Unix epoch seconds. |

## Response example

```json
{
  "code": 0,
  "message": "ok",
  "data": {
    "schema_version": 1,
    "creative_id": "5e1b7c3a-2d4f-4a6b-9c8d-0e1f2a3b4c5d",
    "creative_code": "ACV001-FILM0001-EP1-2-F1-TEAM",
    "name": "Heiress returns - wedding hook",
    "status": "pushed",
    "created_at": 1790500000,
    "approved_at": 1790590000,
    "updated_at": 1790640000,
    "org": { "slug": "your-org" },
    "film": { "code": "FILM0001", "title": "The Heiress Returns", "language": "en", "genres": ["romance", "revenge"] },
    "episodes": [1, 2],
    "placement": "reels_9x16",
    "aspect": "9:16",
    "duration_ms": 21500,
    "scenes": [
      { "episode_no": 1, "start_ms": 12000, "end_ms": 19500, "duration_ms": 7500, "action": "reveal", "line": "You threw me out. Now watch me take it all back." },
      { "episode_no": 2, "start_ms": 40000, "end_ms": 54000, "duration_ms": 14000, "action": null, "line": null }
    ],
    "hook": { "action": "reveal", "line": "You threw me out. Now watch me take it all back." },
    "formula": { "name": "Cliffhanger opener" },
    "rights": { "ends_at": 1798675200 },
    "lineage": { "parent_creative_id": null },
    "final": { "ready": true, "target": { "width": 1080, "height": 1920, "fps": 30, "codec": "h264" } }
  },
  "server_time": 1790679032
}
```

## Errors

| Status | `code` | When |
|---|---|---|
| 401 | 4010 | The `Authorization: Bearer` header is missing. |
| 401 | 4011 | The key is unknown or revoked. |
| 403 | 4030 | The key lacks the `creatives:export` scope. |
| 403 | 4031 | Your organisation's access is suspended. |
| 404 | 4040 | No approved creative with this ID exists for your organisation, or the ID is not a UUID. |
| 429 | none | Rate limit reached. Flat body with `error_code` `rate_limited`, not the envelope. |
| 503 | 5030 | The feed is temporarily unavailable. Retry with backoff. |
| 503 | 5031 | Wandura could not verify the API key in time. The key is not wrong: retry with backoff. |

See [Errors](https://docs.wandura.ai/developers/concepts/errors#creatives-errors) for what to do in each case.
