Skip to main content
GET
List Brands

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

limit
integer
default:200
Required range: 1 <= x <= 500
offset
integer
default:0
Required range: x >= 0
q
string | null

Case-insensitive substring match on canonical_name or primary_domain, over the WHOLE library rather than the current page. LIKE metacharacters are escaped server-side.

Maximum string length: 255
classes
enum<string>[] | null

Origin classes to intersect (repeatable). Chips compose with AND: ?classes=UOB&classes=GTB is rows that are both.

Available options:
UOB,
DOB,
GTB,
UTB,
ZOB
visibility
enum<string> | null

Filter public or tenant_private brands; omitted returns both.

Available options:
public,
tenant_private

Response

Successful Response

One page of the census, with enough metadata to page further.

has_more is computed from offset + len(brands) < total where both sides come from the SAME unfiltered SQL query family (no Python-side row dropping happens between the count and the page) — see the service docstring for why that structurally avoids the has_more/offset drift bug class this repo has hit before. total, limit and offset all count library-brand × market rows, never library brands: the fan-out happens in SQL (an outer join in the base select), so a multi-market brand costs several rows of the page and the pager's arithmetic is unchanged.

brands
BrandLibraryCensusRow · object[]
required
total
integer
required
limit
integer
required
offset
integer
required
has_more
boolean
required