---
title: "Add a package to a proposal or booking"
method: POST
path: "/api/v1/events/{event_id}/event_bookings"
tags: ["Proposals/Confirmed Bookings"]
---

# Add a package to a proposal or booking

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

## Request

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

Adds a package to an existing proposal or confirmed booking, and returns the event booking it created. The package's own add-ons are copied onto it, pricing, tax and the event title are recalculated, and the change is recorded in the event's change log.

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: it is scheduled either by date and time or by date alone, and sold by length, by unit count, or by unit range.

**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 add a one-off package instead, alongside `one_off_custom_title`. A one-off package is added with no base price. Any other value is a 422.
  - `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. Any value sent for a date-only package must be in range, even when that package fixes its own length. A package scheduled by date and time is always one day.
  - `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}`.
  - `proposal_alternative_id` integer: The alternative to add the package to. Required once a proposal has alternatives, because every package belongs to one of them.
  - `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`

package added

## Other responses

- `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)
