Who the answers mention instead of you, which sources the engines read, and the classic Google lane beside the AI one.
GET /brands/{brandId}/competitive-report
Per prompt: your standing, who is mentioned instead, and the sources behind them.
Note
Read over the last 90 days of answers.
About this route
Detail
Returns
brandName, brandDomain and prompts: per prompt, your rate and standing, the competitors cited on it, the names the answers gave instead (answerNames) and the sources those answers used; plus the counts and window the report was read over.
brandName, brandDomain and prompts: per prompt, your rate and standing, the competitors cited on it, the names the answers gave instead (answerNames) and the sources those answers used; plus the counts and window the report was read over.
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
GET /brands/{brandId}/source-graph
Every domain the engines cite across your prompts.
About this route
Detail
Returns
domains: the 40 most cited, each with its type (reddit, youtube, a competitor, your own and so on), its citations, and how many prompts and engines cited it; totals over every cited domain, counted before the cut; answersTotal and answersWithSources, with anySourceDesignEffect when it is above 1 (how much the answers citing any source agree within a prompt, the factor their likely range is drawn at); yourDomain and window.
Seat
Any seat's key, a viewer's included.
Plan
Every plan.
Rate limit
None on this route.
Engine budget
Nothing this route does is metered.
Parameter
Type
What it is
brandId (path, required)
uuid
A brand id from GET /brands.
unbranded (query)
one of 1
1 reads only the prompts that do not mention the brand.
sinceDays (query)
integer, 1 to 3650
How many days back to read. The default is 90. Any other value is ignored.
domains: the 40 most cited, each with its type (reddit, youtube, a competitor, your own and so on), its citations, and how many prompts and engines cited it; totals over every cited domain, counted before the cut; answersTotal and answersWithSources, with anySourceDesignEffect when it is above 1 (how much the answers citing any source agree within a prompt, the factor their likely range is drawn at); yourDomain and window.
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
GET /brands/{brandId}/serp-positions
Classic Google results beside the AI answers, per tracked prompt.
Note
A Google result is a ranked list, so it carries a position. An AI answer is not, so it carries a rate.
About this route
Detail
Returns
rows: per prompt, the latest classic Google position beside the mention rate from its AI answers; authorityGaps: prompts where you sit in Google's top ten and no measured answer mentions you; checkedPrompts and periods.
rows: per prompt, the latest classic Google position beside the mention rate from its AI answers; authorityGaps: prompts where you sit in Google's top ten and no measured answer mentions you; checkedPrompts and periods.
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
POST /brands/{brandId}/serp-track
Queue the classic Google capture for the tracked prompts.
Note
The job checks the plan and the spend safety limit itself, so a refusal shows up as nothing collected rather than as an error here.
About this route
Detail
Returns
queued: true, the period it was queued for, and jobId.
Seat
A key on a member seat or above. A viewer's key is refused with 403.
Plan
Every plan.
Rate limit
30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budget
Checked by the queued job, not by this route.
Parameter
Type
What it is
brandId (path, required)
uuid
A brand id from GET /brands.
period (query)
date, YYYY-MM-DD
The day to collect, as YYYY-MM-DD. Without it, today (UTC).
curl -X POST "https://api.ansengine.co/brands/{brandId}/serp-track" \
-H "Authorization: Bearer ak_your_key"
Status
When
200
queued: true, the period it was queued for, and jobId.
400
An id in the path is not valid, or period is not a date.
401
No valid API key was sent.
403
The key belongs to a viewer seat, which can read and cannot write.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
429
Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait.
GET /brands/{brandId}/google-competitors
Who shares your keywords on classic Google, marked competitor or platform.
About this route
Detail
Returns
competitors: per domain, googlePosition (where it sits in classic Google results, averaged over the keywords you share), intersections (how many keywords you share) and entityClass, from the same classifier the AI lane uses (competitor, platform, publisher and so on).
competitors: per domain, googlePosition (where it sits in classic Google results, averaged over the keywords you share), intersections (how many keywords you share) and entityClass, from the same classifier the AI lane uses (competitor, platform, publisher and so on).
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
POST /brands/{brandId}/google-competitors
Queue the classic Google competitor capture.
About this route
Detail
Returns
queued: true and jobId. The work runs in the background; read the matching GET route for the result.
Seat
A key on a member seat or above. A viewer's key is refused with 403.
Plan
Every plan.
Rate limit
30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budget
Checked before the work starts: 429 once the workspace's spend safety limit is reached.
Parameter
Type
What it is
brandId (path, required)
uuid
A brand id from GET /brands.
curl -X POST "https://api.ansengine.co/brands/{brandId}/google-competitors" \
-H "Authorization: Bearer ak_your_key"
Status
When
200
queued: true and jobId. The work runs in the background; read the matching GET route for the result.
400
An id in the path is not a valid id.
401
No valid API key was sent.
403
The key belongs to a viewer seat, which can read and cannot write.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
429
Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait. Or the workspace's spend safety limit is reached: the body says so as budget_cap_reached, and spend resumes next cycle.
GET /brands/{brandId}/citation-targets
The pages engines cite for your category, highest leverage first.
About this route
Detail
Returns
targets: per cited page, its url, title, domain and type; how many answers, prompts and engines cite it, and its citations on each model (models) with the newest (lastCitedAt); your mention rate on the prompts it feeds (null when those prompts have too few answers for a rate, with the counts in yourNamed); its lever (inclusion, update_request, review_profile, listing, community_reply or creator) and leverReason; and authorityRank (0 to 1000) and spamScore (0 to 100), null where not measured. Plus totalPages, opportunityCount and windowDays.
Seat
Any seat's key, a viewer's included.
Plan
Every plan.
Rate limit
None on this route.
Engine budget
Nothing this route does is metered.
Parameter
Type
What it is
brandId (path, required)
uuid
A brand id from GET /brands.
limit (query)
integer, 1 to 50
At most this many targets, up to 50. The default is 15.
targets: per cited page, its url, title, domain and type; how many answers, prompts and engines cite it, and its citations on each model (models) with the newest (lastCitedAt); your mention rate on the prompts it feeds (null when those prompts have too few answers for a rate, with the counts in yourNamed); its lever (inclusion, update_request, review_profile, listing, community_reply or creator) and leverReason; and authorityRank (0 to 1000) and spamScore (0 to 100), null where not measured. Plus totalPages, opportunityCount and windowDays.
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
POST /brands/{brandId}/citation-authority
Queue the authority refresh for the cited domains and the link gap expansion.
About this route
Detail
Returns
queued: true and jobId. The work runs in the background; read the matching GET route for the result.
Seat
A key on a member seat or above. A viewer's key is refused with 403.
Plan
Every plan.
Rate limit
30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budget
Checked before the work starts: 429 once the workspace's spend safety limit is reached.
Parameter
Type
What it is
brandId (path, required)
uuid
A brand id from GET /brands.
curl -X POST "https://api.ansengine.co/brands/{brandId}/citation-authority" \
-H "Authorization: Bearer ak_your_key"
Status
When
200
queued: true and jobId. The work runs in the background; read the matching GET route for the result.
400
An id in the path is not a valid id.
401
No valid API key was sent.
403
The key belongs to a viewer seat, which can read and cannot write.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
429
Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait. Or the workspace's spend safety limit is reached: the body says so as budget_cap_reached, and spend resumes next cycle.
GET /brands/{brandId}/link-gaps
Pages that cite the sources engines cite, and not to you.
About this route
Detail
Returns
gaps: per citing page, its url, targetDomains (the cited domains it links to), rank (its authority score, null where not measured) and createdAt.
gaps: per citing page, its url, targetDomains (the cited domains it links to), rank (its authority score, null where not measured) and createdAt.
400
An id in the path is not a valid id.
401
No valid API key was sent.
404
No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.