API docs menu
Reference
Create an image
/v1/imagesCreates an on-model photo of your product on an AI model. Everything that can be checked is checked before it answers (the fields, your model and location, your plan, credits, storage and running generations), so most problems come back at once. It then answers 202 with a queued generation; the photo is usually ready in about a minute.
product_imagesarrayrequired1 to 3 photos of the product: { "url": "https://…" } or { "upload_id": "upl_…" }. Flat lays, hanger and ghost-mannequin shots and packshots all work. Different angles of one item are fine; another colour of the same item goes in a separate generation.
model_idstringrequiredA library model (mdl_lib_…) or one of your custom models (mdl_own_…). List them with GET /v1/models.
promptstringrequired3 to 1500 characters: pose, framing, light, mood, setting.
location_idstringoptionalA library or custom location (loc_lib_…, loc_own_…). Adds 10 credits. Leave it out to describe the setting in the prompt.
aspect_ratioenumdefault 1:11:1 · 9:16 · 16:9 · 3:4 · 4:3 · 3:2 · 2:3
tierenumdefault defaultturbo · default · premium (Kickstart plan and up) · ultra (Business and up). With location_id, the photo costs 10 credits more.
qualityenumdefault 1k1k · 2k · 4k · 8k. 2K, 4K and 8K are upscaled from the generated photo.
metadataobjectoptionalYour own references, returned unchanged: up to 20 keys (letters, digits, - or _, up to 40 characters), values up to 500 characters. metadata.sku (or reference) is shown on the result in My Generations.
webhook_urlstringoptionalAn https address we call once when this generation ends: succeeded, failed or canceled. The call carries only its id, type and status, not the result, and isn't signed, so read the result with GET /v1/generations/{id}. See Webhooks.
Headers: Authorization (required), Content-Type: application/json, Idempotency-Key (recommended).
curl https://api.fittins.ai/v1/images \
-H "Authorization: Bearer $FITTINS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: tshirt-red-m-front-v1" \
-d '{
"product_images": [
{
"url": "https://cdn.mystore.com/p/tshirt-red-front.jpg"
}
],
"model_id": "mdl_lib_DM5rQvl3KtlR7nqumd6I",
"prompt": "full body, plain light grey background, soft studio light, front view",
"aspect_ratio": "3:4",
"tier": "default",
"quality": "2k",
"metadata": {
"sku": "TSHIRT-RED-M"
}
}'{
"id": "gen_7Hq2Mz9TkQ4x1bVnR8sL",
"object": "generation",
"type": "image",
"status": "queued",
"created_at": "2026-11-04T17:02:11.000Z",
"started_at": null,
"completed_at": null,
"input": {
"model_id": "mdl_lib_DM5rQvl3KtlR7nqumd6I",
"product_images": [
{
"url": "https://cdn.mystore.com/p/tshirt-red-front.jpg"
}
],
"location_id": null,
"prompt": "full body, plain light grey background, soft studio light, front view",
"aspect_ratio": "3:4",
"tier": "default",
"quality": "2k"
},
"output": null,
"credits": {
"estimated": 50,
"charged": 0
},
"project_id": null,
"metadata": {
"sku": "TSHIRT-RED-M"
},
"error": null,
"livemode": true
}Credits per photo
| Tier | 1K | 2K | 4K | 8K |
|---|---|---|---|---|
| Turbo | 30 | 40 | 40 | 50 |
| Default | 40 | 50 | 50 | 60 |
| Premium | 60 | 70 | 70 | 80 |
| Ultra | 80 | 90 | 90 | 100 |
The same credits as on fittins.ai. They are taken once, when the photo is saved. A refused or failed generation costs nothing. If upscaling to 2K, 4K or 8K fails, you get the 1K photo, 40 credits are charged (50 with a location), and output.quality says 1k. A location adds 10 credits to any photo or video.