Page the customer directory, newest first, with the total to page by
Manually-added customers from the customers table.
/v1/customersViewer- Operation id
- list_customers
- Access
- Any workspace role can call this.
/v1/customersManually-added customers from the customers table.
Newest first. There is no search or filter here: to find the customer
behind a ticket, read the ticket, which carries customer_id,
customer_name and customer_email.
Paging is opt-in. Omitting limit returns the whole workspace, which is
what every current caller expects, so a large workspace should pass one.
limit is 1 to 500 when given. total is always reported, so a caller can
page without a second round trip, and limit echoes back as null when it
was not sent.
Tenancy: the request is scoped to one workspace, and the credential presented is what selects it. A caller with no membership in that workspace is refused with 404, which is indistinguishable from a workspace that does not exist.
Authorisation: any workspace role, including viewer. Reads are open to every member.
Access: Authorization: Bearer carrying either a realm access token or an API key. A key must hold the customers:read scope, and the workspace role of the person who owns it must meet the floor above.
A realm-issued access token, presented as Authorization: Bearer <token>. It acts as the person who signed in, and every operation resolves their workspace role live from the membership record.
In: header
Query Parameters
0 <= value <= 21474836470Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/customers"{ "total": 582, "limit": 50, "offset": 0, "customers": [ { "id": "9f1d6c4e-6b6e-4b31-9a5b-2f1c9a4d5e60", "display_name": "Sam Okafor", "email": "sam.okafor@northwind.example", "company": "Northwind Ltd", "country": "GB", "metadata": { "plan": "enterprise" }, "created_at": "2026-02-03T09:41:00+00:00", "updated_at": "2026-08-14T10:20:00+00:00" } ]}