API docs menu
API v1
Fittins AI API
The Fittins AI API is the same premium AI fashion generation service as fittins.ai, for your own store, catalogue system or agency tools. Send up to 3 product photos and a model, and get back a studio-quality on-model photo, up to 8K, from the Turbo, Default, Premium or Ultra tier. Results use your plan's credits and also appear in My Generations.
- Base URL
- https://api.fittins.ai/v1
- Plans
- Pro, Business, Enterprise
- Pricing
- The same credits as the website: a Default 1K photo is 40 credits
- Format
- JSON over HTTPS; files as PNG
Quickstart
- 1
Create a key
In Profile → API keys on fittins.ai. The key is shown once; keep it on your server.
- 2
Pick a model
GET /v1/models lists our model library and your custom models.
- 3
Create a photo
POST /v1/images with your product photo URL. It answers 202 with a generation id.
- 4
Get the result
Poll GET /v1/generations/{id} every few seconds. When it succeeded, download output.url.
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"
}
}'202 Accepted
{
"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
}// Poll until the photo is ready (usually about a minute).
async function waitFor(id) {
for (;;) {
const res = await fetch(`https://api.fittins.ai/v1/generations/${id}`, {
headers: { Authorization: `Bearer ${process.env.FITTINS_API_KEY}` },
});
const g = await res.json();
if (g.status === "succeeded" || g.status === "failed") return g;
await new Promise((r) => setTimeout(r, 4000));
}
}
const g = await waitFor(generation.id);
if (g.status === "succeeded") console.log(g.output.url); // full-quality PNG, link valid 24 hours
else console.error(g.error.code, g.error.message);Basics
| Field names | snake_case; times in UTC, ISO 8601 (2026-11-04T17:02:11.000Z) |
| Ids | gen_ generation · upl_ upload · file_ file · mdl_lib_ / mdl_own_ model · loc_lib_ / loc_own_ location |
| Lists | { "object": "list", "data": […], "has_more": true, "next_cursor": "…" }; ?limit=1..100 (default 20) and ?cursor= |
| Versions | The major version is in the path (/v1). New fields and endpoints are added without notice; anything that would break your code gets a new version, announced 90 days ahead. |
| Request id | Every response has an X-Request-Id header. Quote it to support. |
What responses never include
- Our expanded prompts and the AI analysis of your photos: you get back your own prompt as input.prompt.
- Preview and thumbnail versions: output is the full-quality PNG only.
- Storage addresses: files come through /v1/files, by id, with signed links.
- Which AI provider ran a step, and internal error codes: errors use the public codes below.
Questions? Email support@fittins.ai with the X-Request-Id of the request.Next: Authentication →