Get a job
curl --request GET \
--url https://api.bitstudio.ai/v1/jobs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bitstudio.ai/v1/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bitstudio.ai/v1/jobs/{id}', 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/jobs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bitstudio.ai/v1/jobs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bitstudio.ai/v1/jobs/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "11111111-1111-4111-8111-111111111111",
"status": "completed",
"task": "generate",
"created_at": "2026-09-15T12:00:00Z",
"result": {
"id": "11111111-1111-4111-8111-111111111111",
"image_id": "11111111-1111-4111-8111-111111111111",
"type": "image",
"url": "https://media.bitstudio.ai/example.jpg",
"width": 1024,
"height": 1536
},
"error": null,
"credits_used": 2
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"cta": true,
"next_action": "<string>"
}Results and integration
Check progress
Check processing status and retrieve a completed image or video.
GET
/
v1
/
jobs
/
{id}
Get a job
curl --request GET \
--url https://api.bitstudio.ai/v1/jobs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bitstudio.ai/v1/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bitstudio.ai/v1/jobs/{id}', 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/jobs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bitstudio.ai/v1/jobs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bitstudio.ai/v1/jobs/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "11111111-1111-4111-8111-111111111111",
"status": "completed",
"task": "generate",
"created_at": "2026-09-15T12:00:00Z",
"result": {
"id": "11111111-1111-4111-8111-111111111111",
"image_id": "11111111-1111-4111-8111-111111111111",
"type": "image",
"url": "https://media.bitstudio.ai/example.jpg",
"width": 1024,
"height": 1536
},
"error": null,
"credits_used": 2
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": "<string>",
"cta": true,
"next_action": "<string>"
}Poll this endpoint using an ID returned by a creation request. The pending states are
pending and generating; the terminal states are completed, failed, and policy_blocked.
On completion, result contains the media ID, type, URL, and dimensions. On failure, error contains a safe code and readable message. Keep the job ID when reporting an issue or resuming after a client timeout.
credits_used is the current charge for this output in display credits: 1.5 means 1.5 Studio credits. Use the value directly. A completed refund is reflected as 0.
Use and edit results →Authorizations
Create an API key in Studio → account menu → API Keys. Keep it on your server.
Path Parameters
Source resource ID.
Response
Success
Available options:
pending, generating, completed, failed, policy_blocked Processing task. This may be more specific than the submitted operation.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Credits currently charged for this output, in display credits: 1 means one Studio credit. Fractional amounts are preserved. A completed refund is reflected as 0 when polling. Creation and idempotency replay responses are snapshots; poll for the latest charge.
Required range:
x >= 0Example:
1.5