Customers Overview
Learn how to create, manage, and organize customer records in OnSched for streamlined appointment booking.
Environment tip: All examples use
v3.onsched.comfor production. Replace the host withapi-stage.onsched.comwhen calling the staging environment.
What Are Customers?
Customers represent the people who book appointments through your OnSched system. Each customer record stores:
- Contact information (name, email, phone)
- Appointment history
- Notification preferences
- Custom fields for additional data
- Optional location association
Customer records enable:
- Faster repeat bookings (no re-entering info)
- Appointment history tracking
- Personalized communications
- Customer relationship management
Core Properties
Required Fields
- firstName (string) – Customer's first name
- lastName (string) – Customer's last name
- email (string) – Email address (unique per company)
Email serves as the unique identifier—you cannot have two customers with the same email in one company.
Optional Fields
- phone (string) – Phone number for SMS notifications or calls
- verificationDate (date) – When customer verified their email/phone
- registrationDate (date) – When customer signed up
- disabled (boolean) – Whether customer account is active
- notificationType (enum) – Preferred notification method (
EMAIL,SMS,ALL,NONE) - latitude / longitude (decimal) – Customer location coordinates
- LocationId (UUID) – Associate customer with specific location (optional)
Audit Fields
- createdBy (string) – Who created the record
- updatedBy (string) – Who last modified the record
- verifiedBy (string) – Who verified the customer
Useful for tracking data provenance.
Custom Fields
- CustomFields (object) – Key-value pairs for extended data
See Customer Custom Fields for details.
Creating Customers
Standalone Customer Creation
Create a customer before booking:
curl -X POST https://v3.onsched.com/v3/customer \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Jamie",
"lastName": "Rodriguez",
"email": "[email protected]",
"phone": "+15550123",
"notificationType": "ALL"
}'Response:
{
"id": "customer-uuid",
"firstName": "Jamie",
"lastName": "Rodriguez",
"email": "[email protected]",
"phone": "+15550123",
"notificationType": "ALL",
"disabled": false,
"createdAt": "2025-11-25T10:00:00Z"
}Inline Customer Creation During Booking
Create customer while booking appointment:
curl -X POST "https://v3.onsched.com/v3/appointment?\
LocationId=LOCATION_ID&\
ServiceId=SERVICE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Customer": {
"firstName": "Taylor",
"lastName": "Morgan",
"email": "[email protected]",
"phone": "+15550456"
},
"Unavailability": {
"startTime": "2025-12-01T14:00:00Z",
"endTime": "2025-12-01T14:30:00Z"
},
"duration": 30
}'If a customer with that email exists, OnSched links to the existing record. Otherwise, a new customer is created.
Using Existing Customer
Reference existing customer by ID:
curl -X POST "https://v3.onsched.com/v3/appointment?..." \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"Customer": {
"id": "existing-customer-uuid"
},
"Unavailability": {...},
"duration": 30
}'This links the appointment to the existing customer without creating a duplicate.
Retrieving Customers
List All Customers
curl "https://v3.onsched.com/v3/customers?limit=50&page=1" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response includes pagination:
{
"data": [
{
"id": "customer-1",
"firstName": "Jamie",
"lastName": "Rodriguez",
"email": "[email protected]"
},
{
"id": "customer-2",
"firstName": "Taylor",
"lastName": "Morgan",
"email": "[email protected]"
}
],
"count": 2,
"limit": 50,
"page": 1
}Get Single Customer
curl https://v3.onsched.com/v3/customer/CUSTOMER_ID \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Includes full details and CustomFields.
Search by Email
curl "https://v3.onsched.com/v3/[email protected]" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Returns matching customer (if exists).
Updating Customers
Use PUT /v3/customer/:id:
curl -X PUT https://v3.onsched.com/v3/customer/CUSTOMER_ID \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "+15550789",
"notificationType": "SMS",
"CustomFields": {
"preferredTime": "mornings",
"newsletter": "true"
}
}'Only include fields you want to change.
Deleting Customers
Customers use soft-delete:
curl -X DELETE https://v3.onsched.com/v3/customer/CUSTOMER_ID \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Deleted customers:
- No longer appear in lists
- Historical appointments remain linked
- Can be restored if needed
Best practice: Disable instead of deleting (disabled: true) to preserve records.
Location Association
Company-Wide Customers
By default, customers are company-scoped:
- Visible to all locations
- Can book at any location
- Shared customer database
Location-Specific Customers
Optionally associate customers with specific locations:
{
"firstName": "Jordan",
"lastName": "Lee",
"email": "[email protected]",
"LocationId": "location-uuid"
}When associated:
- Customer primarily books at that location
- Other locations may or may not see them (depends on configuration)
Useful for:
- Franchises with isolated customer bases
- Privacy requirements
- Multi-brand operations under one company
Notification Preferences
Setting Preferences
{
"notificationType": "EMAIL" // or "SMS", "ALL", "NONE"
}- EMAIL – Send notifications via email
- SMS – Send notifications via SMS
- ALL – Both email and SMS
- NONE – No notifications
See Customer SMS for SMS configuration.
Cascading Notifications
If customer has no preference set:
- Defaults to location's
customerNotificationType - Which defaults to company's
notificationType
Customer preference overrides location/company settings.
Custom Fields
Extend customers with additional data:
{
"firstName": "Alex",
"lastName": "Kim",
"email": "[email protected]",
"CustomFields": {
"membershipTier": "gold",
"birthday": "1990-05-15",
"referralSource": "instagram",
"loyaltyPoints": "1250",
"preferredStylist": "Jamie"
}
}Use CustomFields for:
- Membership information
- Marketing data (referral sources, campaigns)
- Preferences and notes
- Integration identifiers
See Customer Custom Fields for detailed usage.
Appointment History
Retrieve customer's appointments:
curl "https://v3.onsched.com/v3/appointments?CustomerId=CUSTOMER_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Or filter by date range:
curl "https://v3.onsched.com/v3/appointments/filter?\
CustomerId=CUSTOMER_ID&\
startDate=2025-01-01&\
endDate=2025-12-31" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Use appointment history to:
- Track visit frequency
- Identify loyal customers
- Personalize service recommendations
- Calculate lifetime value
Use Cases
Repeat Customers
For returning customers:
- Search by email during checkout
- If found, use existing customer ID
- If not found, create new customer
- Link to appointment
No duplicate records—fast booking.
Guest Checkout
For one-time bookings:
- Create customer inline during appointment creation
- Customer receives confirmation email
- Record exists for potential future bookings
Membership Programs
Store membership data in CustomFields:
{
"CustomFields": {
"membershipId": "MEM-12345",
"membershipLevel": "premium",
"memberSince": "2024-01-15",
"renewalDate": "2025-01-15"
}
}Query and filter members for targeted campaigns.
CRM Integration
Sync customers with external CRM:
{
"CustomFields": {
"salesforceContactId": "003xx000004TmiD",
"hubspotId": "12345",
"lastSyncedAt": "2025-11-25T10:00:00Z"
}
}Maintain bidirectional sync between OnSched and CRM.
Best Practices
Use Email as Unique Identifier
- Email is unique per company
- Check for existing customer by email before creating
- Update phone/name as needed, but email remains key
Capture Phone Numbers
Even if not required:
- Enables SMS notifications
- Backup contact method
- Improves no-show reduction
Set Notification Preferences Early
Ask customers during first booking:
- Email, SMS, or both?
- Store preference to respect communication choices
Keep Custom Fields Organized
Document CustomFields schema:
Field Name | Type | Purpose
------------------|---------|------------------------
membershipTier | string | gold, silver, bronze
birthday | string | YYYY-MM-DD format
loyaltyPoints | string | numeric string
Consistency makes reporting easier.
Respect Disabled Status
If disabled: true:
- Don't allow new bookings
- Consider why they were disabled (payment issues, abuse, request)
- Re-enable only when appropriate
Audit Customer Data
Periodically:
- Remove duplicate entries (same person, different emails)
- Validate contact information
- Clean up test customers
- Update custom fields
Troubleshooting
Can't create customer—email exists
Cause: Customer with that email already exists.
Solution:
- Retrieve existing customer by email
- Use existing customer ID for appointment
- Or update existing customer record
Notifications not sending to customer
Check:
- Customer has valid email/phone
- Customer's
notificationTypeisn'tNONE - Location has notifications enabled
- Appointment creation didn't specify
skip_notifications: true
See Customer SMS for SMS-specific issues.
Customer appearing at wrong location
If customers are location-scoped:
- Verify
LocationIdon customer record - Check if other locations can access location-scoped customers
- Use company-wide customers for multi-location access
Duplicate customers
If same person has multiple records:
- Caused by different emails or manual creation
- Merge manually (update appointments to correct customer, delete duplicate)
- Prevent by searching before creating
Common Questions
Can customers create their own accounts?
Depends on your implementation:
- OnSched doesn't provide customer-facing signup UI
- Build customer portal using API
- Or create customers on-the-fly during booking
Can one customer have multiple emails?
No. Email is unique per customer in a company. If customer changes email:
curl -X PUT https://v3.onsched.com/v3/customer/CUSTOMER_ID \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]"
}'Can customers book at multiple locations?
Yes, if customers are company-scoped (not associated with specific location). They can book appointments at any location under the company.
How do I export customer list?
curl "https://v3.onsched.com/v3/customers?limit=1000" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" > customers.jsonProcess exported JSON in your CRM or analytics tool.
Can I import customers from another system?
Yes, use POST /v3/customer for each customer. Consider:
- Bulk import script
- Rate limiting (don't overwhelm API)
- Data validation before import
- Mapping old IDs to new UUIDs
Related Documentation
- Customer Custom Fields – Extending customer data
- Customer SMS – SMS notification configuration
- Appointments – Booking with customers
- Notifications – Notification system overview
Customers are the foundation of your booking system. Maintain accurate records, respect preferences, and use custom fields to tailor OnSched to your customer relationship needs.
Updated 4 days ago
