Operation
List customers
GET
/customersList customers with optional filtering and pagination. Account-scoped: the customers of the accounts the caller may list, plus records provenance has shared with them. Never channel-scoped. Each customer carries the fields the caller's access tiers reach: customers.read for an account the record belongs to or is shared with shows every documented field, and customers.list alone shows only public fields, which a customer has none of.
Query parameters
searchstringOptional- Search customers by email, first name, or last name
emailstringOptional- Filter by exact email address
accountIdstringOptional- Filter by account ID
isBlockedstringOptional- Filter by blocked status (true/false)
updatedSincestringOptional- Only customers updated at/after this ISO timestamp (for incremental polling)
cursorstringOptional- Opaque keyset cursor for stable pagination (use pagination.nextCursor from the previous page)
pagestringOptional- Page number
limitstringOptional- Items per page (max 100)
Returns
Customers retrieved successfully
Errors
- 400
- Bad Request - Invalid input
- 401
- Unauthorized - Authentication required
- 403
- Forbidden - Insufficient permissions
- 404
- Not Found - Resource not found
- 500
- Internal Server Error
Every error names its code and links to it. All error codes
curl -X GET "https://api.ticketlayer.com/v1/customers" \ -H "Authorization: Bearer tlak_..." \ -H "X-Ticketlayer-Org: your-org-slug"Response 200
{
"customers": [
{
"id": "cus_abc123",
"organisationId": "org_xyz789",
"accountId": "acc_xyz789",
"email": "customer@example.com",
"firstName": "John",
"lastName": "Doe",
"phone": "+44 7700 900000",
"externalId": "ext_cust_12345",
"isBlocked": false,
"blockedAt": null,
"blockedReason": null,
"metadata": {
"loyaltyTier": "gold"
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-20T14:45:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"totalPages": 8
}
}