curl --request POST \
--url https://api.bitstudio.ai/assets \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01"
}
'import requests
url = "https://api.bitstudio.ai/assets"
payload = {
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01"
}
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({type: 'outfit', alias: 'Blue striped shirt', sku: 'SHIRT-BLUE-01'})
};
fetch('https://api.bitstudio.ai/assets', 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/assets",
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([
'type' => 'outfit',
'alias' => 'Blue striped shirt',
'sku' => 'SHIRT-BLUE-01'
]),
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/assets"
payload := strings.NewReader("{\n \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\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/assets")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/assets")
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 \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\n}"
response = http.request(request)
puts response.read_body{
"id": "22222222-2222-4222-8222-222222222222",
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01",
"display_image": "https://media.bitstudio.ai/public/homepage/2026-09/bitstudio-shirt-reference-front-v1-77caf2ea41d661e4.webp",
"public": false
}{
"error": "<string>",
"code": "<string>",
"message": "<string>",
"cta": true,
"next_action": "<string>",
"current_plan": "<string>",
"user_message": "<string>",
"extra_context": "<string>"
}Create a reusable asset
Create the asset record, then upload or link reference images. A display_image URL alone does not supply usable generation references.
curl --request POST \
--url https://api.bitstudio.ai/assets \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01"
}
'import requests
url = "https://api.bitstudio.ai/assets"
payload = {
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01"
}
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({type: 'outfit', alias: 'Blue striped shirt', sku: 'SHIRT-BLUE-01'})
};
fetch('https://api.bitstudio.ai/assets', 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/assets",
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([
'type' => 'outfit',
'alias' => 'Blue striped shirt',
'sku' => 'SHIRT-BLUE-01'
]),
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/assets"
payload := strings.NewReader("{\n \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\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/assets")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitstudio.ai/assets")
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 \"type\": \"outfit\",\n \"alias\": \"Blue striped shirt\",\n \"sku\": \"SHIRT-BLUE-01\"\n}"
response = http.request(request)
puts response.read_body{
"id": "22222222-2222-4222-8222-222222222222",
"type": "outfit",
"alias": "Blue striped shirt",
"sku": "SHIRT-BLUE-01",
"display_image": "https://media.bitstudio.ai/public/homepage/2026-09/bitstudio-shirt-reference-front-v1-77caf2ea41d661e4.webp",
"public": false
}{
"error": "<string>",
"code": "<string>",
"message": "<string>",
"cta": true,
"next_action": "<string>",
"current_plan": "<string>",
"user_message": "<string>",
"extra_context": "<string>"
}Authorizations
Create an API key in Studio → account menu → API Keys. Keep it on your server.
Body
Use model for an avatar, outfit for a product, or preset for a reusable visual setup.
model, outfit, preset, pose, set, style, shoot Human-readable name.
50Product identifier for wardrobe items.
For presets: human_studio, human_location, ghost_mannequin, flat_lay, or product_packshot.
Description or reusable prompt.
Optional descriptive text.
Thumbnail URL only. Also upload or link reference images before generating.
Existing tag IDs.
Resource ID.
Response
Create the asset record, then upload or link reference images. A display_image URL alone does not supply usable generation references.
Resource ID.
model (avatar), outfit, preset, pose, set, style, or shoot.
Display name.
Your product identifier.
Category within the asset type.
Description used to guide generation.
Thumbnail URL. A thumbnail alone is not a generation reference.
Whether the asset belongs to the shared public library.