> ## Documentation Index
> Fetch the complete documentation index at: https://opencals.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Add-Ons

> Optional extras attached to any bookable service, selected during the booking flow and paid in one transaction. Storefront SDK v0.3.0.

<Update label="June 13, 2026" tags={["New feature", "SDK v0.3.0"]}>
  ## 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](/docs/changelog/storefront-sdk) and higher (via `AddonService`). Older
  versions do not include add-on methods or types.

  ```bash theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
  # 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](https://opencals.com/features/add-ons) for the
  full overview and use cases.
</Update>
