Upscale an image
Multiply an image's width and height by upscale_factor, with no design involved.
Sample request
curl -X POST \
-H "x-api-key: {YOUR-API-KEY}" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/product.jpg",
"upscale_factor": "2",
"callback_url": "https://webhook.mycompany.com/abyssale"
}' \
https://api.abyssale.com/images/upscale// No SDK method yet — plain fetch (Node 18+). Set ABYSSALE_API_KEY before running.
const res = await fetch('https://api.abyssale.com/images/upscale', {
method: 'POST',
headers: { 'x-api-key': process.env.ABYSSALE_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
image_url: 'https://example.com/product.jpg',
upscale_factor: '2',
callback_url: 'https://webhook.mycompany.com/abyssale',
}),
});
const body = await res.json();
if (res.status !== 202) console.error(res.status, body.id, body.message);
else console.log(body.job_id);# No SDK method yet — plain requests. Set ABYSSALE_API_KEY before running.
import os
import requests
r = requests.post(
"https://api.abyssale.com/images/upscale",
headers={"x-api-key": os.environ["ABYSSALE_API_KEY"]},
json={
"image_url": "https://example.com/product.jpg",
"upscale_factor": "2",
"callback_url": "https://webhook.mycompany.com/abyssale",
},
timeout=30,
)
r.raise_for_status()
print(r.json()["job_id"])Inputs
| Field | Type | Required | Description |
|---|---|---|---|
image_url | string (uri) | Yes | Public http(s) URL of the image, up to 2 048 characters: PNG, JPEG or WebP, up to 20 MB. Downloaded when the job runs. |
model | string | No | Model id, from GET /ai-models?operation=images_upscale. Omitted: the workspace's default. |
upscale_factor | string or number | No | How many times larger, as the model accepts it (upscale_factors.allowed, e.g. "2"). Omitted: the model's default. |
callback_url | string (uri) | No | http(s) URL that receives the ASSET_JOB_FINALIZED webhook when the job ends. |
A factor the model does not accept answers 400 unknown_enum_value before anything is queued, with the accepted values in errors[].expected. 1 keeps the dimensions and only enhances detail.
Image size
- At least 128 × 128 px. An image larger than 3 840 px on its longest side is scaled down to it first.
- Each model caps the result, in megapixels or in pixels per side: a 1 000 × 1 000 px image at
4gives 4 000 × 4 000 px, 16 MP.
The size is known only once the job has read the image, so a too-small image or a result over the cap is not refused up front: the job ends FAILED with invalid_input_asset and a message saying which limit was hit, without charging anything. Use a smaller factor, a smaller image, or a model with a higher cap.
Response
202, before anything is processed:
{ "job_id": "c41e07a8-4869-11f0-96f2-0a00d9eb8f78", "status": "PENDING" }Follow the job by polling or webhook.
Output
One image per job, a WebP: a completed job has exactly one entry in outputs. Here a 1 000 × 1 000 px image at 2, on the default topaz-precision:
{
"job_id": "c41e07a8-4869-11f0-96f2-0a00d9eb8f78",
"operation": "images_upscale",
"status": "COMPLETED",
"outputs": [
{ "type": "image", "url": "https://production-banners.s3.eu-west-1.amazonaws.com/tmp_ai/d3b07384-d113-4ec6-a3b5-2f7c6e1a9b10/c41e07a8-4869-11f0-96f2-0a00d9eb8f78.webp", "mime_type": "image/webp" }
],
"credits": { "generation_credits": 0, "ai_credits": 10 },
"error": null,
"created_at": "2026-09-21T14:16:40Z",
"finalized_at": "2026-09-21T14:17:05Z"
}Every field is described under Poll the job.
Credits and errors
Upscale is priced by the size of the result — width × height × upscale_factor², in megapixels, on most models; a flat price on bria-increase-resolution — so its price is known only once the job has read the image. Before queueing, only a non-empty AI balance is checked; the exact price is checked when the job runs, and a balance that does not cover it ends the job FAILED with insufficient_credits, charging nothing. See Credits → AI credits.
- An image that cannot be downloaded or read, is under 128 px, or gives a result over the model's cap ends the job
FAILEDwithinvalid_input_asset.
The other refusals and failures are shared by every action — see Errors.
Related
- Asset jobs — how jobs run, polling, models, limits
- Image element properties → Upscale — the same feature on an image layer inside a design
- API Reference: upscale
