AI image upscaler API: more resolution, no invented detail.
An AI image upscaler API increases an image’s resolution over HTTP, reconstructing edges and texture with a model rather than interpolating between the pixels that are already there.
This one runs a crisp upscaler: it sharpens what is genuinely in the frame and does not hallucinate detail that was never photographed. One POST, one hosted URL back, and your agent can call it the moment a draft is approved.
Resizing and upscaling are not the same operation
A resize has nothing new to work with. It looks at the pixels it has and guesses what sits between them, which is why an enlarged image goes soft exactly where you were hoping it would stay sharp — the edge of a logo, the serifs on a word, the weave of a fabric.
A super-resolution model has been trained on what those things look like at full size, so it can put the edge back rather than smear it. The trade is that it is a model call, not an arithmetic operation: it takes seconds and costs credits, so you run it once at the end of a pipeline rather than on every draft.
Plain resize
Free, instant, and blurrier the further you push it.
Super-resolution
15 credits, a few seconds, and detail that survives a close look.
Crisp, not creative
Upscalers split into two camps, and picking the wrong one is the most common mistake in this category. Creative upscalers add detail — they infer plausible skin texture, fabric weave and foliage that was never in the source, often guided by a prompt. They look spectacular on a portrait and they are actively dangerous on anything that has to remain a truthful picture of a real object.
This endpoint is the other camp. It reconstructs what is genuinely there and stops. A product photo comes back sharper, not subtly different from the product you are shipping — which matters when the image is doing the work of a description in a marketplace listing.
Creative upscaling
Invents plausible detail
Best for artwork, concept images and portraits where “more striking” beats “more accurate”. Not what this endpoint does.
Crisp upscaling · this endpoint
Sharpens what exists
Best for product photography, documentation figures, screenshots and anything going to print where the image must stay faithful to the original.
How much bigger, exactly
Straight answer: the model decides, and there is no scale dial on this endpoint today. Most upscaling APIs let you ask for 2x or 4x. This one runs a single crisp model whose enlargement is fixed, so the honest instruction is to read the dimensions off the returned file rather than assume a multiplier.
A scaleFactor field is accepted and comes back on the response, but it records what you asked for rather than changing what you get. We would rather say that plainly here than have you discover it by measuring the output.
One thing that will bite you: transparency
This model does not support transparent images. Send it a cut-out PNG and the transparent region comes back white, which quietly destroys the alpha channel you paid 8 credits to create. Upscale first and remove the background afterwards — never the other way round. Recraft, whose model runs here, documents this behaviour directly.
If you need an exact pixel size
Upscale first, then resize down to your target. Downscaling a reconstructed image looks clean in a way upscaling never does, so going past your target and coming back is the reliable way to hit a fixed layout slot.
Input limits
Recraft publishes these caps for the model: no more than 10 MB, no more than 16 megapixels, a longest side of at most 4096 pixels and a shortest side of at least 32. Anything outside that is rejected upstream rather than silently mangled. Checked September 2026 — these are the model vendor’s numbers and can move.
One required field
The whole surface is image. Sending nothing else is the correct call, which is exactly what makes it safe for an agent to fire mid-task.
curl -X POST "https://api.imagemcpserver.com/v1/upscale" \
-H "Authorization: Bearer $IMAGEMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "image": "https://cdn.example.com/draft.png" }'And what comes back
Note scaleFactor in the response. The request above never set it, so it shows the "4x" default — it is a record of intent, not a description of the output. The field to trust is imageUrl.
{
"success": true,
"deductedCredits": 15,
"userCredits": 2424,
"result": {
"imageUrl": "https://cdn.imagemcpserver.com/upscale/upscale_5142312.png",
"action": "upscale",
"model": "fal-ai/recraft/upscale/crisp",
"scaleFactor": "4x",
"hasInputImage": true,
"seed": 118427,
"latency": "6.12s"
}
}{
"name": "multicall",
"arguments": {
"requests": [
{ "tool": "upscale_image", "args": { "image": "…/a.png" } },
{ "tool": "upscale_image", "args": { "image": "…/b.png" } },
{ "tool": "upscale_image", "args": { "image": "…/c.png" } }
]
}
}A batch through multicall is dispatched concurrently rather than one call after another, and billed as a single deduction. Both routes write one entry per image into your request log with the exact credit cost, so a job that ran overnight is still auditable in the morning. How credits are counted.
If a call fails, it answers 500 with refundedCredits and the 15 credits are returned automatically.
Python and Node
One POST with a bearer token — no SDK to install. The x-api-key header works as an alternative to Authorization.
import os, requests
r = requests.post(
"https://api.imagemcpserver.com/v1/upscale",
headers={"Authorization": f"Bearer {os.environ['IMAGEMCP_API_KEY']}"},
json={"image": "https://cdn.example.com/draft.png"},
timeout=120,
)
data = r.json()
print(data["result"]["imageUrl"], data["deductedCredits"])const res = await fetch("https://api.imagemcpserver.com/v1/upscale", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.IMAGEMCP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ image: draftUrl }),
});
const { result, deductedCredits } = await res.json();
console.log(result.imageUrl, deductedCredits);Every field
The same body works for the REST endpoint and the upscale_image MCP tool.
| Field | Accepts | What it does |
|---|---|---|
image | string · required | The image to enlarge, as an https URL or a base64 data URI. imageBase64 is accepted as an alias. |
responseFormat | url · b64_json | Defaults to url. b64_json adds the raw base64 alongside the hosted URL. |
scaleFactor | string | Recorded against the request and echoed back as result.scaleFactor. It does not change the output — the enlargement is fixed by the model. The MCP tool names this argument scale. |
model | string | Accepted for forward compatibility but currently ignored: every upscale runs on the same crisp model, which the response names back to you. |
Order of operations
Everything creative is cheaper on a smaller image, so upscaling comes late — but not last. A cutout has to happen after the enlarge, because transparency does not survive this model.
- 1
Generate at the model’s native size
Iterate on prompts at the working resolution. Nobody needs a huge draft they are about to throw away.
- 2
Edit while it is small
Retouches and inpainting cost the same at any size, but review is faster on a light file.
- 3
Upscale the survivor
One 15-credit call, on the one asset that actually ships — and before any cutout, because the model returns transparency as white.
- 4
Cut out the background last
Matting the enlarged image is what keeps the alpha channel. Reverse these two steps and you get a white rectangle.
- 5
Compress on the way out
Then a 1-credit compress to WebP, so the big file does not cost your visitors four seconds.
What it costs
A flat 15 credits per image, whatever the input size. In money, that depends on the plan the credits came from:
Free
2 upscales
30 credits a month, no card required.
Starter · $20
≈ 30¢ each
1,000 credits — about 66 upscales a month.
Pro · $50
≈ 25¢ each
3,000 credits — about 200 upscales a month.
Enterprise · $100
≈ 19¢ each
8,000 credits — about 533 upscales a month.
Where this is and is not the right buy
Dedicated upscaling services priced per image undercut this substantially at volume, and if enlarging thousands of photos is the entire job, one of them is the better answer. This is worth paying for when the upscale is the last step of a pipeline that also generated, edited and cut out the image — one key, one bill, one integration, and an agent that can run the whole chain. See plans and credit packs.
Upscaling API questions
What is an AI image upscaler API?
A service that takes an image over HTTP and returns a higher-resolution version, using a model that reconstructs edges and texture rather than interpolating between the pixels that already exist. It replaces the manual enlarge-and-sharpen step someone would otherwise do in an editor, which is what makes it usable inside a build script or by an agent.
Is this different from just resizing?
Yes, and the difference is the whole point. A resize has nothing new to work with: it guesses what sits between the pixels it has, so a 4x resize is essentially a 4x blur. A super-resolution model has been trained on what edges, type and texture look like at full size, so it can put the edge back rather than smear it. The trade is that it is a model call — seconds and credits, not arithmetic — so you run it once at the end of a pipeline rather than on every draft.
Can I choose 2x, 4x or 8x?
Not today, and it is worth being straight about that because most upscaling APIs do offer a scale dial. This endpoint runs a single crisp upscaling model whose enlargement is fixed by the model rather than chosen per request. A scaleFactor field is accepted and echoed back in the response, but it records your intent — it does not change the output. If your pipeline needs an exact target size, resize the returned image to it after the call.
How much bigger does the image get?
The model decides, so read the dimensions off the returned file rather than assuming a multiplier. In practice one call takes a typical generation-sized image up to something comfortable for a full-bleed hero or a print placement. If you need a guaranteed pixel size, upscale first and then resize down to the exact target — downscaling is lossless-looking in a way upscaling never is.
Does it invent detail or restore it?
This is a crisp upscaler, which sits on the faithful end of the category. It sharpens and reconstructs what is in the frame rather than hallucinating new texture, freckles or fabric weave that was never photographed. Creative upscalers do the opposite and can look more impressive on a portrait, but they are the wrong tool for a product photo that has to stay an accurate picture of the product.
Does it restore faces?
There is no dedicated face-restoration pass. Faces get the same treatment as everything else in the frame. If face reconstruction is the actual job — old scanned photographs, low-resolution portraits — a specialist face-restoration model will beat this.
Should I upscale before or after removing the background?
Before — and this one catches people out. The upscaling model does not support transparency: hand it a cut-out PNG and the transparent area comes back white, destroying the alpha channel you just paid for. So upscale the photo first, then remove the background from the enlarged result. The cutout is the last step, not the middle one.
Does it preserve transparency?
No. Recraft, whose model this runs on, documents that upscaling does not support transparent images and that a transparent background comes back white. If you need a large transparent asset, upscale the flat image first and cut it out afterwards.
How much does an upscale cost?
A flat 15 credits, which works out between about 30 cents and 19 cents per image depending on your plan. Upscaling runs on our own provider account, so connecting your own OpenRouter key does not change the price the way it does for generation and editing.
Can I upscale a whole folder at once?
Yes. Pass the calls as a batch through multicall and they are dispatched in parallel, billed as one deduction. That is the usual shape for a nightly job that promotes the day’s approved drafts to full resolution.
What happens if the upscale fails?
The call answers 500 with refundedCredits in the body and the 15 credits go back automatically, so a retry loop against an image the model chokes on cannot quietly drain a balance.