curl --request GET \
--url https://api.brandfetch.io/v2/context/{domain} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brandfetch.io/v2/context/{domain}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brandfetch.io/v2/context/{domain}', 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.brandfetch.io/v2/context/{domain}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.brandfetch.io/v2/context/{domain}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.brandfetch.io/v2/context/{domain}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brandfetch.io/v2/context/{domain}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"meta": {
"domain": "brandfetch.com",
"canonical_name": "Brandfetch",
"resolved_at": "2026-05-25T08:48:36.843440+00:00"
},
"identity": {
"tagline": "<string>",
"mission": "<string>",
"description": "<string>",
"tags": [
"<string>"
]
},
"positioning": {
"value_proposition": "<string>",
"target_audience": [
{
"segment": "<string>",
"description": "<string>"
}
],
"products_and_services": [
{
"name": "<string>",
"type": "product",
"description": "<string>",
"category": "Brand data API",
"features": [
"<string>"
],
"tags": [
"<string>"
],
"url": "https://brandfetch.com/developers",
"pricing": {
"model": "subscription",
"free_tier": true,
"starting_price": 99,
"currency": "USD",
"unit": "per month",
"plans": [
"<string>"
],
"url": "<string>"
}
}
]
},
"brand": {
"voice": {
"summary": "<string>",
"attributes": [
"<string>"
],
"avoid": [
"<string>"
]
},
"style": {
"summary": "<string>",
"attributes": [
"<string>"
]
}
},
"competition": {
"competitors": [
{
"name": "<string>",
"domain": "<string>",
"type": "direct",
"category": "<string>",
"positioning": "<string>",
"overlap": [
"<string>"
]
}
]
}
}{
"message": "Bad Request"
}{
"message": "Unauthorized"
}{
"message": "Payment required. Either authenticate with a Brandfetch API key (Authorization: Bearer <key>) or pay for this request with x402: sign the payment described in the PAYMENT-REQUIRED header and retry with a PAYMENT-SIGNATURE header.",
"documentation": "https://docs.brandfetch.com/agents/pay-per-request",
"pricing": {
"route": "GET /v2/brands/*",
"price": "$0.10"
},
"resource": "https://api.brandfetch.io/v2/brands/nike.com",
"standingAccess": "For many requests, POST /v2/agents/access (paid the same way) provisions an API key preloaded with prepaid credits."
}{
"message": "<Not Found> or <Invalid Domain Name>"
}{
"message": "We couldn't read this domain (the site appears to block automated requests)."
}{
"message": "API key quota exceeded"
}{
"message": "The brand context for this domain is still being generated. Retry in 30 seconds."
}Brand Context API
Get a structured, narrative-rich brand context for a domain — including identity, positioning, products and services, voice, visual style, and competitors. Authenticate with an API key sent as Authorization: Bearer <key>, or pay for the single request with x402 or MPP: https://docs.brandfetch.com/agents/pay-per-request.
curl --request GET \
--url https://api.brandfetch.io/v2/context/{domain} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brandfetch.io/v2/context/{domain}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brandfetch.io/v2/context/{domain}', 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.brandfetch.io/v2/context/{domain}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.brandfetch.io/v2/context/{domain}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.brandfetch.io/v2/context/{domain}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brandfetch.io/v2/context/{domain}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"meta": {
"domain": "brandfetch.com",
"canonical_name": "Brandfetch",
"resolved_at": "2026-05-25T08:48:36.843440+00:00"
},
"identity": {
"tagline": "<string>",
"mission": "<string>",
"description": "<string>",
"tags": [
"<string>"
]
},
"positioning": {
"value_proposition": "<string>",
"target_audience": [
{
"segment": "<string>",
"description": "<string>"
}
],
"products_and_services": [
{
"name": "<string>",
"type": "product",
"description": "<string>",
"category": "Brand data API",
"features": [
"<string>"
],
"tags": [
"<string>"
],
"url": "https://brandfetch.com/developers",
"pricing": {
"model": "subscription",
"free_tier": true,
"starting_price": 99,
"currency": "USD",
"unit": "per month",
"plans": [
"<string>"
],
"url": "<string>"
}
}
]
},
"brand": {
"voice": {
"summary": "<string>",
"attributes": [
"<string>"
],
"avoid": [
"<string>"
]
},
"style": {
"summary": "<string>",
"attributes": [
"<string>"
]
}
},
"competition": {
"competitors": [
{
"name": "<string>",
"domain": "<string>",
"type": "direct",
"category": "<string>",
"positioning": "<string>",
"overlap": [
"<string>"
]
}
]
}
}{
"message": "Bad Request"
}{
"message": "Unauthorized"
}{
"message": "Payment required. Either authenticate with a Brandfetch API key (Authorization: Bearer <key>) or pay for this request with x402: sign the payment described in the PAYMENT-REQUIRED header and retry with a PAYMENT-SIGNATURE header.",
"documentation": "https://docs.brandfetch.com/agents/pay-per-request",
"pricing": {
"route": "GET /v2/brands/*",
"price": "$0.10"
},
"resource": "https://api.brandfetch.io/v2/brands/nike.com",
"standingAccess": "For many requests, POST /v2/agents/access (paid the same way) provisions an API key preloaded with prepaid credits."
}{
"message": "<Not Found> or <Invalid Domain Name>"
}{
"message": "We couldn't read this domain (the site appears to block automated requests)."
}{
"message": "API key quota exceeded"
}{
"message": "The brand context for this domain is still being generated. Retry in 30 seconds."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Domain name (brandfetch.com), a website URL on the domain (https://www.brandfetch.com/developers/pricing), or an email address on the domain (john@example.brandfetch.com). The API resolves a website URL or an email address to its registrable domain before the lookup. It does not store the URL or the address. Your request logs show only the domain. A URL whose host is not a domain name returns 400. A malformed address also returns 400. The API does not bill these requests.
Query Parameters
When true, return a brand context only if one is already cached, responding instantly without crawling the domain. If no cached context exists, the API responds with 204 No Content instead of resolving the domain live (which can take several seconds). Useful for latency-sensitive use cases. Any value other than true (including omitting the parameter) keeps the default behaviour of resolving the domain live on a cache miss. Defaults to false.
Response
Successful request. The response format is determined by the Accept header: application/json returns a structured JSON object, while text/markdown returns the brand context as Markdown. A request paid with MPP whose response was lost can be retried with the same credential for two minutes: it is served from the payment already taken and not charged again.
Full brand context returned by the Brand Context API. Note: unlike other endpoints in this API which use camelCase, the Brand Context endpoint intentionally returns field names in snake_case (e.g., canonical_name, resolved_at, value_proposition, target_audience, products_and_services) to align with conventions commonly used by LLM tooling that consumes this data.
Metadata about the resolved brand context.
Show child attributes
Show child attributes
Core identity of the brand.
Show child attributes
Show child attributes
How the brand positions itself in the market.
Show child attributes
Show child attributes
The brand's voice and visual style.
Show child attributes
Show child attributes
The brand's competitors. null for a context generated before competitors were added to the Brand Context API; such contexts are regenerated over time.
Show child attributes
Show child attributes
Was this page helpful?