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

Production prep

Upscale an image to 4K

Enlarge an image to 4K (3840 px on its long edge) for print and zoom. An image that is already 4K comes back as it is. Delivered as one image file.

Endpoint: POST https://api.refabric.com/v1/tasks/image.upscaleTask: image.upscaleScope: tasks:runCategory: Production prep

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.upscale",
    headers=headers,
    json={
        "image": "art:6d9a01",
    },
).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 image to enlarge to 4K (3840 px on its long edge), as one string: a URL, a file from an earlier result (art:… or its url) or an upload (file:…). An image that is already 4K comes back as it is, not charged.

    pattern: ^(https://|art:|file:).+$

    Example: art:6d9a01

Output schema

  • array<object>optional

    One image file: the image at 4K, as a PNG. When the image was already 4K the file holds its own pixels, in its own format (media_type says which), and nothing is charged.

  • objectoptional

    Sent only when the image was already 4K: its warnings then say so, and that nothing was charged.

Required-fields example

{
  "image": "art:6d9a01"
}

Full example

{
  "image": "art:6d9a01"
}

Response example

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

Result example

{
  "job_id": "7a1c2e3f00004000800000000000001c",
  "files": [
    {
      "file": "art:6d9a02",
      "url": "https://files.example.com/image.upscale/1.png",
      "media_type": "image/png",
      "task": "image.upscale",
      "job_id": "7a1c2e3f00004000800000000000001c",
      "created_at": "2026-10-01T09:31:12Z"
    }
  ],
  "has_more": false
}

An image that is already 4K is not enlarged again: it comes back as one file holding its own pixels, with an already_4k warning in summary.

Send a design, a photo or any earlier result and get it back at 4K (3840 px on its long edge), ready for print, close zoom or a tech pack. An image that is already 4K is not enlarged again — it comes back as its own pixels, with a warning in `summary` that says so.

Built for

  • Print-ready files
  • Zooming into fabric and detail
  • Final images for a tech pack or a lookbook

What you get

  • One image file at 4K (3840 px on its long edge).
  • A summary with an already_4k warning when the image was already 4K; then nothing is 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.
Input countimage: one
Output formatFiles: each one line with its url and its media_type, in the job's result.
Outputs per jobOne file per job.

Errors

Good to know

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

    For agents and code generation

    Schema changes follow Versioning.