---
title: "Add an alternative to a proposal"
method: POST
path: "/api/v1/events/{event_id}/proposal_alternatives"
tags: ["Proposals/Confirmed Bookings"]
---

# Add an alternative to a proposal

`POST /api/v1/events/{event_id}/proposal_alternatives`

## Request

- Base URL: `https://api.checkcherry.com`
- URL: `https://api.checkcherry.com/api/v1/events/{event_id}/proposal_alternatives`
- Auth: none declared. Required headers: `Api-Key`

Adds an alternative to a proposal, built around one package, and returns the new alternative. Alternatives are the options a client chooses between: each one holds its own packages and price, and the client books one of them.

The first call on a proposal creates **two** alternatives, not one. The packages already on the proposal move into an alternative of their own, and the new package goes into a second. After that, each call adds one more.

To put more packages in an alternative, add them with `POST /api/v1/events/{event_id}/event_bookings` and pass its `proposal_alternative_id`. To start from a copy of an existing alternative, use `POST /api/v1/events/{event_id}/proposal_alternatives/{id}/duplicate` instead.

Adding an alternative resets any custom payment plan on the proposal.

Only `event_type_id` and `starts_at_date` are always needed. Whether the rest apply depends on how the package is sold, which `GET /api/v1/packages/{id}` tells you.

**Required permission:** `assigned_event_write` (when the authenticated user is assigned to the event) or `unassigned_event_write` (otherwise), together with the matching read permission for the event itself.

## Path parameters

- `event_id` integer, required

## Headers

- `Api-Key` string, required

## Request body

- object
  - `event_type_id` string, required: Package ID, from `GET /api/v1/packages`. Send the literal `custom` to build the alternative around a one-off package instead, alongside `one_off_custom_title`. A one-off package is added with no base price.
  - `starts_at_date` string, required: Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting.
  - `starts_at_time` string: Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time.
  - `length_in_minutes` integer: Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise the package's own length is used.
  - `length_in_days` integer: Length in days, from 1 to 1000. Required for date-only packages that let extra days be booked.
  - `units` integer: Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`.
  - `package_unit_range_id` integer: Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`.
  - `one_off_custom_title` string: Title for a one-off package. Required when `event_type_id` is `custom`.
  - `custom_description_html` string: Description for a one-off package. Accepts HTML.

## Response `200`

alternative added

## Other responses

- `403`: read-only key
- `422`: no package given

---

[API](https://skmtc.dev/checkcherry/apis/check-cherry-business-api.md) · [All operations](https://skmtc.dev/checkcherry/apis/check-cherry-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/checkcherry/apis/check-cherry-business-api/revisions/84a9aabdf519?raw)
