Prerequisites
- Zenoti account with Admin access
- Access to Zenoti Admin > Setup > Apps
- EIP instance with file system access to configure
.env.local
Setup Process
Create a Backend App in Zenoti
Navigate to Zenoti Admin > Setup > Apps and create a new backend application:
- Click Create New App
- Select Backend App as the app type
- Enter application details:
- Name: “Etienne Intelligence Platform”
- Description: “Business intelligence dashboard for wellness analytics”
- Click Generate Credentials
- Application ID (
applicationId) - Secret Key (
secretKey) - API Key (optional, long-lived ~1 year)
Identify Your Data Center
Determine your Zenoti data center region to set the correct base URL:
- US:
https://api.zenoti.com - EU:
https://api.zenoti.eu - AU:
https://api.zenoti.com.au
Configure Environment Variables
Copy the Edit
.env.example file to .env.local in your EIP project root:.env.local with your Zenoti credentials:Verify Configuration
The integration client reads these environment variables automatically:Restart your development server to load the new environment variables:
Test the Connection
Use the built-in connection test hook to verify credentials:A successful response will return:
Configure Permissions (Optional)
In Zenoti Admin, configure API permissions for your backend app:Recommended permissions for EIP:
- Centers: Read
- Services: Read
- Appointments: Read
- Guests: Read
- Invoices: Read
- Employees: Read
- Reports: Read
EIP only requires read-only access. Never grant write permissions unless specifically needed.
Authentication Methods
The integration supports two authentication strategies:API Key (Recommended)
- Lifetime: ~1 year
- Use case: Server-to-server integration (EIP)
- Header format:
Authorization: <API_KEY> - Configuration: Set
VITE_ZENOTI_API_KEYin.env.local
Bearer Token (OAuth-style)
- Lifetime: 24 hours (auto-refreshed at 90% expiry)
- Use case: User-scoped access with employee credentials
- Header format:
Authorization: bearer <ACCESS_TOKEN> - Configuration: Set
VITE_ZENOTI_APP_ID,VITE_ZENOTI_SECRET_KEY,VITE_ZENOTI_ACCOUNT_NAME
Troubleshooting
”Token request failed (401)”
Cause: Invalid Application ID, Secret Key, or Account Name. Solution:- Verify credentials in Zenoti Admin > Setup > Apps
- Ensure
VITE_ZENOTI_ACCOUNT_NAMEmatches your Zenoti organization name exactly - Regenerate credentials if necessary
”Request failed (403)”
Cause: Insufficient permissions for the backend app. Solution:- Go to Zenoti Admin > Setup > Apps > [Your App]
- Verify API permissions include Centers (Read)
- Wait 2-5 minutes for permission changes to propagate
”Base URL not reachable”
Cause: Wrong data center URL. Solution:- Verify your data center region (US/EU/AU)
- Update
VITE_ZENOTI_BASE_URLto match:- US:
https://api.zenoti.com - EU:
https://api.zenoti.eu - AU:
https://api.zenoti.com.au
- US:
”Rate limit exceeded (429)”
Cause: Too many requests in a short time window. Solution: The client automatically retries with exponential backoff. If you see this error frequently:- Increase React Query
staleTimeto reduce fetch frequency - Implement request batching for bulk operations
- Contact Zenoti to increase rate limits if needed
Next Steps
Authentication
Deep dive into API keys, bearer tokens, and security best practices
Integration Overview
Learn about available endpoints and data mapping