List customers
List customers
Returns a paginated list of customers belonging to the authenticated merchant’s store. Results are always scoped to the caller’s storeId.
Authentication
- Send the merchant API key in the
x-api-keyheader (aliasx-account-api-key). - Requires the scope:
Merchant.customer.read. - Optionally scope the key to a specific store/account with
x-application-account-id(aliasx-account-id) or theapplication_account_id/account_idquery param.
Query params
- Pagination:
page(default 1) andper_page(default 10). Setper_page=0to return all records (no pagination). name/email: partial, case-insensitivecontainsfilters applied to the respective columns.filter: generic multi-field search acrossname,email,mobile(Prisma where fragment produced by the@Filterdecorator).sort: ordering overcreatedAt,name,email(Prisma orderBy produced by the@Sortdecorator).sorter: JSON-encoded ordering object (allowed keys:createdAt,name,email, eachascordesc). When provided it overridessort.
Response
Envelope with _metadata (page, per_page, total_page, total_count) and a records array of customer objects.
Notas: Results are always filtered to the authenticated store’s storeId. per_page=0 disables pagination (returns everything; _metadata.per_page then equals total_count). The sorter JSON param, when supplied, takes precedence over sort. start_at/end_at date filters are NOT part of this DTO (FilterCustomerDto extends PaginationDto, not FilterDateDto).
Authentication
Headers
Scope the request to a specific store / account instead of the one resolved from the API key. Aliases: the x-account-id header, or the application_account_id / account_id query parameter.
Query parameters
Case-insensitive partial match on the customer name.
Case-insensitive partial match on the customer email.
Filter with the query language. Accepts a string expression or a URL-encoded JSON object following Prisma’s where clause.
Allowed fields: name, email, mobile
Allowed operators: equals, not, in, notIn, lt, lte, gt, gte, contains, startsWith, endsWith, like
String format: field:operator:value, comma-separated. The operator defaults to equals (field:value), and | works as a separator. Group with AND(...) or OR(...) — AND is the default.
JSON format: {"OR":[{"name":{"contains":"Jane"}}]}
Sort by one or more fields, comma-separated.
Allowed fields: createdAt, name, email
Formats: field (ascending by default), +field, -field, field:asc, field:desc (| also works as the separator).
Alternative to sort: a JSON string mapping a field to a direction (asc / desc).
Allowed fields: createdAt, name, email
