Capabilities
The Zenoti integration provides comprehensive read-only access to your business data:Core Data Sync
- Centers (Locations): Retrieve all spa/salon locations with details including address, timezone, currency, and room configurations
- Services: Access service catalogs with pricing, duration, categories, and online booking availability
- Appointments: Sync appointment schedules with status tracking (booked, confirmed, checked-in, completed, no-show, cancelled)
- Guests (Clients): Import client profiles with contact information, loyalty points, visit history, and lifetime value metrics
- Invoices: Pull detailed transaction data including items, payments, taxes, and tips
- Collections: Daily revenue reports broken down by service, product, package, membership, and gift card sales
Analytics & Performance
- Sales Reports: Aggregated revenue metrics with daily breakdowns for dashboard visualizations
- Employee Performance: Track therapist metrics including appointments, revenue, utilization rate, and rebooking rate
- Multi-location Support: Query data across all centers or filter by specific location
Integration Architecture
The integration layer is built with TypeScript and follows a clean architecture pattern:Data Flow
The integration uses React Query for efficient data fetching and caching:Authentication
Client authenticates using API Key (recommended) or Bearer Token (OAuth-style) via
/v1/tokens endpointData Fetching
React Query hooks fetch data from Zenoti API endpoints with automatic retry and rate-limiting
Type Mapping
Mapper functions transform Zenoti response types into EIP domain types for consistent UI rendering
Caching Strategy
- Centers: 30-minute cache (rarely change)
- Appointments/Metrics: 5-minute cache (frequent updates)
- Clients: 10-minute cache (moderate updates)
API Request Example
The core request function handles authentication, query parameters, and error handling:React Query Hooks
Use pre-built hooks for seamless integration with the EIP dashboard:Error Handling
The client includes custom error classes for graceful degradation:Rate Limiting & Retries
The client automatically handles rate limits and transient errors:- Retries: Up to 3 attempts with exponential backoff (1s, 2s, 4s)
- Rate Limit Detection: Automatically retries on HTTP 429 responses
- Retry-After Header: Respects Zenoti’s
Retry-Afterheader when present - Transient Errors: Retries 5xx server errors with backoff
Multi-location Queries
Fetch data across all centers with built-in aggregation helpers:Next Steps
Zenoti Setup
Configure your Zenoti integration with step-by-step instructions
Authentication
Learn about API keys, bearer tokens, and security best practices