---
title: "Create an image brief"
method: POST
path: "/image-briefs"
tags: ["Briefs"]
---

# Create an image brief

`POST /image-briefs`

Save an image brief as a draft — typically the content returned by `POST /image-briefs/generate`, but any content is accepted. Up to 3 products; index 0 is the hero. Omit `name` and the brief is named after its headline.

`Idempotency-Key` is required so a retry doesn't leave you with duplicate drafts. `X-Dry-Run: true` validates without saving.

## Headers

- `Idempotency-Key` string, nullable
- `X-Dry-Run` string, nullable

## Request body

- ImageBriefCreateRequest — New image-brief draft. The shop comes from the API key, not the body.
  - `product_ids` string[]
  - `template_id` string
  - `accent_color` string, nullable
  - `main_header_background` string, nullable
  - `name` string, nullable
  - `content` BriefContent
    - `kicker` string
    - `signatureHooks` string[]
    - `winningHooks` WinningHook[]
      - `text` string, required
      - `lead` boolean, required
    - `socialProof` string[]
    - `benefits` Benefit[]
      - `term` string, required
      - `detail` string, required
    - `contentIdeas` ContentIdea[]
      - `title` string, required
      - `detail` string, required
    - `shopTagline` string
  - `image_overrides` object

## Response `201`

Successful Response

- ImageBriefWriteResponse
  - `data` BriefResponse, required
    - `id` integer, required
    - `shop_id` integer, required
    - `product_ids` unknown[], required
      - unknown
    - `template_id` string, required
    - `accent_color` string, nullable
    - `main_header_background` string, nullable
    - `name` string, nullable
    - `content` BriefContent, required
      - `kicker` string
      - `signatureHooks` string[]
      - `winningHooks` WinningHook[]
        - `text` string, required
        - `lead` boolean, required
      - `socialProof` string[]
      - `benefits` Benefit[]
        - `term` string, required
        - `detail` string, required
      - `contentIdeas` ContentIdea[]
        - `title` string, required
        - `detail` string, required
      - `shopTagline` string
    - `image_overrides` object, required
    - `status` string, required
    - `created_by_email` string, nullable
    - `created_at` string, nullable
    - `updated_at` string, nullable
    - `products` BriefProductSummary[], nullable
      - `id` string, required
      - `name` string
      - `brand` string
      - `price` string
      - `image` string
  - `dry_run` boolean

## Other responses

- `400` — Validation error, multi-shop key, or missing/invalid Idempotency-Key.
- `403` — API key lacks `read_write` scope (`WRITE_NOT_PERMITTED`).
- `404` — Brief or product not found in this shop.
- `409` — Idempotency conflict.
- `422` — Validation Error
- `429` — Write-tier rate limit exceeded.

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
