curl --request POST \
--url https://api.example.com/api/v1/brands/from-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"name": "<string>",
"market": {
"country_code": "<string>",
"country_name": "<string>",
"location_code": 123,
"language_locale": "<string>",
"language_code": "<string>"
}
}
'import requests
url = "https://api.example.com/api/v1/brands/from-url"
payload = {
"url": "<string>",
"name": "<string>",
"market": {
"country_code": "<string>",
"country_name": "<string>",
"location_code": 123,
"language_locale": "<string>",
"language_code": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
name: '<string>',
market: {
country_code: '<string>',
country_name: '<string>',
location_code: 123,
language_locale: '<string>',
language_code: '<string>'
}
})
};
fetch('https://api.example.com/api/v1/brands/from-url', 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.example.com/api/v1/brands/from-url",
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>',
'name' => '<string>',
'market' => [
'country_code' => '<string>',
'country_name' => '<string>',
'location_code' => 123,
'language_locale' => '<string>',
'language_code' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/brands/from-url"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/v1/brands/from-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/from-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"website_url": "<string>",
"logo_url": "<string>",
"industry": "<string>",
"brand_classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
},
"description": "<string>",
"partner_slug": "<string>",
"default_location_code": 123,
"default_language_code": "<string>",
"country_code": "<string>",
"country_name": "<string>",
"brand_kit_count": 0,
"audit_count": 0,
"competitor_count": 0,
"canonical_record": {
"state": "no_website",
"label": "<string>",
"market": {
"brand_market_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"country_code": "<string>",
"location_code": 123,
"language_code": "<string>",
"homepage_url": "<string>",
"last_snapshot_at": "2023-11-07T05:31:56Z"
},
"industry_sets": [
{
"generation_method": "<string>",
"industry": "<string>",
"industry_slug": "<string>",
"classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
},
"generated_at": "2023-11-07T05:31:56Z"
}
],
"landing_pages": [
{
"host": "<string>",
"source": "<string>",
"path_prefix": "",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
}
],
"seeds": [
{
"competitor_domain": "<string>",
"name": "<string>",
"seed_source": "<string>",
"seed_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"seed_origin": "public",
"is_seed": true,
"override": {
"added": false,
"removed": false,
"starred": true,
"edited_fields": [
"<string>"
]
},
"homepage_url": "<string>",
"country": "<string>",
"competitor_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"relevance_score": 123,
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"retired_at": "2023-11-07T05:31:56Z"
}
],
"library_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"canonical_name": "<string>",
"canonical_name_rank": 123,
"canonical_name_source": "<string>",
"canonical_name_locked": false,
"primary_domain": "<string>",
"parent_company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"brand_classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
}
}
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create Brand From Url Legacy
Preserve the pre-async success shape for cached and external clients.
New AITasker clients use POST /from-url/jobs. Keeping this route’s
top-level BrandResponse avoids a staggered Railway/Vercel rollout
sending older bundles to /brands/undefined when they read brand.id.
The wait is intentionally capped at 60 seconds: accepted slow jobs continue
durably after a 504 instead of pinning a Railway request for 20 minutes.
curl --request POST \
--url https://api.example.com/api/v1/brands/from-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"name": "<string>",
"market": {
"country_code": "<string>",
"country_name": "<string>",
"location_code": 123,
"language_locale": "<string>",
"language_code": "<string>"
}
}
'import requests
url = "https://api.example.com/api/v1/brands/from-url"
payload = {
"url": "<string>",
"name": "<string>",
"market": {
"country_code": "<string>",
"country_name": "<string>",
"location_code": 123,
"language_locale": "<string>",
"language_code": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
name: '<string>',
market: {
country_code: '<string>',
country_name: '<string>',
location_code: 123,
language_locale: '<string>',
language_code: '<string>'
}
})
};
fetch('https://api.example.com/api/v1/brands/from-url', 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.example.com/api/v1/brands/from-url",
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>',
'name' => '<string>',
'market' => [
'country_code' => '<string>',
'country_name' => '<string>',
'location_code' => 123,
'language_locale' => '<string>',
'language_code' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/brands/from-url"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/v1/brands/from-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/from-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"market\": {\n \"country_code\": \"<string>\",\n \"country_name\": \"<string>\",\n \"location_code\": 123,\n \"language_locale\": \"<string>\",\n \"language_code\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"website_url": "<string>",
"logo_url": "<string>",
"industry": "<string>",
"brand_classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
},
"description": "<string>",
"partner_slug": "<string>",
"default_location_code": 123,
"default_language_code": "<string>",
"country_code": "<string>",
"country_name": "<string>",
"brand_kit_count": 0,
"audit_count": 0,
"competitor_count": 0,
"canonical_record": {
"state": "no_website",
"label": "<string>",
"market": {
"brand_market_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"country_code": "<string>",
"location_code": 123,
"language_code": "<string>",
"homepage_url": "<string>",
"last_snapshot_at": "2023-11-07T05:31:56Z"
},
"industry_sets": [
{
"generation_method": "<string>",
"industry": "<string>",
"industry_slug": "<string>",
"classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
},
"generated_at": "2023-11-07T05:31:56Z"
}
],
"landing_pages": [
{
"host": "<string>",
"source": "<string>",
"path_prefix": "",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
}
],
"seeds": [
{
"competitor_domain": "<string>",
"name": "<string>",
"seed_source": "<string>",
"seed_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"seed_origin": "public",
"is_seed": true,
"override": {
"added": false,
"removed": false,
"starred": true,
"edited_fields": [
"<string>"
]
},
"homepage_url": "<string>",
"country": "<string>",
"competitor_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"relevance_score": 123,
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"retired_at": "2023-11-07T05:31:56Z"
}
],
"library_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"canonical_name": "<string>",
"canonical_name_rank": 123,
"canonical_name_source": "<string>",
"canonical_name_locked": false,
"primary_domain": "<string>",
"parent_company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"brand_classification": {
"primary_industry": "<string>",
"industries": [
"<string>"
],
"business_models": [
"<string>"
],
"version": "<string>",
"source": "<string>",
"classified_at": "2023-11-07T05:31:56Z",
"needs_review": false
}
}
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Response
Successful Response
A versioned multi-label brand classification.
Industries describe what the brand sells or does. Business models describe
how it operates independently of industry. Keeping those dimensions
separate prevents the historical E-Commerce pseudo-industry from
replacing the brand's real product industry.
Show child attributes
Show child attributes
The subscription's view of its canonical record (T10 Phase 1).
state is total over the two NULL states of brands.brand_market_id
and the linked one -- no_website and not_linked are DIFFERENT
states with different labels, never one "no website" string (plan §2.2).
market and industry_sets are present when the route loaded them
(the detail route); a list row renders the state alone.
library_brand (T10 Phase 2) is the identity the record belongs to,
present when the route loaded it; None for a copy that carries no
identity pointer. Seed values remain the master list; the detail route
annotates each current-market seed with this copy's stored override.
Show child attributes
Show child attributes
Was this page helpful?