---
title: "Create a booking"
method: POST
path: "/bookings.json"
tags: ["Booking Endpoints"]
---

# Create a booking

`POST /bookings.json`

Create a new booking on Jammed as an admin.

This creates a booking in the same way as a staff member would from the admin dashboard.

You must provide **booking_details** with at least a `start_at`, `end_at`, `room_id`, and `price`.

For the customer, you can either:
- Provide a `customer_id` to book for an existing customer
- Provide `customer_details` with `name` and `email` to create a new customer inline

Optionally provide `band_details` with a `name` to associate a group/band, and `extra_ids` to add extras to the booking.

The booking is created with source `manually_added` and platform `api_v2`.

## Headers

- `Authorization` string, required

## Request body

- BookingCreate
  - `booking` BookingCreateBody
    - `booking_details` BookingCreateDetails, required
      - `start_at` string, required — The start time of the booking in ISO8601 format
      - `end_at` string, required — The end time of the booking in ISO8601 format
      - `room_id` integer, required — The ID of the room to book
      - `price` integer, required — The price of the booking in cents/pence/units
    - `customer_id` integer — The ID of an existing customer to make the booking for. If provided, `customer_details` is not required.
    - `customer_details` BookingCreateCustomerDetails — Provide these if creating a booking for a new customer (instead of using customer_id)
      - `name` string, required — The customer's full name
      - `email` string, required — The customer's email address
      - `mobile` string — The customer's mobile phone number
    - `band_details` BookingCreateBandDetails — Provide to create or associate a band/group with the booking
      - `name` string, required — The name of the band/group
    - `band_code` string — The code of an existing band/group to associate with the booking
    - `extra_ids` integer[] — Array of extra IDs to add to the booking
    - `is_recording` boolean — Whether this booking is a recording session
    - `number_expected` integer — The number of people expected for the booking
    - `additional_notes` string — Any additional notes for the booking
    - `send_email` boolean — Whether to send a confirmation email to the customer. Defaults to true

## Response `201`

Booking created

- Booking
  - `group` ShortGroup
    - `name` string, required — The name of the group
    - `code` string, required — The code of the group - used internally by Jammed
    - `number_of_members` integer — The number of members in the group (only present in full group responses)
    - `number` integer, nullable — The number of members in the group (present in customer band responses)
    - `booking_count` integer — The number of bookings for this group
  - `customer` ShortCustomer
    - `name` string, required — The customers given full name
    - `email` string, required — The customers email address
    - `mobile` string — The customers mobile phone number
    - `avatar` string — The customers avatar image URL, if any
    - `reminders_opt_in` boolean — Whether this customer wants to receive reminders
    - `mailing_list_opt_in` boolean — Whether this customer wants to be on the mailing list
  - `room` ShortRoom
    - `name` string, required — The name of the room
    - `code` string, required — The code of the room - used internally by Jammed
  - `extras` ShortExtra[] — The addons/extras added to the booking
    - `name` string, required — The name of the extra
    - `category` string — The category of the extra
  - `custom_answers` BookingCustomAnswer[] — The responses to custom questions added to the booking
    - `question_id` integer — The ID of the question that was asked
    - `name` string — The name of the question
    - `response` string — The response/answer to the question
  - `source_data` object — The source metadata of the booking, how and where the booking was made
    - `source` string — The source of the booking: app, online, regular_booking etc.
    - `platform` string — The platform where the booking was made: booking_form, dashboard, staff_section, calendar, app etc.
    - `referrer` string — The referrer - the URL of the booking page
  - `code` string — The code of the booking - seen by customers on the booking page
  - `id` string — Same as code
  - `recording` boolean — Whether the room has been marked as a recording
  - `regular` boolean — Whether the booking is part of a regular booking
  - `online_booking` boolean — Whether the booking was made online by the customer
  - `created_at` integer — Unix timestamp from epoch
  - `updated_at` integer — Unix timestamp from epoch
  - `approved_at` integer — Unix timestamp from epoch - when the booking was approved (if approved)
  - `rejected_at` integer — Unix timestamp from epoch - when the booking was rejected (if rejected)
  - `price` integer — The price of the booking time only in cents/pence/units
  - `price_currency` string — The currency of the price
  - `title` string — The title of the booking - this is generated from the customer and group names
  - `start_at` integer — Unix timestamp from epoch
  - `end_at` integer — Unix timestamp from epoch
  - `duration` integer — The duration of the booking in seconds
  - `duration_hours` number — The duration of the booking in hours, e.g. 1pm-2.30pm = `2.5` hours
  - `duration_full_hours` integer — The duration of the booking in hours, rounded up to each full hour, e.g. 1pm-2.30pm = `3` hours
  - `activity_name` string — The name of the activity the booking is part of - e.g. 'Rehearsal'
  - `dates` string[] — The dates that the booking is part of in local time - given as strings YYYYMMDD format
  - `timezone` string — The timezone of the booking
  - `has_amount_due` boolean — Whether the booking still has an amount due
  - `remaining_amount` integer — The remaining amount due for the booking
  - `cancelled` boolean — Whether the booking has been cancelled
  - `taken_by` string — The name of the staff member who took the booking - if null, the booking was made by the customer themselves

## Other responses

- `401` — Unauthorized - Invalid API key
- `422` — Unprocessable - the booking parameters you provided are invalid

---

[API](https://skmtc.net/jammed-org/apis/jammed-bookings-api.md) · [All operations](https://skmtc.net/jammed-org/apis/jammed-bookings-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/jammed-org/jammed-bookings-api/versions/3fc6a6f91b06/schema)
