F Fashio Docs
Generation Tools

Virtual Try-On (Batch)

Put a full outfit — top, bottom, shoes, whatever you need — on one AI fashion model in a single shot, instead of generating each garment separately.

toolId: "outfit_photo" 4 credits model_garment ratio: global (default 1:1)
Multiple garments composed into one outfit on an AI fashion model

What it does

Same idea as Virtual Try-On (Single), but multiple garment photos compose into one coherent outfit on the model — a blazer, trousers and shoes become a single finished shot instead of three separate generations.

Request body

FieldTypeDescription
toolIdstringrequiredAlways "outfit_photo".
images.fashion_modelstringrequiredA catalog ID from GET /v1/fashion-models, or a direct image URL.
images.garment_photosstring[]requiredArray of garment photo URLs — at least one, e.g. top + bottom + shoes.
images.venuestringoptionalA catalog ID from GET /v1/venues, or a direct image URL. Omit for a clean studio background.
posestringoptionalA catalog ID from GET /v1/poses. Omit for a natural standing pose.
ratiostringoptionalOne of 1:1, 4:5, 3:4, 9:16, 16:9. Defaults to 1:1.

Example request

curl -X POST https://api.fashiolabs.com/v1/generations \
  -H "Authorization: Bearer fio_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "toolId": "outfit_photo",
    "images": {
      "fashion_model": "fm_south_asian_01",
      "garment_photos": [
        "https://your-cdn.com/blazer.jpg",
        "https://your-cdn.com/trousers.jpg"
      ],
      "venue": "venue_studio_white"
    },
    "pose": "pose_standing_relaxed",
    "ratio": "4:5"
  }'
const res = await fetch("https://api.fashiolabs.com/v1/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.FASHIO_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    toolId: "outfit_photo",
    images: {
      fashion_model: "fm_south_asian_01",
      garment_photos: [
        "https://your-cdn.com/blazer.jpg",
        "https://your-cdn.com/trousers.jpg",
      ],
      venue: "venue_studio_white",
    },
    pose: "pose_standing_relaxed",
    ratio: "4:5",
  }),
});
const { id } = await res.json();
import os, requests

res = requests.post(
    "https://api.fashiolabs.com/v1/generations",
    headers={"Authorization": f"Bearer {os.environ['FASHIO_API_KEY']}"},
    json={
        "toolId": "outfit_photo",
        "images": {
            "fashion_model": "fm_south_asian_01",
            "garment_photos": [
                "https://your-cdn.com/blazer.jpg",
                "https://your-cdn.com/trousers.jpg",
            ],
            "venue": "venue_studio_white",
        },
        "pose": "pose_standing_relaxed",
        "ratio": "4:5",
    },
)
job_id = res.json()["id"]

Response

202 Accepted{ "success": true, "id": "8b1e...", "status": "processing" }

Poll GET /v1/generations/:id (see Quickstart) until it completes:

200 · completed{ "success": true, "id": "8b1e...", "status": "completed", "resultUrls": ["https://.../result.jpg"], "errorMessage": null }

Common errors

StatusMeaning
400outfit_photo: missing required image "garment_photos" — required image field wasn't resolvable.
402Insufficient diamonds. Required 4, have <n>.
429Daily request cap reached for this key — see Rate Limits.