All customer sub-resource endpoints use the singular path /customer/{id}/... with the prefixed customer ID (e.g. cust_123).
List customers
GET /customers
Scope: customers:read
Returns all non-deleted customers for the company associated with your API client.
Response:
{
"data": [
{
"id": "cust_123",
"type": "customer",
"firstname": "Jane",
"lastname": "Smith",
"email": "jane@example.com",
"mobile": "07700900123",
"archived": false
}
]
}
| Field | Type | Description |
|---|---|---|
id | string | Customer ID (prefixed with cust_) |
type | string | Always "customer" |
firstname | string | First name |
lastname | string | Last name |
email | string | Email address |
mobile | string | Mobile number |
archived | boolean | Whether the customer is archived |
Get customer profile
GET /customer/{id}/profile
Scope: profile:read
The {id} path parameter uses the prefixed customer ID (e.g. cust_123).
Response:
{
"data": {
"id": "cust_123",
"type": "customer",
"firstname": "Jane",
"lastname": "Smith",
"email": "jane@example.com",
"mobile": "07700900123"
}
}
Update customer profile
PUT /customer/{id}/profile
Scope: profile:write
Updates firstname, lastname, email, and mobile. Cannot change password or avatar via the M2M API.
Request body:
{
"firstname": "Jane",
"lastname": "Smith",
"email": "jane@example.com",
"mobile": "07700900456"
}
| Field | Required | Description |
|---|---|---|
firstname | Yes | First name |
lastname | Yes | Last name |
email | Yes | Email address |
mobile | No | Mobile number (unchanged if omitted) |
Response:
{
"message": "Profile updated successfully"
}
Customer data endpoints
Each customer has several sub-resources accessible via /customer/{id}/...:
- Bookings โ event booking transactions and individual bookings
- Passes โ pass/package purchases and credit balances
- Videos & Media โ video and media purchases
- Subscriptions โ subscription mandates and plan details
- Appointments โ appointment bookings with service and facilitator details
- Notes โ notes attached to a customer record
