For AI agents: this page is also available as Markdown at https://docs.refabric.com/task-api-reference/image.repose.md, and the index of every page is https://docs.refabric.com/llms.txt.
Image editing
Put a model in new poses
Put the same person in the same clothes into new poses — picked from the pose library or described in words. Delivered as one image file per pose, in the order you listed them.
Endpoint: POST https://api.refabric.com/v1/tasks/image.reposeTask: image.reposeScope: tasks:runCategory: Image editing
Quick start
import os
import time
import requests
headers = {"Authorization": f"Key {os.environ['REFABRIC_API_KEY']}"}
job = requests.post(
"https://api.refabric.com/v1/tasks/image.repose",
headers=headers,
json={
"image": "art:9f2c01",
"poses": {
"type": "custom",
"items": [
{
"type": "library",
"pose": "pose:112ea8bb-5c1d-4e0f-9a2b-3c4d5e6f7a80",
},
{
"type": "prompt",
"prompt": "arms crossed, looking over the left shoulder",
},
{
"type": "prompt",
"prompt": "walking towards the camera",
},
],
},
},
).json()
print(job["job_id"])
while True:
status = requests.get(job["status_url"], headers=headers).json()
if status["lifecycle"] == "terminal":
break
time.sleep(5)
print(requests.get(job["result_url"], headers=headers).json())cURL waits for the result with Prefer: wait; when the job outlives the wait, it answers 202 with the job's URLs.
Input schema
- stringrequired
The finished image to re-pose; the person and the clothes are kept. As one string: a URL, a file from an earlier result (
art:…or its url) or an upload (file:…). If it is one of your files placed in a project or on a design in the Refabric app, the result is filed there too.pattern: ^(https://|art:|file:).+$
Example:
art:9f2c01 - objectrequired
The poses to make,
{type: custom, items: [...]}— 1 to 40 items, each a pose from the library ({type: library, pose: "pose:<id>"},GET /v1/refs/pose) or in words ({type: prompt, prompt}). Every item is made and charged as one image.Example:
{"type":"custom","items":[{"type":"library","pose":"pose:112ea8bb-5c1d-4e0f-9a2b-3c4d5e6f7a80"},{"type":"prompt","prompt":"arms crossed, looking over the left shoulder"},{"type":"prompt","prompt":"walking towards the camera"}]} - stringoptional
The model the image shows, as a
model:<id>handle (GET /v1/refs/model). An image from a shoot, or an edit of one, already carries its model; sendmodelfor any other picture (an upload, a url).pattern: ^model:.+$
Example:
model:5501
Output schema
- array<object>optional
One file per pose that was made, in
poses.itemsorder. - objectoptional
How many of the listed poses were made, and which are missing.
- integeroptional
The poses listed.
- integeroptional
The files made (and charged).
- array<object>optional
One
{code: "output_not_produced", field, message}row per pose that could not be made,fieldnaming it ("poses.items[1]").
Required-fields example
{
"image": "art:9f2c01",
"poses": {
"type": "custom",
"items": [
{
"type": "library",
"pose": "pose:112ea8bb-5c1d-4e0f-9a2b-3c4d5e6f7a80"
},
{
"type": "prompt",
"prompt": "arms crossed, looking over the left shoulder"
},
{
"type": "prompt",
"prompt": "walking towards the camera"
}
]
}
}Full example
{
"image": "art:9f2c01",
"poses": {
"type": "custom",
"items": [
{
"type": "library",
"pose": "pose:112ea8bb-5c1d-4e0f-9a2b-3c4d5e6f7a80"
},
{
"type": "prompt",
"prompt": "arms crossed, looking over the left shoulder"
},
{
"type": "prompt",
"prompt": "walking towards the camera"
}
]
},
"model": "model:5501"
}Response example
{
"job_id": "d2b3c4d500004000800000000000000f",
"lifecycle": "queued",
"status_url": "http://v3-api.refabric.com/v1/jobs/d2b3c4d500004000800000000000000f",
"result_url": "http://v3-api.refabric.com/v1/jobs/d2b3c4d500004000800000000000000f/result",
"cancel_url": "http://v3-api.refabric.com/v1/jobs/d2b3c4d500004000800000000000000f/cancel"
}Result example
{
"job_id": "d2b3c4d500004000800000000000000f",
"files": [
{
"file": "art:9f2c07",
"url": "https://files.example.com/image.repose/1.png",
"media_type": "image/png",
"task": "image.repose",
"job_id": "d2b3c4d500004000800000000000000f",
"created_at": "2026-10-01T09:40:02Z"
},
{
"file": "art:9f2c09",
"url": "https://files.example.com/image.repose/2.png",
"media_type": "image/png",
"task": "image.repose",
"job_id": "d2b3c4d500004000800000000000000f",
"created_at": "2026-10-01T09:40:19Z"
}
],
"has_more": false,
"summary": {
"requested": 3,
"delivered": 2,
"warnings": [
{
"code": "output_not_produced",
"field": "poses.items[1]",
"message": "One output of this job could not be produced; `field` names which."
}
]
}
}Files come in poses.items order; here the second pose could not be made, so two files come back and a warning names the missing pose.
Send a finished image and the poses you want — from your pose library or described in words — and get the same person in the same clothes in each pose. A pose that cannot be made is left out and not charged.
Built for
- More poses from one shoot image
- A pose set for a product page
- Poses from your library applied to one look
What you get
- One image per pose made, in the order you listed the poses.
- A
summarythat counts the poses asked for and made, and names each pose that could not be made.
Specs
| Input formats | Images, each one string: a URL, an upload (file:…) or a file from an earlier result (art:…). Upload types and sizes: GET /v1/meta limits.upload. |
|---|---|
| Input count | image: one |
| Output format | Files: each one line with its url and its media_type, in the job's result. |
| Outputs per job | One image file per item of poses.items. |
Choosing a task
- Use this when you have one finished image and want more poses of it. Use photoshoot.create when you are shooting garments on models from the start, with the poses chosen for the shoot.
Errors
field_not_acceptedinvalid_requestnot_foundpermission_deniedinsufficient_creditscontent_refusedprocessing_failedinvalid_optionfield_not_supported
Related
pose.create· It runs before: its result is this input.photoshoot.create· It runs before: its result is this input.image.face_fix· It runs after: it takes this task's result.
Good to know
poses.itemsholds at least 1 items.poses.itemsholds at most 40 items.
Pricing: Estimate a request before you run it, or see the price of each option.
For agents and code generation
- https://api.refabric.com/v1/tasks/image.repose/llms.txt
- https://api.refabric.com/v1/tasks/image.repose/openapi.json
GET https://api.refabric.com/v1/tasks/image.repose