Add-Ons — new feature
Service businesses can now attach optional extras to any bookable service.
Customers select add-ons during the booking flow — after picking a service and
time slot, before checkout — and pay the combined total in one transaction.What’s in the release:
GET /storefront/add-ons — list add-ons, filter by productId
GET /storefront/products/:id/add-ons — add-ons for a specific service
POST /storefront/cart/add-ons — add an add-on to a cart item
PATCH /storefront/cart/add-ons/:id — update quantity
DELETE /storefront/cart/add-ons/:id — remove from cart
Key behaviors:
- Add-ons are scoped to products. Only add-ons linked to the booked service appear.
- Two pricing modes: fixed (customer picks quantity) and duration-multiplied (quantity auto-set to the number of duration units, useful for per-day or per-hour charges).
- Prices are snapshotted at cart creation — later catalog changes don’t affect existing orders.
- Add-ons appear in order line items (
OrderAddOnLineItem) and on appointment records (AppointmentAddOn). Partial quantity refunds are supported.
- Works on both
platform='opencals' and platform='shopify'.
SDK support — available in @opencals/storefront-sdk
v0.3.0 and higher (via AddonService). Older
versions do not include add-on methods or types.# List add-ons for a service
curl -H "X-Api-Key: sfk_your_key" \
https://api.opencals.com/storefront/products/{productId}/add-ons
# Add to cart
curl -X POST -H "X-Api-Key: sfk_your_key" \
-H "X-Cart-Id: {cartId}" \
-H "Content-Type: application/json" \
-d '{"cartItemId": "...", "addOnId": "...", "quantity": 1}' \
https://api.opencals.com/storefront/cart/add-ons
See the Add-Ons feature page for the
full overview and use cases.Last modified on June 21, 2026