Prerequisites
- A valid Bearer token with admin access
- Organization context (
?o={organization_id})
Customer vs. Customer Account
The platform distinguishes between two entities:
A single person may have multiple
Customer records (one per organization they interact with), all linked to the same CustomerAccount.
Creating a Customer
Key Attributes
Custom Fields
Organizations can define custom fields (typecustom-fields) to collect additional data on customer records — member numbers, preferences, notes, etc. Each field value is stored as a custom-entry linked to the customer.
Reading Custom Field Data
There are two ways to retrieve custom field values on a customer. Option 1 —custom_entry_map attribute (recommended for display)
This attribute is always returned on the customer resource. It is a map keyed by the custom field’s UUID:
Option 2 —
include=custom_entries,custom_entries.field (full JSON:API resources)
Use this when you need the full custom-entries and custom-fields resource objects:
custom_entries as a JSON:API has-many relationship in the response, with field sideloaded in included.
Writing Custom Field Data
Send thecustom_entry_map attribute inside a PATCH request on the customer. The backend performs an atomic upsert and delete: entries in the map are created or updated, and any entries for fields not present in the map are deleted.
Note: Always include all fields you want to retain in a single request. Any field UUID not present in the map will have its entry deleted.
Value Format by Field Type
File upload fields (
file, image) are managed through a separate upload flow and cannot be set via custom_entry_map.
Full Example: Create Customer with Custom Fields
custom_entry_map in the response will contain the stored values with their labels and formatted representations.
Finding Customers
By Email (Exact Match)
By Search (Fuzzy)
Searches across name, email, and phone:By Custom Field
See the custom field filter syntax in JSON-API Conventions.Resolving a Customer by Code
Look up a customer from a QR code, barcode, or account pass:ModelIdentifier system and returns the associated customer resource.
Creating Custom Model Identifiers
To assign a custom identifier (barcode, member number, etc.) to a customer, create amodel-identifier linked to the customer:
resolve-code with the assigned code. You can also view a customer’s existing identifiers via the model-identifiers relationship:
Merging Duplicate Customers
Combine two customer records into one:- Fills empty fields on the target customer from the source (name, phone, birth date, etc.)
- Merges custom field data (target values take priority on conflicts)
- Transfers all relationships (bookings, orders, invoices) to the target
- Links the global account if the source had one and the target doesn’t
- Deletes the source customer record
Warning: This operation is irreversible. The source customer is permanently deleted.
Removing a Customer from a Community
Exporting Customers
Trigger an asynchronous export:Common Errors
Delivery Address
Customers can have a delivery address stored as a separateaddress resource. This is used when a service or plan requires a delivery address during checkout (configured via requires_delivery_address on the service/plan).
Reading the Delivery Address
Include thedelivery_address relationship:
included array:
How Delivery Addresses Are Set
Delivery addresses are collected during checkout when the booked service hasrequires_delivery_address: true. The address is submitted as part of the order form data and stored on the customer record. The order also snapshots the delivery address text at the time of purchase.