List brands
Returns the brands the key is allowed to read. Every other brand-scoped endpoint needs a
brand_id from here, so this is usually the first call an integration makes.
The workspace is taken from the key and is never a parameter. If the key was restricted to specific brands when it was minted, only those appear, so what this returns is exactly what the rest of the surface will accept. Discovery never advertises a brand a later call would refuse.
GET /v1/brandsAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
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. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"id": "242546de-4cee-4a7d-952e-f6aa60c63ef8",
"name": "Asky",
"workspace_id": "68e1802b-676c-4b59-8da2-2b77b940d7fa",
"is_active": true,
"primary_domain": "getasky.com",
"website": "https://getasky.com",
"created_at": "2025-11-12T18:42:40.013749+00:00",
"updated_at": "2026-08-12T12:44:49.600172+00:00"
}
],
"pagination": {
"limit": 20,
"has_more": true,
"next_cursor": "eyJ2IjoxLCJvIjoyMCwibCI6MjB9"
},
"request_id": "req_d13b43bb10214693888b"
}Response fields
| Field | Type | Description |
|---|---|---|
data.brands | object[] | required. The brands this key can reach |
data.brands[].id | uuid | required. Use as brand_id on every brand-scoped endpoint |
data.brands[].name | string | required. Display name |
data.brands[].workspace_id | uuid | required. Owning workspace |
data.brands[].is_active | boolean | required. An inactive brand stops being monitored but keeps its history |
data.brands[].primary_domain | string | null | Apex domain, for example getasky.com |
data.brands[].website | string | null | primary_domain with its protocol. null when no domain is set |
data.brands[].created_at | timestamptz | required |
data.brands[].updated_at | timestamptz | required |
data.count | integer | required. Number of brands returned |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 401 | token_expired | The key passed its expiry date. Roll it in Settings to get a replacement |
| 401 | token_revoked | The key was revoked |
| 429 | rate_limited | Over 300 requests per minute. See the Retry-After header |
Notes
Not paginated. A workspace holds a small, bounded number of brands, so the full list comes back in one response.
Last updated on