For AI agents: this page is also available as Markdown at https://docs.refabric.com/task-api-reference/image.polish.md, and the index of every page is https://docs.refabric.com/llms.txt.

Image editing

Polish shoot images

Correct the light and colour of finished images of one of your shoots, keeping everything else. One polished file per image.

Endpoint: POST https://api.refabric.com/v1/tasks/image.polishTask: image.polishScope: 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.polish",
    headers=headers,
    json={
        "images": [
            "https://files.example.com/image.polish/1.png",
            "https://files.example.com/image.polish/2.png",
        ],
    },
).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

  • array<string>required

    1–400 images of ONE of your shoots, each as one string: an items[].url of GET /v1/files/photoshoot:<id> (or its art: file). Each is polished once, at the shoot's resolution.

    at least 1 items · at most 400 items

    Example: ["https://files.example.com/image.polish/1.png","https://files.example.com/image.polish/2.png"]

Output schema

  • array<object>optional

    One image/* file per polished image. An image already polished in a batch of several is skipped (not charged).

  • objectoptional

    How many images were polished or tried, how many were polished, and a warning when some could not be.

Required-fields example

{
  "images": [
    "https://files.example.com/image.polish/1.png",
    "https://files.example.com/image.polish/2.png"
  ]
}

Full example

{
  "images": [
    "https://files.example.com/image.polish/1.png",
    "https://files.example.com/image.polish/2.png"
  ]
}

Response example

{
  "job_id": "3123456789abcdef0123456789abcdef",
  "lifecycle": "queued",
  "status_url": "http://v3-api.refabric.com/v1/jobs/3123456789abcdef0123456789abcdef",
  "result_url": "http://v3-api.refabric.com/v1/jobs/3123456789abcdef0123456789abcdef/result",
  "cancel_url": "http://v3-api.refabric.com/v1/jobs/3123456789abcdef0123456789abcdef/cancel"
}

Result example

{
  "job_id": "3123456789abcdef0123456789abcdef",
  "files": [
    {
      "file": "art:7d01aa",
      "url": "https://files.example.com/image.polish/3.png",
      "media_type": "image/png",
      "task": "image.polish",
      "job_id": "3123456789abcdef0123456789abcdef",
      "created_at": "2026-10-01T11:02:10Z"
    },
    {
      "file": "art:7d01ab",
      "url": "https://files.example.com/image.polish/4.png",
      "media_type": "image/png",
      "task": "image.polish",
      "job_id": "3123456789abcdef0123456789abcdef",
      "created_at": "2026-10-01T11:02:14Z"
    }
  ],
  "has_more": false,
  "summary": {
    "requested": 2,
    "delivered": 2
  }
}

The images are data.items[].url of one photoshoot:<id> (or their art: files); images from two shoots are refused with image_not_from_shoot. Each polished file is saved on the shoot next to the image it corrects.

Send finished images of one of your shoots and get each back with its light and colour corrected. Send one image to polish it again; send several and any already polished is skipped and not charged.

Built for

  • Even light and colour across a shoot before you publish it
  • Touching up one image of a shoot

What you get

  • One image file per image polished.
  • A summary that counts the images polished and warns when some could not be; those are not charged.

Specs

Input formatsImages, 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. images takes only files from photoshoot.create, ghost_photoshoot.create, mannequin_photoshoot.create.
Input countimages: 1 to 400
Output formatFiles: each one line with its url and its media_type, in the job's result.
Outputs per jobAt most one file per image you send.

Errors

Good to know

  • images holds at least 1 items.
  • images holds at most 400 items.

Pricing: Estimate a request before you run it, or see the price of each option.

For agents and code generation

Schema changes follow Versioning.