curl --request GET \
--url https://agenticadvertising.org/api/brands/resolveimport requests
url = "https://agenticadvertising.org/api/brands/resolve"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://agenticadvertising.org/api/brands/resolve', 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://agenticadvertising.org/api/brands/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://agenticadvertising.org/api/brands/resolve"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agenticadvertising.org/api/brands/resolve")
.asString();require 'uri'
require 'net/http'
url = URI("https://agenticadvertising.org/api/brands/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"canonical_id": "acmecorp.com",
"canonical_domain": "acmecorp.com",
"brand_name": "Acme Corp",
"names": [
{}
],
"parent_brand": "<string>",
"house_domain": "<string>",
"claimed_house_domain": "<string>",
"house_name": "<string>",
"relationship_verified_at": "2026-07-28T12:00:00.000Z",
"relationship_declared_at": "2026-01-29T12:00:00.000Z",
"promoted_from_schema": "<string>",
"migration_warnings": [
{
"field": "<string>",
"message": "<string>",
"suggestion": "<string>"
}
],
"brand_agent_url": "<string>",
"brand_manifest": {},
"live_brand_json": {
"valid": true,
"url": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"severity": "error"
}
],
"warnings": [
{
"field": "<string>",
"message": "<string>",
"suggestion": "<string>"
}
],
"status_code": 123
}
}{
"error": "<string>"
}{
"error": "<string>",
"domain": "<string>",
"file_status": 123
}{
"error": "<string>"
}Resolve brand
Resolve a domain to its canonical brand identity. Follows brand.json redirects and returns the resolved brand with its house, architecture type, and optional manifest. The domain must be a bare DNS hostname.
A domain is authoritative for its own identity, so source tells you who published the record and relationship_trust tells you whether a brand-to-house relationship was confirmed by both sides. Only mutual and inline are reciprocated; treat everything else as a claim.
Record selection is deterministic: hosted > brand_json > community > enriched. source reports provenance only and must not be used as a substitute for relationship_trust.
The v3 hierarchy is one level deep. There is no ordered-chain endpoint: third-party verifiers use the reciprocated house_domain edge returned here. claimed_house_domain is unilateral and never extends trust.
Rate limit: 60 requests per minute per IP address.
curl --request GET \
--url https://agenticadvertising.org/api/brands/resolveimport requests
url = "https://agenticadvertising.org/api/brands/resolve"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://agenticadvertising.org/api/brands/resolve', 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://agenticadvertising.org/api/brands/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://agenticadvertising.org/api/brands/resolve"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agenticadvertising.org/api/brands/resolve")
.asString();require 'uri'
require 'net/http'
url = URI("https://agenticadvertising.org/api/brands/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"canonical_id": "acmecorp.com",
"canonical_domain": "acmecorp.com",
"brand_name": "Acme Corp",
"names": [
{}
],
"parent_brand": "<string>",
"house_domain": "<string>",
"claimed_house_domain": "<string>",
"house_name": "<string>",
"relationship_verified_at": "2026-07-28T12:00:00.000Z",
"relationship_declared_at": "2026-01-29T12:00:00.000Z",
"promoted_from_schema": "<string>",
"migration_warnings": [
{
"field": "<string>",
"message": "<string>",
"suggestion": "<string>"
}
],
"brand_agent_url": "<string>",
"brand_manifest": {},
"live_brand_json": {
"valid": true,
"url": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"severity": "error"
}
],
"warnings": [
{
"field": "<string>",
"message": "<string>",
"suggestion": "<string>"
}
],
"status_code": 123
}
}{
"error": "<string>"
}{
"error": "<string>",
"domain": "<string>",
"file_status": 123
}{
"error": "<string>"
}Query Parameters
"acmecorp.com"
Bypass the resolution cache and refetch from the origin. When a fresh fetch fails and a stored record is returned instead, live_brand_json carries that fetch's diagnostics.
true, false Response
Brand resolved successfully
"acmecorp.com"
"acmecorp.com"
"Acme Corp"
Provenance of the selected record, not relationship authorization. Deterministic precedence is hosted > brand_json > community > enriched; normal reads prefer the durable stored winner on a source tie, while fresh=true lets a successful live origin read win a tie. brand_json: the domain's own /.well-known/brand.json. hosted: registered by an owner whose control of the domain was verified. community: contributed by a member. enriched: third-party enrichment.
hosted, brand_json, community, enriched Show child attributes
Show child attributes
master, sub_brand, endorsed, independent House the requested domain claims. This field never extends trust on its own; relationship_trust reports whether the reciprocal declaration is current enough to do so.
How the brand-to-house relationship was established. inline: the house's own document defines the brand. mutual: both sides publish the relationship — the trust-extending edge. leaf_only: the brand claims a house whose reciprocal declaration is missing, not yet active, or too old to extend trust. house_only: a house claims the brand, which has not reciprocated. standalone: the brand claims no house. unverifiable: a claimed house could not be checked.
inline, mutual, leaf_only, house_only, standalone, unverifiable When both sides of a mutual relationship were last seen agreeing. Present only for mutual, and it does not advance while the house side is unreachable, so callers can apply their own edge-aging policy.
"2026-07-28T12:00:00.000Z"
When the house declared the relationship in brand_refs[].effective_at, or the resolver's durable first observation if the publisher omitted that field. Callers can apply a declaration-age ceiling independently of relationship_verified_at.
"2026-01-29T12:00:00.000Z"
Set when a pre-v3 document was promoted to a canonical v3 document for this response. Identity only — legacy relationship data is preserved opaquely, never promoted to a trust claim.
Loss or ambiguity encountered while promoting a pre-v3 document. A house warning means the legacy house object was preserved only as opaque metadata and did not establish a trusted relationship.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
This request's origin-validation diagnostics when fresh=true falls back to a stored registry record. Presence means the response is stored evidence, not a successful live-origin read.
Show child attributes
Show child attributes
Was this page helpful?