List competitors
Who this brand is measured against. Identity only: names, domains, aliases and how each entity relates to you. Share of voice and visibility numbers come from Competitor rankings.
The list includes your own brand, as the row with relation: "my_brand". That is deliberate — a
ranking is only meaningful next to the thing being ranked, and having one shape for every entity
means a client does not special-case itself.
GET /v1/brands/{brand_id}/competitorsAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | optional | Rows per page, 1 to 100. Defaults to 20. |
cursor | string | optional | Opaque cursor from the previous response. Treat it as a token, never construct one. |
relation | string, repeatable | optional | Restrict to these relation types. One of: direct_competitor, indirect_competitor, partner, my_brand. |
active_only | boolean | optional | Only active competitors. Defaults to true. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/competitors' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"id": "9a1f2c48-6d7e-4b03-9f11-2c8ad4e51b77",
"name": "Asky",
"primary_url": "https://getasky.com",
"domain": "getasky.com",
"relation": "my_brand",
"aliases": [
"Asky AI",
"Asky Labs"
],
"favicon_url": "https://getasky.com/favicon.ico",
"is_active": true,
"is_manual": true
},
{
"id": "b7c3e910-4482-4f5a-bb2e-7d1e0a93c684",
"name": "Peec AI",
"primary_url": "https://peec.ai",
"domain": "peec.ai",
"relation": "direct_competitor",
"aliases": [
"Peec"
],
"favicon_url": null,
"is_active": true,
"is_manual": false
}
],
"pagination": {
"limit": 20,
"has_more": true,
"next_cursor": "eyJ2IjoxLCJvIjoyMCwibCI6MjB9"
},
"request_id": "req_a41c7e0b93d2486fb5aa"
}Response fields
| Field | Type | Description |
|---|---|---|
data.competitors | object[] | required |
data.competitors[].id | uuid | required. Use as competitor_id where an endpoint takes one |
data.competitors[].name | string | required. Display name |
data.competitors[].primary_url | string | null | Their site |
data.competitors[].domain | string | null | Registrable apex domain, used to attribute citations |
data.competitors[].relation | string | required. direct_competitor, indirect_competitor, partner, or my_brand |
data.competitors[].aliases | string[] | required. Other names this entity is recognised by in AI answers |
data.competitors[].favicon_url | string | null | |
data.competitors[].is_active | boolean | required |
data.competitors[].is_manual | boolean | required. true when added by hand rather than discovered |
data.count | integer | required |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A parameter is unknown or malformed. The message names it |
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 401 | token_expired | The key passed its expiry date |
| 401 | token_revoked | The key was revoked |
| 404 | not_found | The brand does not exist, or this key is not allowed to reach it. The two are deliberately indistinguishable |
| 429 | rate_limited | Over 300 requests per minute. See the Retry-After header |
Notes
Not paginated. A brand tracks a bounded number of competitors, so the full list comes back at once.
aliases is what makes mention detection work. If a competitor is being missed in AI answers,
a missing alias is the first thing to check.
Last updated on