---
title: "Reserve presigned PUT slots for inspiration exemplar frames"
method: POST
path: "/v1/brand-kits/exemplar-uploads"
tags: ["brand-kits"]
---

# Reserve presigned PUT slots for inspiration exemplar frames

`POST /v1/brand-kits/exemplar-uploads`

## Request

- Base URL: `https://api.cueframe.ai`
- URL: `https://api.cueframe.ai/v1/brand-kits/exemplar-uploads`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.cueframe.ai/api/auth/mcp/authorize`, token URL `https://api.cueframe.ai/api/auth/mcp/token`, scopes: `projects:write`)
  - API key in header `PAYMENT-SIGNATURE`

Returns presigned PUT URLs under this org's `brand-inspiration/…` prefix — the only namespace the brand-kit upsert accepts `exemplarKeys` from. PUT each curated reference frame (≤720px jpeg recommended — the frames become vision input downstream), then upsert the kit with the returned keys. This is the ingest door for agent-driven kit extraction (the `extracting-brand-kits` skill on GET /skills).

## Request body

- ExemplarUploadsRequest: POST /brand-kits/exemplar-uploads body. Reserve presigned PUT slots for curated reference frames (≤720px recommended — they are vision input tokens downstream).
  - `count` integer, required
  - `contentType` 'image/jpeg' | 'image/png'
  - `includeContactSheet` boolean

## Response `201`

Presigned PUT slots reserved.

- ExemplarUploadsResponse
  - `batchId` string, required
  - `uploads` object[], required
    - `key` string, required
    - `url` string, required
  - `contactSheetUpload` object
    - `key` string, required
    - `url` string, required
  - `expiresAt` string, required

## Other responses

- `400`: Bad request — validation_error / invalid_cursor / invalid_query.
- `401`: Missing or invalid Authorization header.
- `402`: Payment required. Returned when the caller presents no API key on a priced operation: the body AND the `Payment-Required` header carry the x402 v2 challenge (accepted scheme, network, USDC asset, amount, payTo). Sign the EIP-3009 authorization and retry with a `PAYMENT-SIGNATURE` header. A KEYED caller sees this status instead when their plan lacks or has exhausted the feature (`billing_required`).
- `403`: Forbidden — permission insufficient.
- `429`: Rate limited. Retry-After header present.
- `500`: Internal error.

---

[API](https://skmtc.dev/cueframe/apis/cueframe-api.md) · [All operations](https://skmtc.dev/cueframe/apis/cueframe-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cueframe/apis/cueframe-api/revisions/8f9bfe362b4a?raw)
