Start a generation
curl --request POST \
--url https://www.trybloom.ai/api/v1/generations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"input": {}
}
'import requests
url = "https://www.trybloom.ai/api/v1/generations"
payload = {
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"input": {}
}
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({
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
model: '<string>',
input: {}
})
};
fetch('https://www.trybloom.ai/api/v1/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/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([
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'model' => '<string>',
'input' => [
]
]),
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/generations"
payload := strings.NewReader("{\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\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/generations")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/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 \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"generationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending"
}
}{
"error": {
"code": "MODEL_TYPE_MISMATCH",
"status": 400,
"message": "Model does not generate the requested type",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "MODEL_NOT_FOUND",
"status": 404,
"message": "Generation model not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}{
"error": {
"code": "CATALOG_UNAVAILABLE",
"status": 503,
"message": "Could not load generation models",
"data": "<unknown>"
}
}Generations
Start a generation
Generate an image, video, audio, or SVG with a selected model. Returns 202 with a generation ID; use GET /generations/{id} to check the status and retrieve the files. Include any brand guidance in the model’s input fields. Bloom does not apply the Brand Skill automatically.
POST
/
generations
Start a generation
curl --request POST \
--url https://www.trybloom.ai/api/v1/generations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"input": {}
}
'import requests
url = "https://www.trybloom.ai/api/v1/generations"
payload = {
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"input": {}
}
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({
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
model: '<string>',
input: {}
})
};
fetch('https://www.trybloom.ai/api/v1/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/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([
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'model' => '<string>',
'input' => [
]
]),
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/generations"
payload := strings.NewReader("{\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\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/generations")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/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 \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"model\": \"<string>\",\n \"input\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"generationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending"
}
}{
"error": {
"code": "MODEL_TYPE_MISMATCH",
"status": 400,
"message": "Model does not generate the requested type",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "MODEL_NOT_FOUND",
"status": 404,
"message": "Generation model not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}{
"error": {
"code": "CATALOG_UNAVAILABLE",
"status": 503,
"message": "Could not load generation models",
"data": "<unknown>"
}
}Authorizations
apiKeybearer
Bloom API key, for example x-api-key: bloom_sk_....
Body
application/json
ID of a brand you can access. Bloom uses it to check access and store the generated files under that brand.
Type of file to generate. Must match the selected model's type.
Available options:
image, video, audio, svg Exact model ID from GET /models.
Minimum string length:
1Inputs for the selected model. Must match the inputSchema returned by GET /models/{creator}/{model}.
Show child attributes
Show child attributes
Response
OK
Show child attributes
Show child attributes
Was this page helpful?