Skip to Content
APIEndpointsList competitors

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}/competitors

Authorization

HeaderTypeRequired
AuthorizationBearer asky_sk_…required

Path parameters

ParameterTypeRequiredDescription
brand_iduuidrequiredFrom List brands

Query parameters

ParameterTypeRequiredDescription
limitintegeroptionalRows per page, 1 to 100. Defaults to 20.
cursorstringoptionalOpaque cursor from the previous response. Treat it as a token, never construct one.
relationstring, repeatableoptionalRestrict to these relation types. One of: direct_competitor, indirect_competitor, partner, my_brand.
active_onlybooleanoptionalOnly active competitors. Defaults to true.

Request

curl --request GET \ --url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/competitors' \ --header 'Authorization: Bearer <api-key>'

Response

{ "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

FieldTypeDescription
data.competitorsobject[]required
data.competitors[].iduuidrequired. Use as competitor_id where an endpoint takes one
data.competitors[].namestringrequired. Display name
data.competitors[].primary_urlstring | nullTheir site
data.competitors[].domainstring | nullRegistrable apex domain, used to attribute citations
data.competitors[].relationstringrequired. direct_competitor, indirect_competitor, partner, or my_brand
data.competitors[].aliasesstring[]required. Other names this entity is recognised by in AI answers
data.competitors[].favicon_urlstring | null
data.competitors[].is_activebooleanrequired
data.competitors[].is_manualbooleanrequired. true when added by hand rather than discovered
data.countintegerrequired
request_idstringrequired. Also returned as the x-request-id header. Quote it when contacting support

Errors

StatusCodeWhen
400invalid_requestA parameter is unknown or malformed. The message names it
401invalid_tokenThe key is missing, malformed, or does not exist
401token_expiredThe key passed its expiry date
401token_revokedThe key was revoked
404not_foundThe brand does not exist, or this key is not allowed to reach it. The two are deliberately indistinguishable
429rate_limitedOver 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