Quickstart
Upscale your first image in five minutes: create a key, submit a job, wait for it to finish, download the result.
1. Create an API key
Create a key from Dashboard → API keys. The full key is shown once, at creation. Export it as an environment variable and never commit it to source control.
export UPSCALR_API_KEY="usk_..."2. Submit an image
Post the file as multipart form data. The response arrives immediately with a queued job while the upscale runs in the background.
curl -X POST https://upscalr.app/api/v1/upscale \
-H "Authorization: Bearer $UPSCALR_API_KEY" \
-F image=@photo.png \
-F target=4kResponse · 202 Accepted
{
"id": "cmrw0iqm8000bdcs3um6ii7fa",
"object": "job",
"status": "queued",
"target": "4k",
"filename": "photo.png",
"credits": 3,
"created_at": "2026-07-25T09:30:00Z"
}3. Wait for it to finish
Fetch the job every second or two until status becomes succeeded or failed. Most jobs finish in a few seconds; production integrations should prefer webhooks over polling.
curl https://upscalr.app/api/v1/jobs/cmrw0iqm8000bdcs3um6ii7fa \
-H "Authorization: Bearer $UPSCALR_API_KEY"4. Download the result
The result endpoint redirects to a signed URL valid for five minutes. Follow the redirect and save the bytes.
curl -L https://upscalr.app/api/v1/jobs/cmrw0iqm8000bdcs3um6ii7fa/result \
-H "Authorization: Bearer $UPSCALR_API_KEY" \
-o upscaled.pngNext steps
- Add an
Idempotency-Keyheader so retries never charge twice. See Upscale an image. - Replace the polling loop with webhooks.
- Handle failures per the errors reference and respect the API limits.