curl --request PATCH \
--url https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"partySize": 4
}'import requests
url = "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}"
payload = { "partySize": 4 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({partySize: 4})
};
fetch('https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'partySize' => 4
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}"
payload := strings.NewReader("{\n \"partySize\": 4\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"partySize\": 4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"partySize\": 4\n}"
response = http.request(request)
puts response.read_body{
"id": "booking_2026-09-01_G3F7PA8HO438Z_1787294227662",
"bookingRef": "94227662",
"status": "C",
"statusId": "status_confirmed",
"reservationType": "Booking",
"bookingDateTime": "2026-09-01T18:30:00",
"durationMinutes": 120,
"partySize": 4,
"service": {
"id": "service_dinner",
"name": "Dinner"
},
"diner": {
"id": "customer_9f2a1c",
"firstName": "Alex",
"lastName": "Chen",
"email": "[email protected]",
"phone": "+61400000000"
},
"tableIds": [
"table_12"
],
"requestedSectionId": "section_main",
"paymentDetails": {
"paymentType": "NoPayment",
"currency": "AUD",
"total": 0,
"paid": 0,
"state": "None"
},
"source": "online",
"createdAt": "2026-08-24T04:15:20.104Z",
"updatedAt": "2026-08-28T04:45:00.104Z"
}{
"code": "ValidationError",
"message": "Request body failed validation",
"requestId": "0f1c9f2e-4b8a-4c1e-9d33-2a7f5b1c8e90",
"errors": {
"selectedOptions": [
"Required when partySize changes on a PerPax service"
]
}
}{
"detail": "Reservation not found: booking_2026-09-01_G3F7PA8HO438Z_1787294227662"
}{
"detail": "This venue stops taking changes 2 hour(s) before a reservation starts"
}{
"code": "InternalError",
"message": "Internal server error",
"requestId": "0f1c9f2e-4b8a-4c1e-9d33-2a7f5b1c8e90"
}{
"detail": "Not implemented yet: notes, tagIds"
}Update a Reservation
Change an existing reservation.
curl --request PATCH \
--url https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"partySize": 4
}'import requests
url = "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}"
payload = { "partySize": 4 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({partySize: 4})
};
fetch('https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'partySize' => 4
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}"
payload := strings.NewReader("{\n \"partySize\": 4\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"partySize\": 4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.uat.nowbookit.com/api/reservations/venue/{venueId}/reservation/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"partySize\": 4\n}"
response = http.request(request)
puts response.read_body{
"id": "booking_2026-09-01_G3F7PA8HO438Z_1787294227662",
"bookingRef": "94227662",
"status": "C",
"statusId": "status_confirmed",
"reservationType": "Booking",
"bookingDateTime": "2026-09-01T18:30:00",
"durationMinutes": 120,
"partySize": 4,
"service": {
"id": "service_dinner",
"name": "Dinner"
},
"diner": {
"id": "customer_9f2a1c",
"firstName": "Alex",
"lastName": "Chen",
"email": "[email protected]",
"phone": "+61400000000"
},
"tableIds": [
"table_12"
],
"requestedSectionId": "section_main",
"paymentDetails": {
"paymentType": "NoPayment",
"currency": "AUD",
"total": 0,
"paid": 0,
"state": "None"
},
"source": "online",
"createdAt": "2026-08-24T04:15:20.104Z",
"updatedAt": "2026-08-28T04:45:00.104Z"
}{
"code": "ValidationError",
"message": "Request body failed validation",
"requestId": "0f1c9f2e-4b8a-4c1e-9d33-2a7f5b1c8e90",
"errors": {
"selectedOptions": [
"Required when partySize changes on a PerPax service"
]
}
}{
"detail": "Reservation not found: booking_2026-09-01_G3F7PA8HO438Z_1787294227662"
}{
"detail": "This venue stops taking changes 2 hour(s) before a reservation starts"
}{
"code": "InternalError",
"message": "Internal server error",
"requestId": "0f1c9f2e-4b8a-4c1e-9d33-2a7f5b1c8e90"
}{
"detail": "Not implemented yet: notes, tagIds"
}status takes an id from Reservation Statuses. To cancel, use Cancel a Reservation.Authorizations
Your API key. See Authorization to create one.
Path Parameters
The venue being addressed. Every endpoint on this API is venue-scoped.
1"6247"
The reservation's id — not its bookingRef.
1"booking_2026-08-24_G3F7PA8HO438Z_1787294227662"
Body
Every field is optional and only what is present is changed, but the body must not be empty.
companyName and membershipNumber are accepted but not applied yet — a patch naming either returns 501.
Venue-local wall clock. A different date returns a new reservation — see the description above.
"2026-09-01T19:00:00"
Re-runs table allocation.
1 <= x <= 1000Section to move to. Honoured or refused — there is no fallback to another section.
Service to move to.
1"service_dinner"
Seat the party on this exact table, skipping availability checks. Can produce a double-booked table.
1"table_12"
Guest detail. Updates the reservation's copy, not the linked customer record.
100Guest detail. Updates the reservation's copy, not the linked customer record.
200Guest detail. Updates the reservation's copy, not the linked customer record.
250Guest detail. Updates the reservation's copy, not the linked customer record.
20Accepted but not applied yet — returns 501.
100Accepted but not applied yet — returns 501.
30Replaces the reservation's notes.
1000Replaces the reservation's tags outright rather than merging into them — send the full set you want to end up with. An empty array clears every tag.
201Replaces the reservation's booking options outright rather than merging into them; an empty array clears every option.
Required, not merely accepted, whenever the rest of the patch invalidates what is stored — a partySize change on a PerPax service breaks the rule that main-option quantities total the party, and a localBookingDateAndTime or serviceId change can resolve a different menu entirely. Omitting it then is a 400, because the request is incomplete rather than the venue's state refusing it.
50Show child attributes
Show child attributes
The venue's status id from the reservation-statuses endpoint — e.g. status_confirmed, not the code. Several statuses can share one code, so only the id says which you mean. The accepted values are exactly the ids that venue returns; an id it does not have is a 400. status_cancelled is refused here — use the cancel endpoint.
1"status_confirmed"
Response
The updated reservation. After a date change this is the replacement, with a new id.
A reservation. Absent optional fields are omitted from the JSON rather than sent as null or [].
The identifier that addresses this reservation.
"booking_2026-08-24_G3F7PA8HO438Z_1787294227662"
Venue-local wall clock, ISO formatted. Not an absolute instant.
"2026-08-24T14:00:00"
2
The tables allocated. Empty only for a standby or waitlist entry.
Booking options the guest chose, with the prices that determined what was payable.
Show child attributes
Show child attributes
Where the reservation stands on payment. Always present, including for reservations that take no payment.
Show child attributes
Show child attributes
The reference you quote to a guest. A different identifier from id, and not usable as a path parameter.
"94227662"
The status code the reservation carries, joining onto the reservation-statuses endpoint's code. U unconfirmed, P$ pending payment, C confirmed, X cancelled, NS cancelled no-show, S seated, F finished, SP standby pending, TX SMS sent or SMS failed.
Several statuses can share one code, so treat code as a coarse grouping and statusId as the precise value. Venues can add statuses of their own, so read the venue's own set from the reservation-statuses endpoint rather than assuming this list is closed.
U, P$, C, X, NS, S, F, SP, TX The status's id. Several statuses can share one code, so this is what identifies the status the reservation is in — and the value a patch sets status to.
"status_seated_main"
A standby or waitlist entry is the same kind of record as a confirmed booking.
Booking, WaitList, StandbyList 120
Show child attributes
Show child attributes
Guest details recorded on the reservation.
Show child attributes
Show child attributes
The section the reservation asked for, which is often not where the allocated table sits. Absent when no preference was given.
The reservation this one replaced, set when a reservation was moved to another calendar date. The same id coming back means an ordinary change; a new id with this set means a replacement, and the value names the reservation to stop tracking.
"booking_2026-08-24_G3F7PA8HO438Z_1787294227662"
Originating channel. Read-only — set from your credential when the reservation is created.
"online"
When the reservation was made. An absolute instant, unlike bookingDateTime.