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>"
}
]
},
"brand": {
"voice": {
"summary": "<string>",
"attributes": [
"<string>"
],
"avoid": [
"<string>"
]
},
"style": {
"summary": "<string>",
"attributes": [
"<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": "API key quota exceeded"
}Brand Context API
Get a structured, narrative-rich brand context for a domain — including identity, positioning, voice, and visual style. 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>"
}
]
},
"brand": {
"voice": {
"summary": "<string>",
"attributes": [
"<string>"
],
"avoid": [
"<string>"
]
},
"style": {
"summary": "<string>",
"attributes": [
"<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": "API key quota exceeded"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Domain name (brandfetch.com), or an email address on the domain (john@example.brandfetch.com). The API resolves an email address to its registrable domain before the lookup. It does not store the address. Your request logs show only the domain. A malformed address returns 400, and the API does not bill the request.
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.
Was this page helpful?