Base URL
All Storefront API endpoints live under a single base URL:/storefront — for example GET /storefront/products lists your bookable services. Responses are JSON with camelCase property names.
Make your first request
1
Get an API key
- Sign up at opencals.com and set up your store — services, staff members, locations, and schedules.
- In the dashboard, go to Users → your user → API Keys and create a key. Calling the API from a server? Create a private storefront key (
spk_). For browser code, create a public storefront key (sfk_). - Each key is scoped to your store. See API keys for the difference.
2
List your services
List your store’s active services with a single call:
3
Read the response
The response is a paginated collection:
Pagination
List endpoints acceptpage (1-indexed) and take (items per page, maximum 100) query parameters and return a meta object with page, take, itemCount, pageCount, hasPreviousPage, and hasNextPage.
Rate limits
Limits are per API key and visitor IP, never a total for your store, so a busy site isn’t capped. The visitor IP is the buyer IP your server forwards with a private key (X-Opencals-Buyer-Ip); otherwise it’s the IP the request comes from, which for a server-side site is your server’s, shared by all your visitors.
When you exceed a limit the API responds with
429 Too Many Requests. Back off and retry; the windows are short.
Timezones
All date and time values in requests and responses are in UTC. Availability endpoints accept a
timezone query parameter (for example America/New_York) to return slots in the user’s local timezone. Convert user-selected times back to UTC before creating appointments.Next steps
Authentication
API keys, customer tokens, and error responses.
Build a booking page
The full flow from listing services to a confirmed booking.
Storefront SDK
The typed TypeScript client for this API.
API reference
Every endpoint, parameter, and response shape.