GET /api/v1/brands brands:read
List brands
Brands this key can reach — owned, plus any shared with you — newest first, capped at 100. A brand-scoped key returns only its own.
Returns `200` with `{ data: [ { id, name, tagline, status, industry, colors, logo_url, role, … } ] }`.
curl https://nabu.ammoura.me/api/v1/brands \
-H "Authorization: Bearer $NABU_KEY"
GET /api/v1/brands/[id]/logos assets:read
List logos
Logo assets for the brand, newest first, plus which one is currently assigned as the brand's logo.
Returns `200` with `{ data: [ { id, name, url, mime_type, width, height, … } ], current_logo_url }`.
POST /api/v1/brands/[id]/logos assets:write
Generate a logo
Generates a logo and stores it as an asset. Runs synchronously, so one request returns a finished asset with no polling. The prompt is built from the brand's own name, industry, personality and palette, plus constraints that keep output usable as a mark rather than as illustration.
Body style enum default abstract
One of the styles listed above.
instruction string optional
Extra direction, up to 500 characters. Added to the constraints rather than replacing them, so output stays printable.
set_as_logo boolean default false
Assign the result as the brand's logo. Defaults to false: generating and choosing are separate decisions, and an app usually wants to offer candidates before overwriting a mark already in use.
model string default Workers AI FLUX
v1 accepts Workers AI image models only.
Returns `201` with `{ data: { id, generation_id, url, style, prompt, model, width, height, set_as_logo } }`.
curl -X POST https://nabu.ammoura.me/api/v1/brands/<brand-id>/logos \
-H "Authorization: Bearer $NABU_KEY" \
-H 'Content-Type: application/json' \
--data '{"style":"lettermark","instruction":"geometric, single weight"}'
GET /api/v1/brands/[id]/assets/[assetId]/content assets:read
Fetch asset bytes
Streams the asset itself. Asset URLs from this API point here rather than at the app's own file route, which needs a browser session and would be a dead link to an API client. The lookup is scoped to the brand in the path, so an asset id belonging to another brand resolves to nothing.
Returns The raw file, with its `content-type`.