Appearance
Images
Create images from a description, or edit up to four of your own images to change a scene while keeping characters and style consistent.
Endpoints:
GET /v1/images/optionsPOST /v1/imagesGET /v1/images/{id}GET /v1/images/{id}/files/{name}
Models
id | Name | Mode | Note |
|---|---|---|---|
frame | Frame | generate | Best value, accurate text |
dailies | Dailies | generate | Fastest, about 10 seconds |
close-up | Close-Up | generate | 2K detail |
soft-focus | Soft Focus | generate | Natural, softer look |
close-up-edit | Close-Up | edit | Most faithful edits, 2K |
soft-focus-edit | Soft Focus | edit | Fastest edits |
frame-edit | Frame | edit | Restyles the whole scene |
Generate models make images from a prompt. Edit models need one to four images to work from.
Get image options
GET /v1/images/options
Response
200 OK
json
{
"models": [
{
"id": "frame",
"label": "Frame",
"mode": "generate",
"note": "Best value, accurate text",
"creditsEach": { "1:1": 130, "16:9": 130, "9:16": 130, "4:3": 120, "3:4": 120, "3:2": 130, "2:3": 130 }
},
{
"id": "frame-edit",
"label": "Frame",
"mode": "edit",
"note": "Restyles the whole scene",
"creditsEach": { "1:1": 250, "16:9": 250, "9:16": 250, "4:3": 240, "3:4": 240, "3:2": 250, "2:3": 250 }
}
],
"aspectRatios": ["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"],
"maxCount": 4,
"maxReferences": 4,
"promptMax": 2000,
"examples": [
"Product photo of a ceramic coffee mug on a marble counter, soft morning light, minimal, high detail"
]
}models and examples are shortened above. creditsEach is the price of one image per aspect ratio. Edit models are priced with one image to edit.
Credits
Free.
Example
bash
curl https://api.cinara.ai/v1/images/options \
-H "Authorization: Bearer $CINARA_API_KEY"Create images
POST /v1/images
Starts making one to four images.
Needs a verified phone.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
model | string | yes | A model id from the table above. |
prompt | string | yes | What the image shows. 3–2,000 characters. Naming well-known people is refused. |
aspectRatio | string | no | 1:1 (default), 16:9, 9:16, 4:3, 3:4, 3:2 or 2:3. Any other value becomes 1:1. |
count | integer | no | Images to make, 1–4. Default 1. |
seed | integer | no | 0–2147483647, for repeatable results. null, "" or omitted picks one at random. |
references | object[] | edit models | Images to edit, 1–4. Not allowed with generate models. |
references[].key | string | one of | The storage key of a finished image upload (PNG, JPEG or WebP). |
references[].generationId | string | one of | A succeeded Images generation in this workspace. Use with file. |
references[].file | string | with generationId | The file's name in that generation, such as image-1. |
Response
201 Created
json
{
"generation": {
"id": "7f2c9a4e-1d6b-4e8a-b3c5-9a0e2d7f4b61",
"module": "images",
"status": "running",
"input": {
"model": "frame",
"prompt": "A cozy bakery storefront at dusk with a hand-painted sign that reads \"FRESH BREAD\", warm window light, photograph",
"aspectRatio": "16:9",
"count": 2,
"seed": null,
"references": [],
"fileName": "a-cozy-bakery-storefront-at-dusk-with-a-hand-pai.jpg",
"creditsEach": 130
},
"output": { "stage": "queued", "stageLabel": "Creating images" },
"credits": 260,
"error": null,
"created_at": "2026-09-15T19:10:22.331784+00:00",
"completed_at": null
},
"credits": 42746
}Errors
| Status | error | Message |
|---|---|---|
| 400 | invalid_request | Choose a model |
| 400 | invalid_request | Upload the image first |
| 404 | not_found | That image isn't available any more |
| 400 | invalid_request | Choose an image to edit |
| 404 | not_found | That image isn't finished uploading. Add it again. |
| 400 | invalid_request | Images to edit must be PNG, JPEG or WebP |
| 400 | invalid_request | Describe the image |
| 400 | invalid_request | Keep the description under 2,000 characters |
| 400 | invalid_request | Make 1 to 4 images |
| 400 | invalid_request | The seed must be a whole number from 0 to 2147483647 |
| 400 | invalid_request | Add at least one image to edit |
| 400 | invalid_request | Use up to 4 images |
| 400 | invalid_request | Choose an edit model to use your own images |
| 400 | invalid_request | Cinara doesn't make images of well-known people. Describe the scene without naming them. |
| 402 | insufficient_credits | This needs 260 credits |
| 403 | phone_unverified | Verify your phone number to start creating. |
| 502 | generation_failed | The images couldn't start. Your credits were refunded. |
Credits
- Per image: the model's
creditsEachfor the aspect ratio, from Get image options. Forframe-edit, the price also grows with the number of images to edit. - Reserved: price per image ×
count. - Final: price per image × images delivered, never more than reserved. Images the safety filter holds back aren't charged. If none are delivered, everything is refunded.
Prices at 1:1:
| Model | Credits per image |
|---|---|
frame | 130 (120 at 4:3 and 3:4) |
dailies | 320 (300 to 310 at other ratios) |
close-up | 300 |
soft-focus | 400 |
close-up-edit | 300 |
soft-focus-edit | 400 |
frame-edit | 250 with one image to edit, 370 with two (10 less at 4:3 and 3:4) |
Example
bash
curl -X POST https://api.cinara.ai/v1/images \
-H "Authorization: Bearer $CINARA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "frame", "prompt": "A cozy bakery storefront at dusk with a hand-painted sign that reads \"FRESH BREAD\", warm window light, photograph", "aspectRatio": "16:9", "count": 2}'Edit an image made earlier:
bash
curl -X POST https://api.cinara.ai/v1/images \
-H "Authorization: Bearer $CINARA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "close-up-edit", "prompt": "The same storefront at night, snow falling, sign lit up", "references": [{"generationId": "7f2c9a4e-1d6b-4e8a-b3c5-9a0e2d7f4b61", "file": "image-1"}]}'Get an images job
GET /v1/images/{id}
Checks an images job, moves it forward, and returns it with its files once finished.
Response
200 OK
json
{
"generation": {
"id": "7f2c9a4e-1d6b-4e8a-b3c5-9a0e2d7f4b61",
"module": "images",
"status": "succeeded",
"input": {
"model": "frame",
"prompt": "A cozy bakery storefront at dusk with a hand-painted sign that reads \"FRESH BREAD\", warm window light, photograph",
"aspectRatio": "16:9",
"count": 2,
"seed": null,
"references": [],
"fileName": "a-cozy-bakery-storefront-at-dusk-with-a-hand-pai.jpg",
"creditsEach": 130
},
"output": { "made": 2, "blocked": 0 },
"credits": 260,
"error": null,
"created_at": "2026-09-15T19:10:22.331784+00:00",
"completed_at": "2026-09-15T19:10:51.806420+00:00"
},
"files": [
{ "name": "image-1", "label": "Image 1", "contentType": "image/jpeg", "size": 412883, "url": "https://api.cinara.ai/media/1789542651/Ab7kR…/workspaces/…/images/…/image-1.jpg" },
{ "name": "image-2", "label": "Image 2", "contentType": "image/jpeg", "size": 398120, "url": "https://api.cinara.ai/media/1789542651/Qz3mT…/workspaces/…/images/…/image-2.jpg" }
],
"credits": 42746
}| Field | Description |
|---|---|
output.made | Images delivered. |
output.blocked | Images the safety filter held back. |
files | image-1, image-2, … Empty until the job succeeds. |
Failures:
The safety filter held these images back. Try describing the image differently.Image generation took too long and was stopped.These images couldn't be made from this request. Try a different description or image.The images couldn't be made.
Errors
| Status | error | Message |
|---|---|---|
| 404 | not_found | Not found |
Credits
Free to read.
Polling example
bash
while :; do
RES=$(curl -s "https://api.cinara.ai/v1/images/$ID" -H "Authorization: Bearer $CINARA_API_KEY")
[ "$(echo "$RES" | jq -r .generation.status)" != "running" ] && break
sleep 5
done
echo "$RES" | jq -r '.files[] | "\(.name) \(.url)"'Download an image
GET /v1/images/{id}/files/{name}
Downloads one finished image as an attachment.
Response
200 OK with the image and Content-Disposition: attachment; filename="<file name>-image-1.jpg".
Errors
| Status | error | Message |
|---|---|---|
| 404 | not_found | File not found |
Credits
Free.
Example
bash
curl -L "https://api.cinara.ai/v1/images/7f2c9a4e-1d6b-4e8a-b3c5-9a0e2d7f4b61/files/image-1" \
-H "Authorization: Bearer $CINARA_API_KEY" -o bakery.jpg