Skip to content
Documentation menu

API reference

Competition and sources

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 routeDetail
ReturnsbrandName, 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.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
limit (query)integer, 1 to 100At most this many prompts, up to 100.
curl "https://api.ansengine.co/brands/{brandId}/competitive-report" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200brandName, 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.
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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 routeDetail
Returnsdomains: 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.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
unbranded (query)one of 11 reads only the prompts that do not mention the brand.
sinceDays (query)integer, 1 to 3650How many days back to read. The default is 90. Any other value is ignored.
curl "https://api.ansengine.co/brands/{brandId}/source-graph" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200domains: 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.
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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 routeDetail
Returnsrows: 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.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl "https://api.ansengine.co/brands/{brandId}/serp-positions" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200rows: 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.
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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 routeDetail
Returnsqueued: true, the period it was queued for, and jobId.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanEvery plan.
Rate limit30 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 budgetChecked by the queued job, not by this route.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
period (query)date, YYYY-MM-DDThe 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"
StatusWhen
200queued: true, the period it was queued for, and jobId.
400An id in the path is not valid, or period is not a date.
401No valid API key was sent.
403The key belongs to a viewer seat, which can read and cannot write.
404No 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.
429Over 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 routeDetail
Returnscompetitors: 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).
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl "https://api.ansengine.co/brands/{brandId}/google-competitors" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200competitors: 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).
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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 routeDetail
Returnsqueued: true and jobId. The work runs in the background; read the matching GET route for the result.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanEvery plan.
Rate limit30 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 budgetChecked before the work starts: 429 once the workspace's spend safety limit is reached.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl -X POST "https://api.ansengine.co/brands/{brandId}/google-competitors" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200queued: true and jobId. The work runs in the background; read the matching GET route for the result.
400An id in the path is not a valid id.
401No valid API key was sent.
403The key belongs to a viewer seat, which can read and cannot write.
404No 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.
429Over 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 routeDetail
Returnstargets: 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.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
limit (query)integer, 1 to 50At most this many targets, up to 50. The default is 15.
curl "https://api.ansengine.co/brands/{brandId}/citation-targets" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200targets: 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.
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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 routeDetail
Returnsqueued: true and jobId. The work runs in the background; read the matching GET route for the result.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanEvery plan.
Rate limit30 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 budgetChecked before the work starts: 429 once the workspace's spend safety limit is reached.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl -X POST "https://api.ansengine.co/brands/{brandId}/citation-authority" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200queued: true and jobId. The work runs in the background; read the matching GET route for the result.
400An id in the path is not a valid id.
401No valid API key was sent.
403The key belongs to a viewer seat, which can read and cannot write.
404No 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.
429Over 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.

Pages that cite the sources engines cite, and not to you.

About this routeDetail
Returnsgaps: per citing page, its url, targetDomains (the cited domains it links to), rank (its authority score, null where not measured) and createdAt.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl "https://api.ansengine.co/brands/{brandId}/link-gaps" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200gaps: per citing page, its url, targetDomains (the cited domains it links to), rank (its authority score, null where not measured) and createdAt.
400An id in the path is not a valid id.
401No valid API key was sent.
404No 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.