Get competitor
curl --request GET \
--url https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Competitors
Get competitor
Retrieve detailed competitor info with breakdowns by provider and topic.
GET
https://www.qwairy.co
/
api
/
v1
/
brands
/
{brandId}
/
competitors
/
{competitorId}
Get competitor
curl --request GET \
--url https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.qwairy.co/api/v1/brands/{brandId}/competitors/{competitorId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Returns one competitor’s metrics for the selected answer scope. Share of Voice divides this competitor’s mention occurrences by SELF and DIRECT mention occurrences in that scope.
See Rate limits for retry behavior.
Path parameters
string
required
The unique identifier of the brand
string
required
The unique identifier of the competitor
Query parameters
number
Number of days to include. If not specified, returns all data.
string
Start date in
YYYY-MM-DD. Provide it with endDate; a lone boundary is currently ignored. Choose either period or the complete date pair.string
End date in
YYYY-MM-DD. Provide it with startDate; a lone boundary is currently ignored. Do not combine the complete date pair with period.string
Filter by AI provider. Supports comma-separated multi-select (e.g.,
chatgpt,claude).string
Filter by topic ID. Supports comma-separated multi-select (e.g.,
id1,id2).string
Filter by tag ID. Supports comma-separated multi-select (e.g.,
id1,id2).Synthetic request
curl "https://www.qwairy.co/api/v1/brands/YOUR_BRAND_ID/competitors/COMPETITOR_ID?period=30" \
-H "Authorization: Bearer $QWAIRY_API_TOKEN"
Synthetic response
{
"success": true,
"competitor": {
"id": "competitor_01",
"name": "Rival Labs",
"domain": "rival.example",
"relationship": "DIRECT",
"totalMentions": 104,
"shareOfVoice": 8.13,
"avgPosition": 2.1,
"avgSentiment": 78.1,
"byProvider": [
{ "provider": "ChatGPT", "mentions": 62, "avgPosition": 2.0 },
{ "provider": "Perplexity", "mentions": 42, "avgPosition": 2.3 }
],
"byTopic": [
{ "topic": "Product Reviews", "mentions": 45 },
{ "topic": "Comparisons", "mentions": 38 }
]
}
}
avgSentiment is the average sentiment for this competitor’s mentions on a 0 to 100 scale, or null. byProvider groups stored model IDs under their provider display name.
Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid API token |
404 | Brand or competitor not found |
429 | Rate limit exceeded; honor Retry-After |

