---
title: "Add an option to a package item choice"
method: POST
path: "/shop/packages/{packageId}/item-choices/{itemChoiceId}/options"
tags: ["Packages"]
---

# Add an option to a package item choice

`POST /shop/packages/{packageId}/item-choices/{itemChoiceId}/options`

Adds a new `PackageItemChoiceOption` to the parent
`PackageItemChoice`. The body sets the offering the option points
at and any price uplift; the option is appended to the choice's
existing list.

Requires the `SETTINGS_MANAGE` permission on the package's site.

## Request body

- PackageItemChoiceOption
  - `id` string, required — Identifier of the offering this option points at — an `AppointmentType`, `SessionType` or retail `Product`, depending on `item_type`. The guest sees the offering's name and image when picking this option in the storefront.
  - `item_type` string, required — The type of item this option represents.
  - `offering` PackageShopOffering, required
    - `id` string, required — The ID of the offering
    - `categories` object[]
      - `id` string, required — The ID of the category
      - `name` string, required — The name of the category
    - `currency` string, required — The currency code for the price
    - `description` string, required — The name of the offering
    - `discounted_price_from` integer — If set, a discounted 'price from' that applies to the current customer
    - `duration` integer — The duration of the offering in minutes
    - `durations` integer[]
    - `external_id` string, nullable, required — An external identifier for this offering.
    - `has_availability` boolean — Whether there is availability for the offering on the requested date.
    - `image` Media
      - `id` string, uuid, required — Unique identifier of the uploaded media item, returned from `createMedia`. Pass this ID into any field that accepts a media reference (logos, hero images, product images, etc.).
      - `file_name` string, required — Original filename of the uploaded asset, preserved as provided at upload time. Used for display in the media library and as a hint when serving downloads.
      - `mime_type` string, required — The mime type of the media item.
      - `original_url` string, required — The url of the media resource.
      - `size` integer, required — The size of the media item in bytes.
      - `url` string, required — The url of the converted media resource.
    - `max_guests` integer — The maximum guests this offering is for
    - `min_guests` integer — The minimum guests this offering is for
    - `name` string, required — The name of the offering
    - `next_available_date` string, date — The next available date if there is no availability on the given date
    - `price_from` integer — The minimum price of the offering on the given date
    - `price_to` integer — The maximum price of the offering on the given date
    - `type` string — Identifies the type of this model
  - `price_change` integer, nullable, required — A currency amount that this option would increase the package price by.

## Response `201`

A single `PackageItemChoiceOption`.

- object
  - `data` PackageItemChoiceOption, required
    - `id` string, required — Identifier of the offering this option points at — an `AppointmentType`, `SessionType` or retail `Product`, depending on `item_type`. The guest sees the offering's name and image when picking this option in the storefront.
    - `item_type` string, required — The type of item this option represents.
    - `offering` PackageShopOffering, required
      - `id` string, required — The ID of the offering
      - `categories` object[]
        - `id` string, required — The ID of the category
        - `name` string, required — The name of the category
      - `currency` string, required — The currency code for the price
      - `description` string, required — The name of the offering
      - `discounted_price_from` integer — If set, a discounted 'price from' that applies to the current customer
      - `duration` integer — The duration of the offering in minutes
      - `durations` integer[]
      - `external_id` string, nullable, required — An external identifier for this offering.
      - `has_availability` boolean — Whether there is availability for the offering on the requested date.
      - `image` Media
        - `id` string, uuid, required — Unique identifier of the uploaded media item, returned from `createMedia`. Pass this ID into any field that accepts a media reference (logos, hero images, product images, etc.).
        - `file_name` string, required — Original filename of the uploaded asset, preserved as provided at upload time. Used for display in the media library and as a hint when serving downloads.
        - `mime_type` string, required — The mime type of the media item.
        - `original_url` string, required — The url of the media resource.
        - `size` integer, required — The size of the media item in bytes.
        - `url` string, required — The url of the converted media resource.
      - `max_guests` integer — The maximum guests this offering is for
      - `min_guests` integer — The minimum guests this offering is for
      - `name` string, required — The name of the offering
      - `next_available_date` string, date — The next available date if there is no availability on the given date
      - `price_from` integer — The minimum price of the offering on the given date
      - `price_to` integer — The maximum price of the offering on the given date
      - `type` string — Identifies the type of this model
    - `price_change` integer, nullable, required — A currency amount that this option would increase the package price by.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `404` — The resource couldn't be found
- `422` — The request didn't pass validation

---

[API](https://skmtc.dev/try/apis/trybe-api.md) · [All operations](https://skmtc.dev/try/apis/trybe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/try/trybe-api/revisions/f37f92702da5/schema)
