curl --request POST \
--url https://www.trybloom.ai/api/v1/brands \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "<string>",
"workspaceId": "<string>",
"logoUrl": "<string>",
"collectImages": true
}
'import requests
url = "https://www.trybloom.ai/api/v1/brands"
payload = {
"url": "<string>",
"workspaceId": "<string>",
"logoUrl": "<string>",
"collectImages": True
}
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({
url: '<string>',
workspaceId: '<string>',
logoUrl: '<string>',
collectImages: true
})
};
fetch('https://www.trybloom.ai/api/v1/brands', 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/brands",
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([
'url' => '<string>',
'workspaceId' => '<string>',
'logoUrl' => '<string>',
'collectImages' => true
]),
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/brands"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\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/brands")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/brands")
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 \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<unknown>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid URL",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Plan upgrade required",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Workspace not found or not accessible",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Rate limit exceeded",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Failed to start brand creation",
"data": "<unknown>"
}Create a brand
Queue brand onboarding for a website or Instagram profile URL. Returns 202 with an analyzing brand after the durable workflow is accepted. Call GET /brands/?wait=true and generate only when status is “ready”. collectImages=false skips background image-library collection, not crawling or visual DNA. Defaults to the caller’s personal workspace; pass workspaceId to onboard into a team workspace.
curl --request POST \
--url https://www.trybloom.ai/api/v1/brands \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "<string>",
"workspaceId": "<string>",
"logoUrl": "<string>",
"collectImages": true
}
'import requests
url = "https://www.trybloom.ai/api/v1/brands"
payload = {
"url": "<string>",
"workspaceId": "<string>",
"logoUrl": "<string>",
"collectImages": True
}
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({
url: '<string>',
workspaceId: '<string>',
logoUrl: '<string>',
collectImages: true
})
};
fetch('https://www.trybloom.ai/api/v1/brands', 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/brands",
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([
'url' => '<string>',
'workspaceId' => '<string>',
'logoUrl' => '<string>',
'collectImages' => true
]),
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/brands"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\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/brands")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/brands")
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 \"url\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"collectImages\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<unknown>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid URL",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Plan upgrade required",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Workspace not found or not accessible",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Rate limit exceeded",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Failed to start brand creation",
"data": "<unknown>"
}Authorizations
Bloom API key, for example x-api-key: bloom_sk_....
Body
Website or Instagram profile URL to analyze (e.g. https://acme.com or https://instagram.com/acme)
Team workspace ID. The brand is created in that workspace and billed to its customer. Omit to create in the caller's personal workspace.
1Explicit logo URL. If provided, skips automatic logo extraction.
Whether to collect background images from the website/Instagram into the brand's image library. This does not skip brand initialization, crawling, or visual DNA analysis.
Response
OK
Show child attributes
Show child attributes
Was this page helpful?