# Opencals Developer Docs > Documentation for the Opencals Storefront API — REST booking API, TypeScript SDK, and open-source booking website templates for building custom booking experiences. ## Docs - [Get an add-on by ID](https://opencals.com/docs/api-reference/add-ons/get-an-add-on-by-id.md) - [Get an add-on by slug](https://opencals.com/docs/api-reference/add-ons/get-an-add-on-by-slug.md) - [List add-ons for the current store](https://opencals.com/docs/api-reference/add-ons/list-add-ons-for-the-current-store.md) - [Add a guest to an appointment](https://opencals.com/docs/api-reference/appointments/add-a-guest-to-an-appointment.md): Adds a guest (by email) to an appointment. Guests are copied on appointment notifications. - [Cancel appointment](https://opencals.com/docs/api-reference/appointments/cancel-appointment.md): Cancels an existing appointment. Subject to cancel_gap restrictions defined in the service configuration. - [Create appointment](https://opencals.com/docs/api-reference/appointments/create-appointment.md): Creates a new appointment for a customer. Authentication is optional - if authenticated, the appointment will be associated with the logged-in user. - [Get appointment by external order name](https://opencals.com/docs/api-reference/appointments/get-appointment-by-external-order-name.md): Returns a single appointment by its external order name. Useful for integrations with external payment or ordering systems. - [Get appointment by ID](https://opencals.com/docs/api-reference/appointments/get-appointment-by-id.md): Returns a single appointment by ID for the authenticated customer - [Get customer booking preferences](https://opencals.com/docs/api-reference/appointments/get-customer-booking-preferences.md): Returns frequently booked services, locations, and staff members based on customer booking history. Results are cached for 24 hours to optimize performance. - [List customer appointments](https://opencals.com/docs/api-reference/appointments/list-customer-appointments.md): Returns all appointments for the authenticated customer with pagination - [Remove a guest from an appointment](https://opencals.com/docs/api-reference/appointments/remove-a-guest-from-an-appointment.md): Removes a guest from an appointment and (by default) notifies them of the removal. - [Reschedule appointment](https://opencals.com/docs/api-reference/appointments/reschedule-appointment.md): Reschedules an existing appointment to a new time. Subject to reschedule_gap restrictions defined in the service configuration. - [Submit appointment feedback](https://opencals.com/docs/api-reference/appointments/submit-appointment-feedback.md): Allows customers to submit feedback for a completed appointment - [Customer OAuth sign in](https://opencals.com/docs/api-reference/auth/customer-oauth-sign-in.md): Authenticate or register a storefront customer using an OAuth provider (e.g. Google) - [Customer sign in with credentials](https://opencals.com/docs/api-reference/auth/customer-sign-in-with-credentials.md): Authenticate a storefront customer using email and password - [Refresh customer tokens](https://opencals.com/docs/api-reference/auth/refresh-customer-tokens.md): Exchange a valid customer refresh token for a new pair of access and refresh tokens - [Register a new customer](https://opencals.com/docs/api-reference/auth/register-a-new-customer.md): Create a new customer account on the storefront and send a verification email - [Request a login code](https://opencals.com/docs/api-reference/auth/request-a-login-code.md): Send a 6-digit login code to the customer email for passwordless authentication - [Request customer email verification](https://opencals.com/docs/api-reference/auth/request-customer-email-verification.md): Send a verification email to the customer for account activation within the store context - [Request customer password reset](https://opencals.com/docs/api-reference/auth/request-customer-password-reset.md): Send a password reset email to the customer within the store context - [Reset customer password](https://opencals.com/docs/api-reference/auth/reset-customer-password.md): Reset the customer password using a valid reset token received via email - [Resolve a magic link token](https://opencals.com/docs/api-reference/auth/resolve-a-magic-link-token.md): Validate a magic link token, authenticate the customer, and return redirect information - [Verify a login code](https://opencals.com/docs/api-reference/auth/verify-a-login-code.md): Verify the 6-digit login code and return auth tokens for passwordless sign-in - [Verify customer email](https://opencals.com/docs/api-reference/auth/verify-customer-email.md): Confirm customer email ownership using the verification token and return auth tokens - [Add an add-on to a cart item](https://opencals.com/docs/api-reference/cart/add-an-add-on-to-a-cart-item.md) - [Add appointment to cart](https://opencals.com/docs/api-reference/cart/add-appointment-to-cart.md) - [Apply a discount/promo code to the cart](https://opencals.com/docs/api-reference/cart/apply-a-discountpromo-code-to-the-cart.md) - [Create or fetch cart](https://opencals.com/docs/api-reference/cart/create-or-fetch-cart.md) - [Extend cart expiration by 5 minutes](https://opencals.com/docs/api-reference/cart/extend-cart-expiration-by-5-minutes.md) - [Fetch cart](https://opencals.com/docs/api-reference/cart/fetch-cart.md) - [Remove a cart add-on item](https://opencals.com/docs/api-reference/cart/remove-a-cart-add-on-item.md) - [Remove cart item](https://opencals.com/docs/api-reference/cart/remove-cart-item.md) - [Remove the applied discount/promo code from the cart](https://opencals.com/docs/api-reference/cart/remove-the-applied-discountpromo-code-from-the-cart.md) - [Update quantity of a cart add-on item](https://opencals.com/docs/api-reference/cart/update-quantity-of-a-cart-add-on-item.md) - [List checkout questions translations for a product](https://opencals.com/docs/api-reference/checkout-questions/list-checkout-questions-translations-for-a-product.md) - [Get all checkout questions for current cart](https://opencals.com/docs/api-reference/checkout/get-all-checkout-questions-for-current-cart.md) - [Save checkout question answers to appointments](https://opencals.com/docs/api-reference/checkout/save-checkout-question-answers-to-appointments.md) - [Save customer information to cart and appointments](https://opencals.com/docs/api-reference/checkout/save-customer-information-to-cart-and-appointments.md) - [Start checkout for cart (create payment, validate items)](https://opencals.com/docs/api-reference/checkout/start-checkout-for-cart-create-payment-validate-items.md) - [Submit checkout (capture payment, create order, auto-authenticate customer)](https://opencals.com/docs/api-reference/checkout/submit-checkout-capture-payment-create-order-auto-authenticate-customer.md): Creates order and returns auth tokens for automatic customer authentication - [Generate a presigned S3 URL for a customer file upload](https://opencals.com/docs/api-reference/customer-uploads/generate-a-presigned-s3-url-for-a-customer-file-upload.md) - [List feedback questions translations](https://opencals.com/docs/api-reference/feedback-questions/list-feedback-questions-translations.md) - [Get image by ID](https://opencals.com/docs/api-reference/images/get-image-by-id.md) - [API Reference](https://opencals.com/docs/api-reference/introduction.md): Base URL, authentication, and conventions for the Opencals Storefront API — plus an interactive playground for every endpoint. - [List invoices issued for the authenticated customer order](https://opencals.com/docs/api-reference/invoices/list-invoices-issued-for-the-authenticated-customer-order.md) - [Get location by ID](https://opencals.com/docs/api-reference/locations/get-location-by-id.md): Retrieve a location by its internal ID for current store - [Get location by slug](https://opencals.com/docs/api-reference/locations/get-location-by-slug.md): Retrieve a location by its URL-friendly slug for current store - [List store locations](https://opencals.com/docs/api-reference/locations/list-store-locations.md): Retrieve a paginated list of locations for the current store - [Get order by ID](https://opencals.com/docs/api-reference/orders/get-order-by-id.md): Returns a single order by ID for the authenticated customer - [List customer orders](https://opencals.com/docs/api-reference/orders/list-customer-orders.md): Returns all orders for the authenticated customer with pagination - [Get available payment providers for checkout](https://opencals.com/docs/api-reference/payment/get-available-payment-providers-for-checkout.md): Returns the list of active, eligible payment providers configured for this store. Only providers that are properly configured and enabled will be returned. - [Get public payment settings](https://opencals.com/docs/api-reference/payment/get-public-payment-settings.md): Returns public payment configuration like currency and capture method. - [Get product collection by slug](https://opencals.com/docs/api-reference/product-collections/get-product-collection-by-slug.md): Retrieve a product collection by its URL-friendly slug for the current store - [List store product collections](https://opencals.com/docs/api-reference/product-collections/list-store-product-collections.md): Retrieve a paginated list of product collections for the current store - [Get a product by external variant ID](https://opencals.com/docs/api-reference/products/get-a-product-by-external-variant-id.md): Retrieve a product by its external variant ID (e.g., Shopify variant ID) for the current store - [Get current availabilities for a product](https://opencals.com/docs/api-reference/products/get-current-availabilities-for-a-product.md): Retrieve individual bookable time slots for a product on a given date. - [Get merged availability ranges for a product](https://opencals.com/docs/api-reference/products/get-merged-availability-ranges-for-a-product.md): Retrieve merged availability ranges (broad time windows) for a product. Useful for calendar date highlighting. - [Get product by ID](https://opencals.com/docs/api-reference/products/get-product-by-id.md): Retrieve a product by its internal ID for the current store - [Get product by slug](https://opencals.com/docs/api-reference/products/get-product-by-slug.md): Retrieve a product by its URL-friendly slug for the current store - [Get products by external ID](https://opencals.com/docs/api-reference/products/get-products-by-external-id.md): Retrieve products by their external platform ID (e.g., Shopify product ID) for the current store - [Get the nearest available slot for a product](https://opencals.com/docs/api-reference/products/get-the-nearest-available-slot-for-a-product.md): Find the nearest upcoming availability slot for a product. Returns null/204 if no slot exists within the advance schedule window. - [List available add-ons for a product](https://opencals.com/docs/api-reference/products/list-available-add-ons-for-a-product.md): Returns active add-ons available for the given product, filtered by location and staff member assignments. - [List available add-ons for a product by slug](https://opencals.com/docs/api-reference/products/list-available-add-ons-for-a-product-by-slug.md): Returns active add-ons available for the given product slug, filtered by location and staff member assignments. - [List store products](https://opencals.com/docs/api-reference/products/list-store-products.md): Retrieve a paginated list of active products for the current store, for the current store - [Change current customer password](https://opencals.com/docs/api-reference/self-service/change-current-customer-password.md) - [Get current customer profile](https://opencals.com/docs/api-reference/self-service/get-current-customer-profile.md) - [Update current customer profile](https://opencals.com/docs/api-reference/self-service/update-current-customer-profile.md) - [Get staff member by slug](https://opencals.com/docs/api-reference/staff-members/get-staff-member-by-slug.md): Retrieve a staff member by their URL-friendly slug for current store - [List store staff members](https://opencals.com/docs/api-reference/staff-members/list-store-staff-members.md): Retrieve a paginated list of staff members for the current store - [Get store public settings](https://opencals.com/docs/api-reference/store/get-store-public-settings.md) - [Authentication](https://opencals.com/docs/authentication.md): How authentication works in the Opencals Storefront API: Storefront API keys, customer JWT tokens, refresh flows, and error responses. - [Changelog](https://opencals.com/docs/changelog.md): What's new in the Opencals developer platform — Storefront API, TypeScript SDK, open-source templates, and developer docs. - [Add-Ons](https://opencals.com/docs/changelog/add-ons.md): Optional extras attached to any bookable service, selected during the booking flow and paid in one transaction. Storefront SDK v0.3.0. - [Developer docs launched](https://opencals.com/docs/changelog/developer-docs.md): The Opencals developer documentation is live — interactive API reference, quickstart, guides, and open-source templates. - [Discounts](https://opencals.com/docs/changelog/discounts.md): Automatic and promo-code discounts — target by product, staff, location, and schedule, with stacking and usage caps. Storefront SDK v0.3.2. - [Frisor — barbershop template](https://opencals.com/docs/changelog/frisor-template.md): Frisor, a free open-source barbershop booking website template built on the Storefront API — Next.js 15, Stripe checkout, add-ons, customer accounts. - [Haar — salon template](https://opencals.com/docs/changelog/haar-template.md): Haar, the first open-source Opencals template — a complete beauty-salon booking website built on the Storefront API. - [Storefront API — v1](https://opencals.com/docs/changelog/storefront-api.md): The Storefront API is publicly available — the full customer-facing booking flow over REST. - [Storefront SDK](https://opencals.com/docs/changelog/storefront-sdk.md): Version history for @opencals/storefront-sdk — the official TypeScript client for the Storefront API. See which release each feature first shipped in. - [Build a booking page](https://opencals.com/docs/guides/build-a-booking-page.md): Step-by-step tutorial: use the Opencals Storefront API with Next.js and the TypeScript SDK to list services, pick a time slot, manage a cart, and complete checkout. - [Customer email links (magic links)](https://opencals.com/docs/guides/customer-email-links.md): Set up passwordless email links for customer actions: view/reschedule/cancel appointments, leave feedback, verify email, and reset passwords. No additional code — just configure one setting and implement one route. - [Storefront SDK](https://opencals.com/docs/guides/storefront-sdk.md): Install and use @opencals/storefront-sdk — the type-safe TypeScript client for the Opencals booking API, generated from the OpenAPI spec with Zod schemas and helpers included. - [Webhooks](https://opencals.com/docs/guides/webhooks.md): The planned Opencals webhook event catalog for booking automations — and how to keep a headless booking site in sync today with polling and revalidation. - [Introduction](https://opencals.com/docs/introduction.md): The Opencals Storefront API is booking infrastructure for builders — a REST API for services, real-time availability, carts, checkout, and payments, so you can build a fully custom booking experience on any stack. - [Frisor — barbershop booking template](https://opencals.com/docs/open-source/frisor.md): Free, open-source barbershop booking website template. Next.js 15, Stripe checkout, staff and multi-location booking, add-ons, customer accounts — built on the Opencals Storefront API. - [Haar — salon booking template](https://opencals.com/docs/open-source/haar.md): Free, open-source beauty salon booking website template. Next.js 15, Stripe checkout, staff and multi-location booking, customer accounts — built on the Opencals Storefront API. - [Open-source templates](https://opencals.com/docs/open-source/templates.md): Free, open-source booking website templates built on the Opencals Storefront API. Clone, customize, and deploy a production booking site in minutes. - [Quickstart](https://opencals.com/docs/quickstart.md): What the Opencals Storefront API is, how to get an API key, and how to make your first request. ## OpenAPI Specs - [openapi](https://opencals.com/docs/api-reference/openapi.json)