Get API

Topaz Image Upscale

Enhance and upscale images up to 4× with crisp, natural detail.

topaz/topaz-image-upscale/image-upscale

Capabilities

Best for

  • Concept art and mood boards
  • Product and marketing visuals
  • Batch generation at scale

Not for

  • Exact text rendering at small sizes
  • Precise brand-logo reproduction
  • Vector output

Authentication

api key header

The Pika API uses API keys to authenticate requests. Send your key in the X-API-Key header. Your API key is a secret. Don't expose it in browsers or other client-side code. Instead, call the API from your server. The signed-in playground uses a portal session and never sends your API key.

header
X-API-Key: YOUR_API_KEY

Endpoint

asynchronous · poll for the result

POSThttps://api.dev.pika.art/v1/media/topaz/topaz-image-upscale/image-upscalegenerate endpoint
GEThttps://api.dev.pika.art/v1/media/jobs/{request_id}poll until completed
GEThttps://api.dev.pika.art/v1/media/jobs/{request_id}/contentget the result URL

Reference Uploads

media inputs

Media inputs accept any public URL. To use a local file, POST its content_type and size_bytes to /v1/media/uploads, PUT the file to the returned upload_url, then pass the url.

upload
# 1. Request a presigned upload URL. Send the file's content
# type and its exact size in bytes.
curl -X POST https://api.dev.pika.art/v1/media/uploads \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_type": "image/png", "size_bytes": 12345}'
# The response returns two URLs:
# upload_url: a temporary URL to upload the file to. Expires in 5 minutes.
# url: the permanent Pika URL. Pass it to the model as the input.
# {
# "upload_url": "https://upload.r2.pika.art/...?X-Amz-Signature=...",
# "url": "https://cdn.pika.art/v2/media/uploads/org_abc/9f8e7d.png"
# }
# 2. Upload the file to upload_url, then pass url to the model.
curl -X PUT "<upload_url>" \
-H "Content-Type: image/png" \
--data-binary @input.png

Generate

POST /v1/media/topaz/topaz-image-upscale/image-upscale

Request

curl -X POST https://api.dev.pika.art/v1/media/topaz/topaz-image-upscale/image-upscale \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://cdn.pika.art/v2/files/agent/d45537b3-7c9d-4d7e-99c4-af52f07b1599/topaz-rabbits-input.png",
"upscale_factor": "x2",
"model": "standard-v2"
}'

Response

{
"id": "media_8f3a2c91-5b7d-4e0a-9c26-31d4f2a8e6b0",
"status": "queued"
}

Request body

image_urlstringrequired
URL of the image to upscale.
upscale_factorenum
How much to enlarge the image: 2x, 3x, or 4x the original dimensions.
modelenum
Topaz enhancement model. Standard family (true-to-input upscaling): `standard-v2` (default, general purpose), `low-resolution-v2` (small/degraded sources), `cgi` (art and CGI), `high-fidelity-v2` (detail preservation), `text-refine` (text and shapes). Generative family (adds synthesized detail, priced higher): `redefine` (prompt-driven), `standard-max`, `wonder`, `wonder-3`.
output_formatenum
Output image format; omitted keeps the provider default (jpeg).
crop_to_fillboolean
When the output aspect ratio differs, crop to fill the output dimensions instead of the default letterboxing.
subject_detectionenum
Where enhancements are applied; omitted lets Topaz auto-configure.
face_enhancementboolean
Apply Topaz's face recovery model. When true, `face_enhancement_strength` and `face_enhancement_creativity` are required. Omitted lets Topaz auto-configure.
face_enhancement_strengthnumber0 – 1
Face recovery strength (requires face_enhancement=true).
face_enhancement_creativitynumber0 – 1
Realistic (0) to creative (1) face recovery (requires face_enhancement=true).
sharpennumber0 – 1
Sharpening strength.
denoisenumber0 – 1
Denoise strength.
fix_compressionnumber0 – 1
Compression-artifact removal strength (standard models only).
strengthnumber0.01 – 1
Overall model strength (standard models only); too high can look unrealistic.
promptstring
Describe the desired result for generative models (not wonder-3); descriptive statements work better than directives. Cannot be combined with autoprompt=true.
autopromptboolean
Auto-generate the guidance prompt (generative models except wonder-3; replaces `prompt`).
creativityinteger1 – 9
Generative creativity 1-9 (generative models only); lower stays truest to the input.
textureinteger1 – 5
Generative texture detail 1-5 (generative models only); 1 at low creativity, 3 at higher.
detailboolean
Add post-render detail (generative models only). When true, `detail_strength` is required.
detail_strengthnumber0 – 10
Post-render detail strength (requires detail=true).
enhancement_strengthenum
Enhancement level (wonder-3 only); omitted lets Topaz auto-configure.

Accepted values

upscale_factor
model
output_format
subject_detection
enhancement_strength

Input modes

Image urlimage_url

Use a public URL directly, or POST { content_type, size_bytes } to /v1/media/uploads, PUT the image to the returned upload_url, then pass the url.

Returns

Returns a job object with status , not the final output. Store the id from the response and poll the job until it completes.

Poll status

GET /v1/media/jobs/{request_id}

Request

curl https://api.dev.pika.art/v1/media/jobs/{request_id} \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"id": "media_8f3a2c91-5b7d-4e0a-9c26-31d4f2a8e6b0",
"status": "running"
}

Poll the job by id until it reaches a terminal state: completed or failed.

The job object

idstring
Unique identifier for the job.
statusenum
The status of the job.One of:
object
The generation output. Present once the job completes.
errorstring
If the job failed, the reason for the failure.

Get result

GET /v1/media/jobs/{request_id}/content

Request

curl https://api.dev.pika.art/v1/media/jobs/{request_id}/content \
-H "X-API-Key: YOUR_API_KEY"

Response

{
"url": "https://api.dev.pika.art/v1/files/img_8f3a2c91.png"
}

Once the job completes, fetch a download URL for the generated media.

Returns

urlstring
Download URL for the generated file.

Errors

shared across calls

Errors use conventional HTTP status codes with a JSON body of the shape {"message": "..."}. The one exception is validation: a request body that fails validation returns 422 with a plain-text body.

StatusWhenBody
401 UnauthorizedThe API key is missing or invalid.{"message":"Invalid API key"}
403 ForbiddenThe key is not active, or the org balance cannot cover the request.{"message":"Insufficient org balance"}
404 Not FoundNo job with that id exists in your org.{"message":"media job not found"}
409 ConflictThe result was requested before the job completed, or an Idempotency-Key header was reused with a different body.{"message":"media job is not ready"}
422 Unprocessable EntityThe request body failed validation: an invalid enum value, a missing required field, a wrong type, or malformed JSON. Returned as plain text, not JSON. A schema-valid parameter combination that cannot be priced returns the same status with a JSON message.Unprocessable entity
429 Too Many RequestsOrg limit reached: requests per minute or day, or concurrent jobs. Check the Retry-After header.{"message":"rate limit exceeded: rpm"}
503 Service UnavailableThe model rail or a backend dependency is temporarily unavailable. Retry with backoff.{"message":"media dispatch unavailable"}

Pricing

only successful runs are charged

TierPrice
standard v2$0.13 / image
low resolution v2$0.13 / image
cgi$0.13 / image
high fidelity v2$0.13 / image
text refine$0.13 / image
wonder 3$0.38 / image
redefine$0.76 / image
standard max$0.76 / image
wonder$0.76 / image

Per-model pricing

Transparent, usage-based rates for every Topaz Labs model.

Topaz Video Upscale

Video

Video Upscale

proteus$0.076 / sec
starlight fast 2$0.189 / sec
starlight mini$0.378 / sec
starlight hq$0.378 / sec
starlight sharp$0.378 / sec

Topaz Image Upscale

Image

Image UpscaleCurrent

standard v2$0.126 / image
low resolution v2$0.126 / image
cgi$0.126 / image
high fidelity v2$0.126 / image
text refine$0.126 / image
wonder 3$0.378 / image
redefine$0.756 / image
standard max$0.756 / image
wonder$0.756 / image