Colora API

The API is the app's own /v1 API opened to API keys: the same pages, characters, books, credits and limits. API keys come with the Creator and Pro plans. AI assistants should use the MCP connector instead.

Authentication

Create a key in the app under Account → API keys and send it as a bearer token:

curl https://colora-api.norvane-studio.com/v1/me \
  -H "Authorization: Bearer co_live_..."

Make a page

curl -X POST https://colora-api.norvane-studio.com/v1/pages \
  -H "Authorization: Bearer co_live_..." -H "Content-Type: application/json" \
  -d '{"subject": "a friendly dragon reading a book", "level": "kids", "aspect": "3:4"}'

The answer is 202 Accepted with the queued page and a Location header. Poll GET /v1/pages/{id} every 2 seconds until status is succeeded (then imageUrl is a 15-minute link to the PNG) or failed (the credit is refunded). A page takes about 5 seconds. The same request within 2 minutes returns the same page without charging again.

Endpoints

Method and pathWhat it doesCost
POST /v1/pagesA page from a description (subject, level, aspect, frame, characterId, count 1–4)1 credit per page
POST /v1/pages/photoA page traced from a photo uploaded with /v1/files1 credit
POST /v1/ideasPage ideas for a themeFree (daily allowance)
POST /v1/pages/batchOne page per idea (Creator 10, Pro 50 per request)1 credit per page
GET /v1/pages, GET /v1/pages/{id}The library; one pageFree
POST /v1/pages/{id}/edit, /againA change in words; another version1 credit
GET /v1/pages/{id}/download, /versions; DELETE /v1/pages/{id}Download link; versions; deleteFree
GET/POST /v1/charactersList; save a character from a pageFree
GET /v1/books, GET /v1/books/{id}Books and signed links to their pagesFree
POST /v1/files/upload-url, /confirmUpload a photo straight to storageFree

Levels: kids, medium, detailed. Shapes: 3:4 (Letter, A4), 4:5 (8×10), 2:3 (6×9), 1:1, 4:3. Put words in quotes in the subject to have them lettered on the page.

Limits and errors

1,200 requests an hour per key, polling included; every answer carries RateLimit-Policy and RateLimit headers, and a 429 has Retry-After. Errors are JSON: {"error": "no_credits", "message": "..."}. Common codes: no_credits (402), plan_required (403), content_refused (422), capacity (503).

PDF and SVG are made on the device in the app; through the API you get the PNG (about 1 megapixel).