Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/ahrefs-brand-radar-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
OpenAPI Specification
openapi: 3.2.0
info:
title: Ahrefs Brand Radar API
description: Ahrefs API v3 gives programmatic access to Ahrefs' SEO, marketing, and AI-search data — backlinks, organic and paid traffic, keywords, SERPs, rank tracking, site audits, brand/AI-search visibility, web and social analytics, and account management. This is the full spec for every tool; each tool also has its own spec under /reference/.
termsOfService: https://ahrefs.com/terms
contact:
name: Ahrefs
url: https://ahrefs.com/
email: support@ahrefs.com
version: 3.0.0
servers:
- url: https://api.ahrefs.com/v3
description: Ahrefs API v3
security:
- http:
- read
tags:
- name: Brand Radar
description: Brand radar.
paths:
/brand-radar/ai-responses:
get:
tags:
- Brand Radar
summary: AI Responses
description: '>Requests to this endpoint consume API units based on the `prompts` parameter: requests returning only custom prompt data are free, while requests including Ahrefs prompt data follow standard API unit pricing.'
operationId: brand-radar.ai-responses
parameters:
- description: 'A comma-separated list of fields to return.
- `country`
- `data_source`
- `last_updated`
- `links` (10 units)
- `question`
- `response`
- `search_queries`
- `tags`
- `volume` (10 units)'
required: true
explode: false
schema:
type: string
name: select
in: query
- description: "The filter expression. The following column identifiers are recognized (this differs from the identifiers recognized by the `select` parameter).\n\n**cited_domain**: The domain of a page that was used to generate the response. \ntype: domain\n\n**cited_domain_subdomains**: The domain of a page that was used to generate the response. Any subdomain of the given domain will also match. \ntype: string\n\n**cited_url_exact**: The URL of a page that was used to generate the response. \ntype: string\n\n**cited_url_prefix**: The URL of a page that was used to generate the response. Any URL that starts with this prefix will match. \ntype: string\n\n**question**: The question asked by the user. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**response** (10 units): The response from the model. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**search_queries**: The search query used by the chatbot to find information for the response. Note: if `data_source` does not include `chatgpt` or `perplexity`, this field will always be empty. \ntype: string\n\n**topic**: The topic of the query. \ntype: string"
required: false
explode: false
schema:
type: string
name: where
in: query
- description: The number of results to return.
required: false
explode: false
schema:
type: integer
default: 1000
name: limit
in: query
- description: The date to search for in YYYY-MM-DD format.
required: false
explode: false
schema:
type: string
format: date
name: date
in: query
- description: 'AI visibility reports are switching to AI adjusted volume. It better estimates demand for AI responses across chatbots and AI search surfaces. It is calculated by adjusting Google search volume for each AI platform’s estimated usage compared with Google. This param will be deprecated on August 31, 2026; all requests will use new AI adjusted volume.
`ask_volume` - New calculation (default). Estimates demand for AI responses by adjusting Google search volume for each AI platform.
`keyword_volume` - Previous calculation. Uses Google search volume without AI platform adjustment. Available until August 31, 2026.'
required: false
explode: false
schema:
type: string
enum:
- ask_volume
- keyword_volume
default: ask_volume
name: search_volume_type
in: query
- description: A comma-separated list of two-letter country codes (ISO 3166-1 alpha-2).
required: false
explode: false
schema:
type: string
enum:
- ad
- ae
- af
- ag
- ai
- al
- am
- ao
- ar
- as
- at
- au
- aw
- az
- ba
- bb
- bd
- be
- bf
- bg
- bh
- bi
- bj
- bn
- bo
- br
- bs
- bt
- bw
- by
- bz
- ca
- cd
- cf
- cg
- ch
- ci
- ck
- cl
- cm
- cn
- co
- cr
- cu
- cv
- cy
- cz
- de
- dj
- dk
- dm
- do
- dz
- ec
- ee
- eg
- es
- et
- fi
- fj
- fm
- fo
- fr
- ga
- gb
- gd
- ge
- gf
- gg
- gh
- gi
- gl
- gm
- gn
- gp
- gq
- gr
- gt
- gu
- gy
- hk
- hn
- hr
- ht
- hu
- id
- ie
- il
- im
- in
- iq
- is
- it
- je
- jm
- jo
- jp
- ke
- kg
- kh
- ki
- kn
- kr
- kw
- ky
- kz
- la
- lb
- lc
- li
- lk
- ls
- lt
- lu
- lv
- ly
- ma
- mc
- md
- me
- mg
- mk
- ml
- mm
- mn
- mq
- mr
- ms
- mt
- mu
- mv
- mw
- mx
- my
- mz
- na
- nc
- ne
- ng
- ni
- nl
- 'no'
- np
- nr
- nu
- nz
- om
- pa
- pe
- pf
- pg
- ph
- pk
- pl
- pn
- pr
- ps
- pt
- py
- qa
- re
- ro
- rs
- ru
- rw
- sa
- sb
- sc
- se
- sg
- sh
- si
- sk
- sl
- sm
- sn
- so
- sr
- st
- sv
- td
- tg
- th
- tj
- tk
- tl
- tm
- tn
- to
- tr
- tt
- tw
- tz
- ua
- ug
- us
- uy
- uz
- vc
- ve
- vg
- vi
- vn
- vu
- ws
- ye
- yt
- za
- zm
- zw
default: ''
name: country
in: query
- description: A column to order the results by.
required: false
explode: false
schema:
type: string
enum:
- relevance
- volume
default: relevance
name: order_by
in: query
- description: 'The ID of the report to use. If one is given, other parameters are taken from the report (brand, competitors, market, country, filters). If country or filters are provided, they override the ones in the report. You can find it in the URL of your Brand Radar report in Ahrefs: `https://app.ahrefs.com/brand-radar/reports/#report_id#/...`'
required: false
explode: false
schema:
type: string
name: report_id
in: query
- description: The type of prompts to use. If not specified, both will be used. Custom prompts require a report_id to be provided.
required: false
explode: false
schema:
type: string
enum:
- ahrefs
- custom
name: prompts
in: query
- description: 'A comma-separated list of chatbot models. All models can be combined with each other. `claude` module supports only custom prompts.
The `google_ai_overviews_keywords` and `google_ai_mode_keywords` models report AI Overviews / AI Mode visibility derived from Google search queries (keywords) rather than prompts.'
required: true
explode: false
schema:
type: string
enum:
- chatgpt
- google_ai_overviews
- google_ai_mode
- gemini
- perplexity
- copilot
- claude
- grok
- google_ai_overviews_keywords
- google_ai_mode_keywords
examples:
- chatgpt,perplexity
name: data_source
in: query
- description: A comma-separated list of the niche markets of your brands. Deprecated on 2026-05-18, this parameter will have no effect shortly after this date.
required: false
explode: false
schema:
type: string
default: ''
name: market
in: query
- description: A comma-separated list of competitors of your brands.
required: false
explode: false
schema:
type: string
default: ''
name: competitors
in: query
- description: A comma-separated list of brands to search for. At least one of brand, competitors, market or where should not be empty.
required: false
explode: false
schema:
type: string
default: ''
name: brand
in: query
- $ref: '#/components/parameters/brand-radar.output_json_php'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/brand-radar.ai-responses'
application/xml:
schema:
$ref: '#/components/schemas/brand-radar.ai-responses'
'400':
$ref: '#/components/responses/brand-radar.error_400'
'401':
$ref: '#/components/responses/brand-radar.error_401'
'403':
$ref: '#/components/responses/brand-radar.error_403'
'429':
$ref: '#/components/responses/brand-radar.error_429'
'500':
$ref: '#/components/responses/brand-radar.error_500'
post:
tags:
- Brand Radar
summary: AI Responses
description: '>Requests to this endpoint consume API units based on the `prompts` parameter: requests returning only custom prompt data are free, while requests including Ahrefs prompt data follow standard API unit pricing.'
operationId: brand-radar.ai-responses.post
parameters: []
requestBody:
content:
application/json:
schema:
properties:
brand_filter:
type: object
description: "A filter expression for your brand's visibility, mirroring the \"Your brand\" filter. `brand_name` matches whether a response mentions your brand: `\"mentioned\"` or `\"not_mentioned\"`. `page_status` matches how the AI used your pages: `\"cited\"` (the AI retrieved pages from your site and referenced them in the answer), `\"found_but_not_cited\"` (the AI retrieved pages from your site as potential sources but did not reference them in the final answer), or `\"not_found\"` (the AI did not retrieve any pages from your site). \nUses [filter syntax](https://docs.ahrefs.com/api/docs/filter-syntax) with the following restrictions: the only valid operator is `\"eq\"`; each field is one section: give a single value, or combine several values of the same field with `or`; join the `brand_name` and `page_status` sections with a top-level `and`/`or`. Selecting every value of a field is rejected, since it matches everything (omit the field instead)."
examples:
- and:
- field: brand_name
is:
- eq
- mentioned
- or:
- field: page_status
is:
- eq
- cited
- field: page_status
is:
- eq
- found_but_not_cited
volume_range:
properties:
from:
type: integer
to:
type: integer
type: object
description: The volume range to filter by.
select:
items:
type: string
type: array
description: 'A list of fields to return.
- `country`
- `data_source`
- `last_updated`
- `links` (10 units)
- `question`
- `response`
- `search_queries`
- `tags`
- `volume` (10 units)'
examples:
- - field_a
- field_b
where:
type: object
description: "The filter expression. The following column identifiers are recognized (this differs from the identifiers recognized by the `select` parameter).\n\n**cited_domain**: The domain of a page that was used to generate the response. \ntype: domain\n\n**cited_domain_subdomains**: The domain of a page that was used to generate the response. Any subdomain of the given domain will also match. \ntype: string\n\n**cited_url_exact**: The URL of a page that was used to generate the response. \ntype: string\n\n**cited_url_prefix**: The URL of a page that was used to generate the response. Any URL that starts with this prefix will match. \ntype: string\n\n**question**: The question asked by the user. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**response** (10 units): The response from the model. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**search_queries**: The search query used by the chatbot to find information for the response. Note: if `data_source` does not include `chatgpt` or `perplexity`, this field will always be empty. \ntype: string\n\n**topic**: The topic of the query. \ntype: string"
tags_filter:
type: object
description: 'A filter expression for prompt tags. Requires `report_id`. Uses [filter syntax](https://docs.ahrefs.com/api/docs/filter-syntax) with the following restrictions: the only valid field name is `"tag"`; the only valid operator are: `"eq"`, `"neq"`, `"substring"`, `"isubstring"`, `"phrase_match"`, `"iphrase_match"`, `"prefix"`, `"suffix"`, `"empty"`; maximum nesting depth of `and`, `or` is 2.'
examples:
- or:
- field: tag
is:
- eq
- branded
- field: tag
is:
- eq
- competitor
limit:
type: integer
description: The number of results to return.
default: 1000
date:
type: string
format: date
description: The date to search for in YYYY-MM-DD format.
search_volume_type:
type: string
enum:
- ask_volume
- keyword_volume
description: 'AI visibility reports are switching to AI adjusted volume. It better estimates demand for AI responses across chatbots and AI search surfaces. It is calculated by adjusting Google search volume for each AI platform’s estimated usage compared with Google. This param will be deprecated on August 31, 2026; all requests will use new AI adjusted volume.
`ask_volume` - New calculation (default). Estimates demand for AI responses by adjusting Google search volume for each AI platform.
`keyword_volume` - Previous calculation. Uses Google search volume without AI platform adjustment. Available until August 31, 2026.'
default: ask_volume
country:
items:
type: string
enum:
- ad
- ae
- af
- ag
- ai
- al
- am
- ao
- ar
- as
- at
- au
- aw
- az
- ba
- bb
- bd
- be
- bf
- bg
- bh
- bi
- bj
- bn
- bo
- br
- bs
- bt
- bw
- by
- bz
- ca
- cd
- cf
- cg
- ch
- ci
- ck
- cl
- cm
- cn
- co
- cr
- cu
- cv
- cy
- cz
- de
- dj
- dk
- dm
- do
- dz
- ec
- ee
- eg
- es
- et
- fi
- fj
- fm
- fo
- fr
- ga
- gb
- gd
- ge
- gf
- gg
- gh
- gi
- gl
- gm
- gn
- gp
- gq
- gr
- gt
- gu
- gy
- hk
- hn
- hr
- ht
- hu
- id
- ie
- il
- im
- in
- iq
- is
- it
- je
- jm
- jo
- jp
- ke
- kg
- kh
- ki
- kn
- kr
- kw
- ky
- kz
- la
- lb
- lc
- li
- lk
- ls
- lt
- lu
- lv
- ly
- ma
- mc
- md
- me
- mg
- mk
- ml
- mm
- mn
- mq
- mr
- ms
- mt
- mu
- mv
- mw
- mx
- my
- mz
- na
- nc
- ne
- ng
- ni
- nl
- 'no'
- np
- nr
- nu
- nz
- om
- pa
- pe
- pf
- pg
- ph
- pk
- pl
- pn
- pr
- ps
- pt
- py
- qa
- re
- ro
- rs
- ru
- rw
- sa
- sb
- sc
- se
- sg
- sh
- si
- sk
- sl
- sm
- sn
- so
- sr
- st
- sv
- td
- tg
- th
- tj
- tk
- tl
- tm
- tn
- to
- tr
- tt
- tw
- tz
- ua
- ug
- us
- uy
- uz
- vc
- ve
- vg
- vi
- vn
- vu
- ws
- ye
- yt
- za
- zm
- zw
type: array
description: A list of two-letter country codes (ISO 3166-1 alpha-2).
default: []
order_by:
type: string
enum:
- relevance
- volume
description: A column to order the results by.
default: relevance
report_id:
type: string
description: 'The ID of the report to use. If one is given, other parameters are taken from the report (brand, competitors, market, country, filters). If country or filters are provided, they override the ones in the report. You can find it in the URL of your Brand Radar report in Ahrefs: `https://app.ahrefs.com/brand-radar/reports/#report_id#/...`'
prompts:
type: string
enum:
- ahrefs
- custom
description: The type of prompts to use. If not specified, both will be used. Custom prompts require a report_id to be provided.
data_source:
items:
type: string
enum:
- chatgpt
- google_ai_overviews
- google_ai_mode
- gemini
- perplexity
- copilot
- claude
- grok
- google_ai_overviews_keywords
- google_ai_mode_keywords
type: array
description: 'A list of chatbot models. All models can be combined with each other. `claude` module supports only custom prompts.
The `google_ai_overviews_keywords` and `google_ai_mode_keywords` models report AI Overviews / AI Mode visibility derived from Google search queries (keywords) rather than prompts.'
market:
items:
type: string
title: markets
type: array
minItems: 1
description: A list of the niche markets of your brands. Deprecated on 2026-05-18, this parameter will have no effect shortly after this date.
competitors:
items:
$ref: '#/components/schemas/brand-radar.entity'
type: array
description: A list of competitor names and websites to search for.
default: []
brands:
items:
$ref: '#/components/schemas/brand-radar.entity'
type: array
description: A list of brand names and websites to search for.
default: []
output:
type: string
enum:
- json
- php
description: The output format.
type: object
required:
- select
- data_source
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/brand-radar.ai-responses'
application/xml:
schema:
$ref: '#/components/schemas/brand-radar.ai-responses'
'400':
$ref: '#/components/responses/brand-radar.error_400'
'401':
$ref: '#/components/responses/brand-radar.error_401'
'403':
$ref: '#/components/responses/brand-radar.error_403'
'429':
$ref: '#/components/responses/brand-radar.error_429'
'500':
$ref: '#/components/responses/brand-radar.error_500'
/brand-radar/impressions-overview:
get:
tags:
- Brand Radar
summary: Overview - Impressions
description: '>Requests to this endpoint consume API units based on the `prompts` parameter: requests returning only custom prompt data are free, while requests including Ahrefs prompt data follow standard API unit pricing.'
operationId: brand-radar.impressions-overview
parameters:
- description: "The filter expression. The following column identifiers are recognized (this differs from the identifiers recognized by the `select` parameter).\n\n**cited_domain**: The domain of a page that was used to generate the response. \ntype: domain\n\n**cited_domain_subdomains**: The domain of a page that was used to generate the response. Any subdomain of the given domain will also match. \ntype: string\n\n**cited_url_exact**: The URL of a page that was used to generate the response. \ntype: string\n\n**cited_url_prefix**: The URL of a page that was used to generate the response. Any URL that starts with this prefix will match. \ntype: string\n\n**question**: The question asked by the user. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**response** (10 units): The response from the model. Note: the `substring` and `isubstring` operators are not supported on this field; use `phrase_match` or `iphrase_match` instead. \ntype: string\n\n**search_queries**: The search query used by the chatbot to find information for the response. Note: if `data_source` does not include `chatgpt` or `perplexity`, this field will always be empty. \ntype: string\n\n**topic**: The topic of the query. \ntype: string"
required: false
explode: false
schema:
type: string
name: where
in: query
- description: 'A comma-separated list of fields to return.
- `brand`
- `no_tracked_brands`
- `only_competitors_brands`
- `only_target_brand`
- `target_and_competitors_brands`
- `total`'
required: true
explode: false
schema:
type: string
name: select
in: query
- description: 'AI visibility reports are switching to AI adjusted volume. It better estimates demand for AI responses across chatbots and AI search surfaces. It is calculated by adjusting Google search volume for each AI platform’s estimated usage compared with Google. This param will be deprecated on August 31, 2026; all requests will use new AI adjusted volume.
`ask_volume` - New calculation (default). Estimates demand for AI responses by adjusting Google search volume for each AI platform.
`keyword_volume` - Previous calculation. Uses Google search volume without AI platform adjustment. Available until August 31, 2026.'
required: false
explode: false
schema:
type: string
enum:
- ask_volume
- keyword_volume
default: ask_volume
name: search_volume_type
in: query
- description: A comma-separated list of two-letter country codes (ISO 3166-1 alpha-2).
required: false
explode: false
schema:
type: string
enum:
- ad
- ae
- af
- ag
- ai
- al
- am
- ao
- ar
- as
- at
- au
- aw
- az
- ba
- bb
- bd
- be
- bf
- bg
- bh
- bi
- bj
- bn
- bo
- br
- bs
- bt
- bw
- by
- bz
- ca
- cd
- cf
- cg
- ch
- ci
- ck
- cl
- cm
- cn
- co
- cr
- cu
- cv
- cy
- cz
- de
- dj
- dk
- dm
- do
- dz
- ec
- ee
- eg
- es
- et
- fi
- fj
- fm
- fo
- fr
- ga
- gb
- gd
- ge
- gf
- gg
- gh
- gi
- gl
- gm
- gn
- gp
- gq
- gr
- gt
- gu
- gy
- hk
- hn
- hr
- ht
- hu
- id
- ie
- il
- im
- in
- iq
- is
- it
- je
- jm
- jo
- jp
- ke
- kg
- kh
- ki
- kn
- kr
- kw
- ky
- kz
- la
- lb
- lc
- li
- lk
- ls
- lt
- lu
- lv
- ly
- ma
- mc
- md
- me
- mg
- mk
- ml
- mm
- mn
- mq
- mr
- ms
- mt
- mu
- mv
- mw
- mx
- my
- mz
- na
- nc
- ne
- ng
- ni
- nl
- 'no'
- np
- nr
- nu
- nz
- om
- pa
- pe
- pf
- pg
- ph
- pk
- pl
- pn
- pr
- ps
- pt
- py
- qa
- re
- ro
- rs
- ru
- rw
- sa
- sb
- sc
- se
- sg
- sh
- si
- sk
- sl
- sm
- sn
- so
- sr
- st
- sv
- td
- tg
- th
- tj
- tk
- tl
- tm
# --- truncated at 32 KB (247 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ahrefs/refs/heads/main/openapi/ahrefs-brand-radar-api-openapi.yml