Ai generation

Generate cover / A+ / concept / mock-up artwork

POST/ai/generate-artwork

Runs the internal two-stage artwork pipeline for a resource: a concept model writes master prompts from the book metadata and cover, then the image model renders the first concept. Direct REST equivalent of the in-app artwork generator.

Synchronous. Both stages block, so this call can take a while (tens of seconds to minutes) — it is genuinely synchronous, not job-queued. The rendered image is returned in the {path, url} shape; artwork lives outside the chat image tree, so its url points at GET /ai/artwork/images and is fetched with the X-Api-Key header (not a signed URL).

Requires the ai key scope, a linked service user, and edit access to the resource. asset_type and aspect_ratio are required; all other artwork options (style, provider, A+ / mock-up settings) are accepted and forwarded verbatim to the internal generator.

X-Api-Key<token>

Issued to you when your integration is provisioned. Determines which catalogue resources are visible and which AI tools are available.

In: header

Request 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/generate-artwork" \  -H "Content-Type: application/json" \  -d '{    "resourceRef": 0,    "asset_type": "cover",    "aspect_ratio": "us_trade"  }'
{  "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",    "historyRef": 0,    "batchId": "string",    "imageName": "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"  }}