POST /api/v1/brands/:id/project
Request
Path parameters
Brand UUID to project. Obtain this from the completed extraction job or from
the List Brands endpoint.
Body parameters
A plain-English description of how the brand context will be used. The model
shapes the output payload around this description.Examples:
"Generate shadcn design tokens for a SaaS dashboard""Create campaign copy for a social media ad""Build a Next.js landing page token contract""Create lovable.dev-ready UI variables and button style guide"
Response
The endpoint returns200 synchronously. When the model path succeeds, you
receive a model-generated compact payload. If Gemini cannot produce valid
structured output, the server falls back to a deterministic projection derived
from stored DNA — you still receive 200 with a valid payload.
Response fields
Unique request identifier prefixed with
req_pi_.Always
"brand.projection" for this endpoint.Always
"completed" when a payload is produced.Unix timestamp (seconds) when the request was received.
Examples
Inspect
data.payload.meta to determine whether the response was produced by
the model or by the deterministic fallback. When the model path succeeds,
meta may be absent or may not contain source: "deterministic_projection".
Either way, the payload is safe to consume.Error codes
| Code | HTTP | Description |
|---|---|---|
invalid_brand_id | 400 | Path id is not a valid UUID. |
invalid_request_body | 400 | use_case is missing or invalid. |
invalid_json_body | 400 | Request body is not valid JSON. |
projection_request_too_large | 400 | Request body exceeds the projection body-size limit. |
brand_not_found | 404 | Brand does not exist or belongs to a different organization. |
projection_abuse_threshold_exceeded | 429 | Repeated oversized requests exceeded the abuse window limit. |
brand_lookup_failed | 500 | Database error while loading the brand. |
projection_generation_failed | 502 | Projection could not be built — no fallback was available. |