curl --request POST \
--url https://www.rainbrand.com/api/v1/brands \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"sources": [
{
"kind": "website",
"url": "<string>"
}
],
"instructions": "<string>",
"workspaceId": "<string>",
"allowDuplicate": true
}
'import requests
url = "https://www.rainbrand.com/api/v1/brands"
payload = {
"sources": [
{
"kind": "website",
"url": "<string>"
}
],
"instructions": "<string>",
"workspaceId": "<string>",
"allowDuplicate": 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({
sources: [{kind: 'website', url: '<string>'}],
instructions: '<string>',
workspaceId: '<string>',
allowDuplicate: true
})
};
fetch('https://www.rainbrand.com/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.rainbrand.com/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([
'sources' => [
[
'kind' => 'website',
'url' => '<string>'
]
],
'instructions' => '<string>',
'workspaceId' => '<string>',
'allowDuplicate' => 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.rainbrand.com/api/v1/brands"
payload := strings.NewReader("{\n \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": 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.rainbrand.com/api/v1/brands")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rainbrand.com/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 \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "analyzing"
}
}{
"error": {
"code": "INVALID_URL",
"status": 400,
"message": "Invalid URL",
"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 create a brand",
"data": {
"action_url": "<string>",
"credits_required": 123,
"balance": 123,
"pricing_version": 0
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "WORKSPACE_NOT_FOUND",
"status": 404,
"message": "Workspace not found or not accessible",
"data": "<unknown>"
}
}{
"error": {
"code": "IDEMPOTENCY_CONFLICT",
"status": 409,
"message": "Idempotency-Key was already used with a different request",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"status": 500,
"message": "Failed to start brand creation",
"data": "<unknown>"
}
}{
"error": {
"code": "SCRAPE_FAILED",
"status": 503,
"message": "Couldn't reach that URL. Please try again.",
"data": "<unknown>"
}
}Create a brand
Create a brand and its Brand Skill from your sources. See Create a brand to choose sources, start creation, and handle retries or an existing brand.
curl --request POST \
--url https://www.rainbrand.com/api/v1/brands \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"sources": [
{
"kind": "website",
"url": "<string>"
}
],
"instructions": "<string>",
"workspaceId": "<string>",
"allowDuplicate": true
}
'import requests
url = "https://www.rainbrand.com/api/v1/brands"
payload = {
"sources": [
{
"kind": "website",
"url": "<string>"
}
],
"instructions": "<string>",
"workspaceId": "<string>",
"allowDuplicate": 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({
sources: [{kind: 'website', url: '<string>'}],
instructions: '<string>',
workspaceId: '<string>',
allowDuplicate: true
})
};
fetch('https://www.rainbrand.com/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.rainbrand.com/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([
'sources' => [
[
'kind' => 'website',
'url' => '<string>'
]
],
'instructions' => '<string>',
'workspaceId' => '<string>',
'allowDuplicate' => 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.rainbrand.com/api/v1/brands"
payload := strings.NewReader("{\n \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": 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.rainbrand.com/api/v1/brands")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rainbrand.com/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 \"sources\": [\n {\n \"kind\": \"website\",\n \"url\": \"<string>\"\n }\n ],\n \"instructions\": \"<string>\",\n \"workspaceId\": \"<string>\",\n \"allowDuplicate\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "analyzing"
}
}{
"error": {
"code": "INVALID_URL",
"status": 400,
"message": "Invalid URL",
"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 create a brand",
"data": {
"action_url": "<string>",
"credits_required": 123,
"balance": 123,
"pricing_version": 0
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "WORKSPACE_NOT_FOUND",
"status": 404,
"message": "Workspace not found or not accessible",
"data": "<unknown>"
}
}{
"error": {
"code": "IDEMPOTENCY_CONFLICT",
"status": 409,
"message": "Idempotency-Key was already used with a different request",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"status": 500,
"message": "Failed to start brand creation",
"data": "<unknown>"
}
}{
"error": {
"code": "SCRAPE_FAILED",
"status": 503,
"message": "Couldn't reach that URL. Please try again.",
"data": "<unknown>"
}
}Authorizations
Rainbrand API key, for example x-api-key: bloom_sk_....
Headers
Optional retry key, 1–255 characters after trimming. Reuse with the same request to recover the original Brand ID. Use a new key for a new creation.
1 - 255Body
Sources to combine into a Brand Skill. At most one website and one Instagram account can be included. Files may be public HTTPS URLs or completed temporary uploads, up to 100 MiB each and 256 MiB combined.
1 - 30 elements- Website
- Instagram
- File
- Temporary upload
Show child attributes
Show child attributes
Optional instructions passed to the Brand Agent for this run. The Agent applies them using its existing judgment.
4000Team workspace ID. The brand is created in that workspace and billed to its customer. Omit to create in the caller's personal workspace.
1Allow creation when a website or Instagram source matches an existing brand in the selected workspace. Set to true only when the caller intentionally chooses to create another brand. Defaults to false.
Response
OK
Show child attributes
Show child attributes
Was this page helpful?