Create Reservation
curl --request POST \
--url https://ipos.dev.nowbookit.com/Reservations \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"numOfPeople": 1073741824,
"time": "<string>",
"bookingTimeAsUtc": "<string>",
"bookingId": "<string>",
"serviceId": "<string>",
"sectionId": "<string>",
"customer": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"email": "<string>",
"phone": "<string>",
"address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postalCode": "<string>",
"country": "<string>"
}
},
"notes": "<string>",
"tables": [
"<string>"
],
"links": [
{
"linkName": "<string>",
"linkURL": "<string>"
}
],
"status": "<string>",
"duration": 123,
"staffId": "<string>",
"staffName": "<string>"
}
'import requests
url = "https://ipos.dev.nowbookit.com/Reservations"
payload = {
"numOfPeople": 1073741824,
"time": "<string>",
"bookingTimeAsUtc": "<string>",
"bookingId": "<string>",
"serviceId": "<string>",
"sectionId": "<string>",
"customer": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"email": "<string>",
"phone": "<string>",
"address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postalCode": "<string>",
"country": "<string>"
}
},
"notes": "<string>",
"tables": ["<string>"],
"links": [
{
"linkName": "<string>",
"linkURL": "<string>"
}
],
"status": "<string>",
"duration": 123,
"staffId": "<string>",
"staffName": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
numOfPeople: 1073741824,
time: '<string>',
bookingTimeAsUtc: '<string>',
bookingId: '<string>',
serviceId: '<string>',
sectionId: '<string>',
customer: {
id: '<string>',
firstName: '<string>',
lastName: '<string>',
company: '<string>',
email: '<string>',
phone: '<string>',
address: {
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postalCode: '<string>',
country: '<string>'
}
},
notes: '<string>',
tables: ['<string>'],
links: [{linkName: '<string>', linkURL: '<string>'}],
status: '<string>',
duration: 123,
staffId: '<string>',
staffName: '<string>'
})
};
fetch('https://ipos.dev.nowbookit.com/Reservations', 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://ipos.dev.nowbookit.com/Reservations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'numOfPeople' => 1073741824,
'time' => '<string>',
'bookingTimeAsUtc' => '<string>',
'bookingId' => '<string>',
'serviceId' => '<string>',
'sectionId' => '<string>',
'customer' => [
'id' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'company' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'address' => [
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postalCode' => '<string>',
'country' => '<string>'
]
],
'notes' => '<string>',
'tables' => [
'<string>'
],
'links' => [
[
'linkName' => '<string>',
'linkURL' => '<string>'
]
],
'status' => '<string>',
'duration' => 123,
'staffId' => '<string>',
'staffName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://ipos.dev.nowbookit.com/Reservations"
payload := strings.NewReader("{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.post("https://ipos.dev.nowbookit.com/Reservations")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ipos.dev.nowbookit.com/Reservations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"bookingId": "<string>",
"time": "2023-11-07T05:31:56Z",
"numOfPeople": 123,
"bookingStatus": "<string>",
"duration": 123,
"tableNames": [
"<string>"
],
"serviceId": "<string>",
"serviceName": "<string>",
"sectionId": "<string>",
"isSuccess": true,
"errorMessage": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Reservations
POST /Reservations
Create a schedule-validated reservation in NowBookIt from an external system such as a POS.
POST
/
Reservations
Create Reservation
curl --request POST \
--url https://ipos.dev.nowbookit.com/Reservations \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"numOfPeople": 1073741824,
"time": "<string>",
"bookingTimeAsUtc": "<string>",
"bookingId": "<string>",
"serviceId": "<string>",
"sectionId": "<string>",
"customer": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"email": "<string>",
"phone": "<string>",
"address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postalCode": "<string>",
"country": "<string>"
}
},
"notes": "<string>",
"tables": [
"<string>"
],
"links": [
{
"linkName": "<string>",
"linkURL": "<string>"
}
],
"status": "<string>",
"duration": 123,
"staffId": "<string>",
"staffName": "<string>"
}
'import requests
url = "https://ipos.dev.nowbookit.com/Reservations"
payload = {
"numOfPeople": 1073741824,
"time": "<string>",
"bookingTimeAsUtc": "<string>",
"bookingId": "<string>",
"serviceId": "<string>",
"sectionId": "<string>",
"customer": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"company": "<string>",
"email": "<string>",
"phone": "<string>",
"address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postalCode": "<string>",
"country": "<string>"
}
},
"notes": "<string>",
"tables": ["<string>"],
"links": [
{
"linkName": "<string>",
"linkURL": "<string>"
}
],
"status": "<string>",
"duration": 123,
"staffId": "<string>",
"staffName": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
numOfPeople: 1073741824,
time: '<string>',
bookingTimeAsUtc: '<string>',
bookingId: '<string>',
serviceId: '<string>',
sectionId: '<string>',
customer: {
id: '<string>',
firstName: '<string>',
lastName: '<string>',
company: '<string>',
email: '<string>',
phone: '<string>',
address: {
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postalCode: '<string>',
country: '<string>'
}
},
notes: '<string>',
tables: ['<string>'],
links: [{linkName: '<string>', linkURL: '<string>'}],
status: '<string>',
duration: 123,
staffId: '<string>',
staffName: '<string>'
})
};
fetch('https://ipos.dev.nowbookit.com/Reservations', 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://ipos.dev.nowbookit.com/Reservations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'numOfPeople' => 1073741824,
'time' => '<string>',
'bookingTimeAsUtc' => '<string>',
'bookingId' => '<string>',
'serviceId' => '<string>',
'sectionId' => '<string>',
'customer' => [
'id' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'company' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'address' => [
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postalCode' => '<string>',
'country' => '<string>'
]
],
'notes' => '<string>',
'tables' => [
'<string>'
],
'links' => [
[
'linkName' => '<string>',
'linkURL' => '<string>'
]
],
'status' => '<string>',
'duration' => 123,
'staffId' => '<string>',
'staffName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://ipos.dev.nowbookit.com/Reservations"
payload := strings.NewReader("{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.post("https://ipos.dev.nowbookit.com/Reservations")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ipos.dev.nowbookit.com/Reservations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"numOfPeople\": 1073741824,\n \"time\": \"<string>\",\n \"bookingTimeAsUtc\": \"<string>\",\n \"bookingId\": \"<string>\",\n \"serviceId\": \"<string>\",\n \"sectionId\": \"<string>\",\n \"customer\": {\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"company\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postalCode\": \"<string>\",\n \"country\": \"<string>\"\n }\n },\n \"notes\": \"<string>\",\n \"tables\": [\n \"<string>\"\n ],\n \"links\": [\n {\n \"linkName\": \"<string>\",\n \"linkURL\": \"<string>\"\n }\n ],\n \"status\": \"<string>\",\n \"duration\": 123,\n \"staffId\": \"<string>\",\n \"staffName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"bookingId": "<string>",
"time": "2023-11-07T05:31:56Z",
"numOfPeople": 123,
"bookingStatus": "<string>",
"duration": 123,
"tableNames": [
"<string>"
],
"serviceId": "<string>",
"serviceName": "<string>",
"sectionId": "<string>",
"isSuccess": true,
"errorMessage": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"errors": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Create a reservation in NowBookIt from your POS or external system. Use this endpoint when a customer has made a pre-booked reservation — it validates against NowBookIt’s live schedule and the booking appears in the diary exactly as it would if the customer had booked online.
For walk-ins, use
Booking vs Reservation
POST /Bookings instead — that endpoint seats guests immediately without enforcing availability rules.
Call
GET /Bookings/schedule first to retrieve available services for the desired time and pax. The serviceId from that response is required here.| POST /Bookings | POST /Reservations | |
|---|---|---|
| NBI backend path | bookings/new (walk-in) | bookings (online booking) |
| Treated as | Walk-in | Online reservation |
| Schedule/availability enforcement | No — service is resolved if serviceId is provided but availability and capacity rules are not enforced. Booking is created regardless. | Yes — service must exist and have open availability for the requested time and pax |
serviceId | Optional | Required |
sectionId | Optional | Required |
| Customer | Optional (defaults to “Walkins”) | Required (firstName, lastName, phone) |
| Use case | POS walk-ins | Pre-booked reservations |
string
required
Your API key
string
required
Must be
application/jsoninteger
required
Number of guests (minimum 1)
string
required
NowBookIt service ID. Retrieve from
GET /Bookings/schedule for the target date and pax.string
required
NowBookIt section ID
object
required
Customer details.
firstName, lastName, and phone are required.string
UTC datetime. Takes precedence over
time. Format: yyyy-MM-ddTHH:mm:ssZstring
Venue local datetime. Ignored if
bookingTimeAsUtc is present. Format: yyyy-MM-dd HH:mmstring
Booking status. Must be a valid status from
GET /resources/booking-statuses. Defaults to Unconfirmed.string
External booking ID from your system
string
Booking notes visible in NowBookIt
integer
Duration in minutes. Overrides the service default.
string
Staff member ID
string
Staff member name
array
NowBookIt table IDs. Retrieve from
GET /Bookings/tables.array
Additional links:
[{ linkName, linkURL }]curl --location '[BASE_URL]/Reservations' \
--header 'X-API-KEY: your_api_key_here' \
--header 'Content-Type: application/json' \
--data '{
"bookingTimeAsUtc": "2024-03-20T19:00:00Z",
"numOfPeople": 4,
"serviceId": "svc-101",
"sectionId": "sec-1",
"customer": {
"firstName": "Jane",
"lastName": "Smith",
"phone": "+61412345678",
"email": "[email protected]"
},
"notes": "Anniversary dinner, window table preferred",
"duration": 90
}'
| Status | Description |
|---|---|
201 | Reservation created |
400 | No Venue Subscribed to your App. |
400 | Invalid booking status {status} — query GET /resources/booking-statuses for valid values |
400 | No service available for booking time '{bookingTime}' and Pax '{numOfPeople}' — no schedule match |
400 | Invalid Service '{serviceId}' — serviceId not in available schedule |
400 | Invalid Booking Time passed in the payload. |
400 | A reservation request must contain 'ServiceId' |
400 | A reservation request must contain 'SectionId' |
400 | Customer FirstName, LastName and Phone are required. |
401 | X-API-KEY missing or invalid |
500 | An error occurred. Unable to create new reservation. |
Authorizations
Headers
API Key authentication header
Body
application/json
The number of guests on booking.
Required range:
1 <= x <= 2147483647Booking Date and time in Venue's Timezone. Valid Format: 'yyyy-MM-dd HH:mm'
Booking Date and time in UTC Timezone. Valid Format: 'yyyy-MM-ddTHH:mm:ssZ'
Show child attributes
Show child attributes
Nominate NBI Table Ids for this Booking.
Show child attributes
Show child attributes
The Booking duration in Minutes.
Response
Create new Reservation from API
The new NBI Booking Id.
The Booking Date and Time.
⌘I