curl --request POST \
--url https://api.bitstudio.ai/v1/images/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "An adult fashion model in a white studio",
"aspect_ratio": "3:4"
}
'import requests
url = "https://api.bitstudio.ai/v1/images/generate"
payload = {
"prompt": "An adult fashion model in a white studio",
"aspect_ratio": "3:4"
}
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({prompt: 'An adult fashion model in a white studio', aspect_ratio: '3:4'})
};
fetch('https://api.bitstudio.ai/v1/images/generate', 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/generate",
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([
'prompt' => 'An adult fashion model in a white studio',
'aspect_ratio' => '3:4'
]),
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/generate"
payload := strings.NewReader("{\n \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\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/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/images/generate")
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 \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending",
"task": "generate",
"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>"
}Generate an image
Create a fashion photo from a prompt and optional product references.
curl --request POST \
--url https://api.bitstudio.ai/v1/images/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "An adult fashion model in a white studio",
"aspect_ratio": "3:4"
}
'import requests
url = "https://api.bitstudio.ai/v1/images/generate"
payload = {
"prompt": "An adult fashion model in a white studio",
"aspect_ratio": "3:4"
}
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({prompt: 'An adult fashion model in a white studio', aspect_ratio: '3:4'})
};
fetch('https://api.bitstudio.ai/v1/images/generate', 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/generate",
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([
'prompt' => 'An adult fashion model in a white studio',
'aspect_ratio' => '3:4'
]),
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/generate"
payload := strings.NewReader("{\n \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\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/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/v1/images/generate")
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 \"prompt\": \"An adult fashion model in a white studio\",\n \"aspect_ratio\": \"3:4\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending",
"task": "generate",
"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>"
}prompt or model_text. Add product references with one of outfit_image_ids, outfit_asset_ids, or outfit_image_urls. Saved avatars, presets and poses go in asset_ids.
The default model is nano-banana-2, with resolution: "standard" and one output. Generate supports up to three garment references and up to eight outputs, subject to account limits.
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.
Start from a prompt
Use your products
Choose output settings
Run the quickstart
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.
1 - 128^[!-~]+$Body
- Option 1
- Option 2
- Option 3
- Option 4
Garment references; choose one outfit source array per request.
1 - 3 elementsResource ID.
Model for this operation. Account and plan limits apply.
Output quality; dimensions depend on the model and aspect ratio.
standard, high Number of outputs. Defaults to 1. Account limits still apply.
1 <= x <= 81
Optional seed. It does not guarantee identical results across models or changes.
Model-dependent output ratio. 3:4 is supported by nano-banana-2 and nano-banana-pro.
"3:4"
Avatar, preset, pose, set, or style asset IDs. Use at most one preset or set in total.
Resource ID.
Garment references; choose one outfit source array per request.
1 - 3 elementsGarment references; choose one outfit source array per request.
1 - 3 elementsResource ID.
Composition or extra preset directions.
Describe the avatar when not selecting one from the library.
How the selected garment should be worn.
Setting directions when needed.
Optional style directions.
Optional saved style asset ID.
Response
Accepted; poll each job.
1Show child attributes
Show child attributes