Skip to main content
The Opencals Storefront API is a REST booking API for developers. It exposes everything a booking website needs — services, real-time availability, staff members, locations, carts, checkout, and payments — so you can build a fully custom booking experience on any stack while Opencals handles scheduling logic, conflict prevention, and order management behind the scenes. Every screen in the Opencals dashboard has a programmatic equivalent. If you can configure it in Opencals, you can read it over the API.

Base URL

All Storefront API endpoints live under a single base URL:
https://api.opencals.com
Endpoint paths are prefixed with /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

  1. Sign up at opencals.com and set up your store — services, staff members, locations, and schedules.
  2. In the dashboard, go to Settings → API Keys and create a new Storefront API Key.
  3. Each key is scoped to your store and starts with sfk_.
Keep the key server-side (for example in an environment variable). It identifies your store and should never be shipped to the browser.
2

List your services

List your store’s active services with a single call:
curl "https://api.opencals.com/storefront/products" \
  -H "X-Api-Key: sfk_your_key_here"
3

Read the response

The response is a paginated collection:
{
  "data": [
    {
      "id": "9c6f7c2e-…",
      "title": "Haircut",
      "duration": 3600,
      "price": 4500,
      "maxAttendees": 1
    }
  ],
  "meta": {
    "page": 1,
    "take": 50,
    "itemCount": 12,
    "pageCount": 1,
    "hasPreviousPage": false,
    "hasNextPage": false
  }
}
You can also try every endpoint directly in the interactive API reference.

Pagination

List endpoints accept page (1-indexed) and take (items per page, maximum 100) query parameters and return a meta object with page, take, itemCount, pageCount, hasPreviousPage, and hasNextPage.
curl "https://api.opencals.com/storefront/products" \
  -H "X-Api-Key: sfk_your_key_here" \
  --url-query "page=2" \
  --url-query "take=20"

Rate limits

Requests are rate-limited per API key:
CategoryLimit
General100 requests / 60 seconds
Authentication20 requests / 10 seconds
Password reset5 requests / hour
Registration10 requests / minute
When you exceed a limit the API responds with 429 Too Many Requests.

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) so slots come back converted for display, and you should 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.
Last modified on June 13, 2026