Generation Tools
Pose Variation
Re-pose the person in an existing photo while guaranteeing every garment, accessory and held or worn item stays exactly as photographed — same person, same outfit, new body posture.
toolId: "pose_angle_switch"
4 credits
single_image_edit
ratio: ignored
What it does
Give this tool an existing on-model photo and a target pose, and it re-poses the person while locking everything else in place — the garment, any accessories, and anything they're holding or wearing stays identical to the source photo. Only the body posture changes.
This is an in-place edit, so the original crop and canvas are always preserved — ratio is
ignored if you send it. Don't expect it to change the output framing; it won't.
Request body
| Field | Type | Description | |
|---|---|---|---|
toolId | string | required | Always "pose_angle_switch". |
images.user_photo | string | required | URL of the existing on-model photo to re-pose. |
pose | string | required | A catalog ID from GET /v1/poses. Required in practice — without it there's nothing to change the pose to. |
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": "pose_angle_switch",
"images": {
"user_photo": "https://your-cdn.com/on-model-shot.jpg"
},
"pose": "pose_hand_on_hip"
}'
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: "pose_angle_switch",
images: {
user_photo: "https://your-cdn.com/on-model-shot.jpg",
},
pose: "pose_hand_on_hip",
}),
});
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": "pose_angle_switch",
"images": {
"user_photo": "https://your-cdn.com/on-model-shot.jpg",
},
"pose": "pose_hand_on_hip",
},
)
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
| Status | Meaning |
|---|---|
| 400 | pose_angle_switch: missing required image "user_photo" — required image field wasn't resolvable. |
| 402 | Insufficient diamonds. Required 4, have <n>. |
| 429 | Daily request cap reached for this key — see Rate Limits. |
Related tools
- Virtual Try-On (Single) — generate a fresh on-model photo from a garment instead of re-posing an existing one.
- Model Swap — change who's wearing the outfit instead of how they're posed.