---
title: "Update a booking"
method: PATCH
path: "/bookings/{id}"
tags: ["Bookings"]
---

# Update a booking

`PATCH /bookings/{id}`

Updates an existing booking. All fields are optional.

You can update any combination of fields independently, or provide a complete replacement for specific sections like arrival windows or customer details.

To update arrival windows, provide either `arrival_window_id` from the schedules endpoint or a custom future ISO 8601 `arrival_window_from`. `arrival_window_to` is optional and defaults to one hour after `arrival_window_from`. Updates can fail if the requested window cannot be reserved.

`customer` is optional and organization-only.

## Request body

- union
  - object — Update booking without changing arrival window
    - `origin` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `destination` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `description` string — Updated description or special instructions for the booking.
    - `photo_urls` string[] — Updated array of photo URLs showing items to be moved. Completely replaces existing photos.
    - `metadata` object — Updated custom metadata object. Merges with existing metadata - provide only the fields you want to change or add.
    - `order_number` string — Updated order number or reference identifier for the booking.
    - `customer` Customer — Customer contact information. Must provide at least email or phone_number (or both).
      - `name` string — Customer's name
      - `email` string, email — Customer's email address
      - `phone_number` string — Customer's phone number in E.164 format
    - `contacts` ContactInput[] — Updated notification contacts. Completely replaces existing contacts; omit to leave unchanged, send [] to clear. Each contact may set `stop_positions` to scope it to specific route stops.
      - `name` string — Contact's name
      - `phone_number` string, required — Contact's phone number in E.164 format
      - `email` string, email — Contact's email address
      - `stop_positions` integer[] — Route positions (0-indexed) this contact applies to. 0 = origin/pickup, last = destination/dropoff, intermediate values = intermediate stops. Omitted or empty applies the contact to all stops. Positions outside the route (negative or >= the number of stops) are rejected with a 400.
  - object — Update booking with pre-selected arrival window
    - `origin` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `destination` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `description` string — Updated description or special instructions for the booking.
    - `arrival_window_id` string, required — Pre-selected arrival window ID from the schedule endpoint. Use this to change to a scheduled time slot. Cannot be used together with arrival_window_from/to. Update can fail if the window cannot be reserved.
    - `photo_urls` string[] — Updated array of photo URLs showing items to be moved. Completely replaces existing photos.
    - `metadata` object — Updated custom metadata object. Merges with existing metadata - provide only the fields you want to change or add.
    - `order_number` string — Updated order number or reference identifier for the booking.
    - `customer` Customer — Customer contact information. Must provide at least email or phone_number (or both).
      - `name` string — Customer's name
      - `email` string, email — Customer's email address
      - `phone_number` string — Customer's phone number in E.164 format
    - `contacts` ContactInput[] — Updated notification contacts. Completely replaces existing contacts; omit to leave unchanged, send [] to clear. Each contact may set `stop_positions` to scope it to specific route stops.
      - `name` string — Contact's name
      - `phone_number` string, required — Contact's phone number in E.164 format
      - `email` string, email — Contact's email address
      - `stop_positions` integer[] — Route positions (0-indexed) this contact applies to. 0 = origin/pickup, last = destination/dropoff, intermediate values = intermediate stops. Omitted or empty applies the contact to all stops. Positions outside the route (negative or >= the number of stops) are rejected with a 400.
  - object — Update booking with custom arrival window
    - `origin` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `destination` union
      - string, uuid — Location UUID from a previously created location
      - number[] — Coordinates as [longitude, latitude] in decimal degrees
      - string — Free-form address string (street address, business name, or place)
    - `description` string — Updated description or special instructions for the booking.
    - `arrival_window_from` string, date-time, required — Custom future arrival window start time (ISO 8601). Use this to change to a flexible time window. Cannot be used together with arrival_window_id.
    - `arrival_window_to` string, date-time — Custom future arrival window end time (ISO 8601). Optional - defaults to 1 hour after arrival_window_from if not provided.
    - `photo_urls` string[] — Updated array of photo URLs showing items to be moved. Completely replaces existing photos.
    - `metadata` object — Updated custom metadata object. Merges with existing metadata - provide only the fields you want to change or add.
    - `order_number` string — Updated order number or reference identifier for the booking.
    - `customer` Customer — Customer contact information. Must provide at least email or phone_number (or both).
      - `name` string — Customer's name
      - `email` string, email — Customer's email address
      - `phone_number` string — Customer's phone number in E.164 format
    - `contacts` ContactInput[] — Updated notification contacts. Completely replaces existing contacts; omit to leave unchanged, send [] to clear. Each contact may set `stop_positions` to scope it to specific route stops.
      - `name` string — Contact's name
      - `phone_number` string, required — Contact's phone number in E.164 format
      - `email` string, email — Contact's email address
      - `stop_positions` integer[] — Route positions (0-indexed) this contact applies to. 0 = origin/pickup, last = destination/dropoff, intermediate values = intermediate stops. Omitted or empty applies the contact to all stops. Positions outside the route (negative or >= the number of stops) are rejected with a 400.

## Response `200`

OK

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found

---

[API](https://skmtc.net/lugg/apis/lugg-partner-api.md) · [All operations](https://skmtc.net/lugg/apis/lugg-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lugg/lugg-partner-api/revisions/cdae4166b346/schema)
