Generate an image from a prompt
/ai/images/generateGenerates an image directly from a text prompt — the same capability
the chat image_generation tool provides, without needing a chat.
Returns the image in the standard {path, url} shape; the url is a
signed GET /ai/images URL valid for one hour, droppable straight into
an <img src>.
Requires the ai key scope and a linked service user.
Idempotency. Image generation is expensive, so this endpoint honours
the Idempotency-Key header: a retry with the same key and the same
body within 24h replays the original response (Idempotent-Replayed: true)
instead of generating a second image. Reusing a key with a different body
returns 422 IDEMPOTENCY_KEY_CONFLICT.
Authorization
apiKey Issued to you when your integration is provisioned. Determines which catalogue resources are visible and which AI tools are available.
In: header
Header Parameters
Printable-ASCII key. Same key + same body within 24h replays the first response.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/ai/images/generate" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A watercolour fox reading a book under an oak tree" }'{ "data": { "images": [ { "path": "/chat_images/1024/gpt_307_stream_xxx.png", "url": "https://example.veristage.com/api/external/ai/images?path=%2Fchat_images%2F1024%2Fgpt_307_stream_xxx.png&exp=1777565000&sig=<signature>" } ], "prompt": "string", "textResponse": "string" }}{ "success": false, "status": "fail", "message": "string", "error": { "message": "API key is required", "code": "NO_API_KEY" }}{ "success": false, "status": "fail", "message": "API key is required", "error": { "code": "NO_API_KEY", "message": "API key is required" }}{ "success": false, "status": "fail", "message": "This API key does not have the 'write' scope", "error": { "code": "INSUFFICIENT_SCOPE", "message": "This API key does not have the 'write' scope" }}{ "success": false, "status": "fail", "message": "string", "error": { "message": "API key is required", "code": "NO_API_KEY" }}{ "success": false, "status": "fail", "message": "string", "error": { "message": "API key is required", "code": "NO_API_KEY" }}Generate one metadata field's value POST
Generates a single AI-enabled field's value for a resource — the same path as the in-app "regenerate" button (description, keywords, BISAC/ Thema classification, and the other configured AI field types). The generated value is **returned but not saved**. Persist it with `PATCH /resources/{ref}/fields` if you want to keep it. Address the field by `fieldRef` or by `fieldName` (matched against the resource's AI-enabled fields; ambiguous names return `400 AMBIGUOUS_FIELD`). Requires the `ai` key scope, a linked service user, and edit access to the resource. Text fields run to completion synchronously and the finished value comes back in `data.value`; classification fields return the resolved `nodeIds`/`nodeNames` (their names joined into `data.value`).
Research Amazon book keywords POST
Researches Amazon search-volume and competition metrics for a set of seed terms (comparable authors, series, distinctive titles, seasonal search phrases). Direct REST equivalent of the chat `book_keyword_research` tool. Requires the `ai` key scope and a linked service user. When `marketplace` is omitted it defaults to the linked user's usergroup market (never a hardcoded US).