Submit a Team asset batch
curl --request POST \
--url https://api.gizmo.antimlabs.com/v1/batches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"items": [
{
"custom_id": "mug-001",
"input": {
"prompt": "A white ceramic mug, 9 cm tall"
}
},
{
"custom_id": "bowl-002",
"input": {
"prompt": "A white ceramic bowl, 16 cm in diameter"
}
}
]
}
'import requests
url = "https://api.gizmo.antimlabs.com/v1/batches"
payload = { "items": [
{
"custom_id": "mug-001",
"input": { "prompt": "A white ceramic mug, 9 cm tall" }
},
{
"custom_id": "bowl-002",
"input": { "prompt": "A white ceramic bowl, 16 cm in diameter" }
}
] }
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
items: [
{custom_id: 'mug-001', input: {prompt: 'A white ceramic mug, 9 cm tall'}},
{
custom_id: 'bowl-002',
input: {prompt: 'A white ceramic bowl, 16 cm in diameter'}
}
]
})
};
fetch('https://api.gizmo.antimlabs.com/v1/batches', 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.gizmo.antimlabs.com/v1/batches",
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([
'items' => [
[
'custom_id' => 'mug-001',
'input' => [
'prompt' => 'A white ceramic mug, 9 cm tall'
]
],
[
'custom_id' => 'bowl-002',
'input' => [
'prompt' => 'A white ceramic bowl, 16 cm in diameter'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-key>"
],
]);
$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.gizmo.antimlabs.com/v1/batches"
payload := strings.NewReader("{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
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.gizmo.antimlabs.com/v1/batches")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gizmo.antimlabs.com/v1/batches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"batch_id": "BATCH_ID"
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}Batches
Submit a Team asset batch
Team keys only. Submit 1–1,000 asset inputs with unique custom_id values and a required Idempotency-Key. Returns 202 with a batch_id; acceptance does not mean generation has finished. Items queue automatically within the Team processing limit. Save the batch ID, poll its progress and paginate its items for results. Reuse the same key and body after a lost response to avoid duplicate work. Batch workflow.
POST
/
v1
/
batches
Submit a Team asset batch
curl --request POST \
--url https://api.gizmo.antimlabs.com/v1/batches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"items": [
{
"custom_id": "mug-001",
"input": {
"prompt": "A white ceramic mug, 9 cm tall"
}
},
{
"custom_id": "bowl-002",
"input": {
"prompt": "A white ceramic bowl, 16 cm in diameter"
}
}
]
}
'import requests
url = "https://api.gizmo.antimlabs.com/v1/batches"
payload = { "items": [
{
"custom_id": "mug-001",
"input": { "prompt": "A white ceramic mug, 9 cm tall" }
},
{
"custom_id": "bowl-002",
"input": { "prompt": "A white ceramic bowl, 16 cm in diameter" }
}
] }
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
items: [
{custom_id: 'mug-001', input: {prompt: 'A white ceramic mug, 9 cm tall'}},
{
custom_id: 'bowl-002',
input: {prompt: 'A white ceramic bowl, 16 cm in diameter'}
}
]
})
};
fetch('https://api.gizmo.antimlabs.com/v1/batches', 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.gizmo.antimlabs.com/v1/batches",
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([
'items' => [
[
'custom_id' => 'mug-001',
'input' => [
'prompt' => 'A white ceramic mug, 9 cm tall'
]
],
[
'custom_id' => 'bowl-002',
'input' => [
'prompt' => 'A white ceramic bowl, 16 cm in diameter'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-key>"
],
]);
$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.gizmo.antimlabs.com/v1/batches"
payload := strings.NewReader("{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
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.gizmo.antimlabs.com/v1/batches")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gizmo.antimlabs.com/v1/batches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"custom_id\": \"mug-001\",\n \"input\": {\n \"prompt\": \"A white ceramic mug, 9 cm tall\"\n }\n },\n {\n \"custom_id\": \"bowl-002\",\n \"input\": {\n \"prompt\": \"A white ceramic bowl, 16 cm in diameter\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"batch_id": "BATCH_ID"
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}{
"detail": {
"error": {
"code": "asset_not_found",
"message": "Asset ast_abc123 not found",
"status": 404,
"fields": [
{}
]
}
}
}Authorizations
Select Personal or your Team in Gizmo, then create a key in API Access. The key selects your library and billing account.
Headers
Required string length:
1 - 128Pattern:
^[A-Za-z0-9._:-]+$Body
application/json
Items queue automatically within the Team processing limit, shared with its other batches and individual generations.