Upscale an image
curl --request POST \
--url https://api.bitstudio.ai/v1/images/{id}/upscale \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_resolution": "4k"
}
'import requests
url = "https://api.bitstudio.ai/v1/images/{id}/upscale"
payload = { "target_resolution": "4k" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({target_resolution: '4k'})
};
fetch('https://api.bitstudio.ai/v1/images/{id}/upscale', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bitstudio.ai/v1/images/{id}/upscale",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_resolution' => '4k'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bitstudio.ai/v1/images/{id}/upscale"
payload := strings.NewReader("{\n \"target_resolution\": \"4k\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bitstudio.ai/v1/images/{id}/upscale")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_resolution\": \"4k\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/images/{id}/upscale")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_resolution\": \"4k\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending",
"task": "upscale",
"created_at": "2026-09-15T12:00:00Z",
"result": null,
"error": null,
"credits_used": 2
}
]
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"cta": true,
"next_action": "<string>"
}Image tools
Upscale an image
Upscale an image to a 4K target with SeedVR.
POST
/
v1
/
images
/
{id}
/
upscale
Upscale an image
curl --request POST \
--url https://api.bitstudio.ai/v1/images/{id}/upscale \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_resolution": "4k"
}
'import requests
url = "https://api.bitstudio.ai/v1/images/{id}/upscale"
payload = { "target_resolution": "4k" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({target_resolution: '4k'})
};
fetch('https://api.bitstudio.ai/v1/images/{id}/upscale', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bitstudio.ai/v1/images/{id}/upscale",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_resolution' => '4k'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bitstudio.ai/v1/images/{id}/upscale"
payload := strings.NewReader("{\n \"target_resolution\": \"4k\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bitstudio.ai/v1/images/{id}/upscale")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_resolution\": \"4k\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/images/{id}/upscale")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_resolution\": \"4k\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending",
"task": "upscale",
"created_at": "2026-09-15T12:00:00Z",
"result": null,
"error": null,
"credits_used": 2
}
]
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"cta": true,
"next_action": "<string>"
}Use a completed image as the source. This endpoint uses SeedVR with a 4K (2160p) target. Send an empty JSON object to use the defaults:
Read
{}
result.width and result.height for the actual output dimensions. Check fine product details in the result before publishing.
A successful request returns HTTP 202 with a jobs array. Save each id, then get the job until it finishes. Read the completed media from result.url and its reusable ID from result.id. Use an Idempotency-Key when submitting work that may be retried.Authorizations
Create an API key in Studio → account menu → API Keys. Keep it on your server.
Headers
Use a unique key for each intended creation. Retry the same method, path and JSON with the same key to replay its response for 24 hours after completion. Conflicting requests and unfinished or uncertain outcomes return 409. An uncertain receipt is never automatically rerun.
Required string length:
1 - 128Pattern:
^[!-~]+$Path Parameters
Source resource ID.
Body
application/json
Output target. Defaults to 4K (2160p) using SeedVR. Read result.width and result.height for the actual dimensions.
Available options:
4k Response
Accepted; poll each job.
Minimum array length:
1Show child attributes
Show child attributes