curl --request POST \
--url https://www.trybloom.ai/api/v1/images/generations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"variantCount": 3,
"referenceImageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://www.trybloom.ai/api/v1/images/generations"
payload = {
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"variantCount": 3,
"referenceImageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
imageSize: '2K',
variantCount: 3,
referenceImageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://www.trybloom.ai/api/v1/images/generations', 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://www.trybloom.ai/api/v1/images/generations",
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' => '<string>',
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'imageSize' => '2K',
'variantCount' => 3,
'referenceImageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-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://www.trybloom.ai/api/v1/images/generations"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://www.trybloom.ai/api/v1/images/generations")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"variantGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending"
}
}{
"error": {
"code": "SESSION_MISSING_BRAND_IMAGE",
"status": 400,
"message": "Brand session is not fully onboarded",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"status": 402,
"message": "Not enough credits to generate",
"data": {
"action_url": "<string>"
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "REFERENCE_IMAGE_NOT_FOUND",
"status": 404,
"message": "Reference image not found",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_READY",
"status": 409,
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_FOUND",
"status": 422,
"message": "Brand session not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}Generate an image
Start an image generation and return the image IDs immediately. Poll GET /images/{id} to check the status and retrieve the result. Optionally include referenceImageIds for style or content guidance.
curl --request POST \
--url https://www.trybloom.ai/api/v1/images/generations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"variantCount": 3,
"referenceImageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://www.trybloom.ai/api/v1/images/generations"
payload = {
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"variantCount": 3,
"referenceImageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
imageSize: '2K',
variantCount: 3,
referenceImageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://www.trybloom.ai/api/v1/images/generations', 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://www.trybloom.ai/api/v1/images/generations",
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' => '<string>',
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'imageSize' => '2K',
'variantCount' => 3,
'referenceImageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-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://www.trybloom.ai/api/v1/images/generations"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://www.trybloom.ai/api/v1/images/generations")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"variantCount\": 3,\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"variantGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending"
}
}{
"error": {
"code": "SESSION_MISSING_BRAND_IMAGE",
"status": 400,
"message": "Brand session is not fully onboarded",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"status": 402,
"message": "Not enough credits to generate",
"data": {
"action_url": "<string>"
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "REFERENCE_IMAGE_NOT_FOUND",
"status": 404,
"message": "Reference image not found",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_READY",
"status": 409,
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_FOUND",
"status": 422,
"message": "Brand session not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}Authorizations
Bloom API key, for example x-api-key: bloom_sk_....
Body
Description of the image to generate (1–2000 chars)
1 - 2000Brand ID (from GET /brands)
Aspect ratio. One of "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"
1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 "2K" (default, 1 credit) or "4K" (2 credits)
2K, 4K Model tier. "fast" is quickest, "standard" is balanced, and "pro" is the default and offers the highest quality.
fast, standard, pro Number of variant images to generate (1–5, default 1). Each variant costs the same number of credits.
1 <= x <= 5IDs of uploaded or generated images to use as style/content references (max 10)
10Response
OK
Show child attributes
Show child attributes
Was this page helpful?