ai

POST /v1/ai/images/library

Generate images from a prompt, with no post involved.

All ai endpoints

Authentication

Send an API key as a bearer token. The key must carry the links.edit permission; a key without it is refused with 403, not 404.

Where your organisation id goes

This endpoint takes org_id as a field in the JSON body.

Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X POST https://api.zinndigital.com/v1/ai/images/library \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "prompt": <string> }'

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

Draws up to four images from the customer's own prompt and keeps them in their library for 90 days. Requires `links.edit`. ⭐ This is the door that makes image generation a product rather than a post decoration. Every other image operation needs a content post to exist first; a hosting customer who wants a hero picture for their homepage, a social card or a product shot has none and never will. Billing is the **one AI meter** — BYO key first, then Zinn® credits, then whatever the plan includes; there is no separate image SKU. ⛔ A suspended account or one with no active subscription is refused before anything is drawn (§2.46), with `AI_NOT_IN_GOOD_STANDING` rather than the top-up message: that one is fixed by settling the account, and offering a credit button there sends the customer to a screen that cannot help them. The response carries `unmet` — anything the chosen provider could not honour, in words for the customer. Nothing is silently dropped.

Request body

NameTypeRequiredWhat it is
promptstringYesUsed **as written**, not rewritten into a template. The only thing added is an instruction to draw no lettering, because all three providers render garbled text when asked for w…
shapestring<wide, standard, square>No⛔ A word, not a pixel pair, and that is a portability property rather than a simplification: Google takes an aspect ratio and a size *bucket* and cannot be given `1536x864`; Ope…
countintegerNo⛔ Bounded at 4 so one press cannot spend an unbounded amount of a customer's credit. Four is already more variations than anybody picks between.
stylestringNoAppended to the prompt — "photographic, muted palette".
providerAiImageProvider | string<>NoLeave empty to let the platform choose.
modelstringNoA specific `model_id` to pin, or empty to follow the provider's default.
org_idUuidNoUUIDv7 identifier — sortable by creation time (docs/02 §8).

Response

NameTypeRequiredWhat it is
dataGeneratedImage[]Yes
unmetstring[]NoWhat the chosen provider could not honour, in words for the customer. ⛔ Present and empty rather than absent when everything was honoured.

Errors this endpoint can return

401 · 403 · 422 · 429