curl --request POST \
--url https://api-dev.myrestoo.net/v3/availability/work-days/{date} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Restoo-Account-Id: <restoo-account-id>' \
--header 'Restoo-Partner-Id: <restoo-partner-id>' \
--data '
{
"paxChildren": 0,
"pax": 2,
"status": "CONFIRMED",
"filters": {
"experienceIds": [
1,
2
],
"floorPlanAreaIds": [
1,
2
],
"shiftTypes": [
"LUNCH",
"DINNER"
]
},
"customerUuid": "0199ce9adaab7327bda33ef9f75c123",
"excludeBookingUuid": "50b5571be67b477baa9dead4b290c555",
"promoCode": "promo2x1",
"redemptionCode": "ABC123",
"highChairs": 1,
"strollers": 1
}
'import requests
url = "https://api-dev.myrestoo.net/v3/availability/work-days/{date}"
payload = {
"paxChildren": 0,
"pax": 2,
"status": "CONFIRMED",
"filters": {
"experienceIds": [1, 2],
"floorPlanAreaIds": [1, 2],
"shiftTypes": ["LUNCH", "DINNER"]
},
"customerUuid": "0199ce9adaab7327bda33ef9f75c123",
"excludeBookingUuid": "50b5571be67b477baa9dead4b290c555",
"promoCode": "promo2x1",
"redemptionCode": "ABC123",
"highChairs": 1,
"strollers": 1
}
headers = {
"Restoo-Partner-Id": "<restoo-partner-id>",
"Restoo-Account-Id": "<restoo-account-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Restoo-Partner-Id': '<restoo-partner-id>',
'Restoo-Account-Id': '<restoo-account-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
paxChildren: 0,
pax: 2,
status: 'CONFIRMED',
filters: {
experienceIds: [1, 2],
floorPlanAreaIds: [1, 2],
shiftTypes: ['LUNCH', 'DINNER']
},
customerUuid: '0199ce9adaab7327bda33ef9f75c123',
excludeBookingUuid: '50b5571be67b477baa9dead4b290c555',
promoCode: 'promo2x1',
redemptionCode: 'ABC123',
highChairs: 1,
strollers: 1
})
};
fetch('https://api-dev.myrestoo.net/v3/availability/work-days/{date}', 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://api-dev.myrestoo.net/v3/availability/work-days/{date}",
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([
'paxChildren' => 0,
'pax' => 2,
'status' => 'CONFIRMED',
'filters' => [
'experienceIds' => [
1,
2
],
'floorPlanAreaIds' => [
1,
2
],
'shiftTypes' => [
'LUNCH',
'DINNER'
]
],
'customerUuid' => '0199ce9adaab7327bda33ef9f75c123',
'excludeBookingUuid' => '50b5571be67b477baa9dead4b290c555',
'promoCode' => 'promo2x1',
'redemptionCode' => 'ABC123',
'highChairs' => 1,
'strollers' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Restoo-Account-Id: <restoo-account-id>",
"Restoo-Partner-Id: <restoo-partner-id>"
],
]);
$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://api-dev.myrestoo.net/v3/availability/work-days/{date}"
payload := strings.NewReader("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Restoo-Partner-Id", "<restoo-partner-id>")
req.Header.Add("Restoo-Account-Id", "<restoo-account-id>")
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.post("https://api-dev.myrestoo.net/v3/availability/work-days/{date}")
.header("Restoo-Partner-Id", "<restoo-partner-id>")
.header("Restoo-Account-Id", "<restoo-account-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/availability/work-days/{date}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Restoo-Partner-Id"] = '<restoo-partner-id>'
request["Restoo-Account-Id"] = '<restoo-account-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}"
response = http.request(request)
puts response.read_body{
"metadata": {
"filters": {
"experiences": [
{
"name": "Premium Menu",
"summary": "<p>A 5-course premium tasting menu.</p>",
"description": "<p>Enjoy a 5-course tasting menu crafted by our head chef.</p>",
"detailsUrl": "https://example.com/experiences/premium-menu",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"turnMinutes": 90,
"isTimeLimited": true,
"minBookingSize": 2,
"maxBookingSize": 10,
"minTicketsPerBooking": 1,
"paxPerTicket": 4,
"automaticTicketQuantity": false,
"pricePerTicket": 7500,
"minAdvanceBookingMinutes": 60,
"firstBookingTime": "18:00:00",
"lastBookingTime": "23:00:00",
"groupId": 1,
"floorPlanAreas": ":\n [\n {\n \"id\": 1,\n \"name\": \"Terrace\",\n \"summary\": \"The beautiful terrace of our restaurant.\",\n \"images\": [],\n }\n ]",
"hasAddOns": true,
"currency": "EUR",
"id": 101
}
],
"floorPlanAreas": [
{
"name": "Terrace",
"summary": "<p>The beautiful terrace of our restaurant.</p>",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"id": 101
}
],
"shiftTypes": [
{
"id": "LUNCH",
"name": "Lunch"
}
]
}
},
"promo": {
"name": "Summer Discount 2025",
"id": 101
},
"availability": {
"isAvailable": false,
"outcome": "SHIFT_FULL",
"code": "TENANT_BOOKING_MAX_DATE_NOTICE_EXCEEDED",
"detail": "Bookings cannot be made more than 30 days in advance.",
"fallbackOptions": [
{
"action": "CONTACT",
"isPreferred": true
}
]
},
"accountId": "best-burger",
"shifts": [
{
"availability": {
"isAvailable": false,
"outcome": "SHIFT_FULL",
"code": "TENANT_BOOKING_MAX_DATE_NOTICE_EXCEEDED",
"detail": "Bookings cannot be made more than 30 days in advance.",
"fallbackOptions": [
{
"action": "CONTACT",
"isPreferred": true
}
]
},
"type": {
"id": "LUNCH",
"name": "Lunch"
},
"firstBookingAt": "2025-03-20T20:00:00+02:00",
"lastBookingAt": "2025-03-21T01:00:00+02:00",
"hasExperiences": true,
"hasAddOns": true,
"isExperienceRequired": true
}
],
"workDay": {
"date": "2025-03-20"
}
}{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"code": "BOOKING_IS_NOT_ON_SEATED_GROUP",
"detail": "The booking must be on the seated group status to be ended."
}{
"type": "about:blank",
"title": "Validation Error",
"status": 422,
"code": "VALIDATION_ERROR",
"detail": "The request is not valid.",
"errors": [
{
"parameter": "status",
"reason": "The selected status is invalid."
}
]
}Get Work Day Availability
Retrieves availability for a specific Work Day.
When two or more filters are applied, the response will include only availability that matches at least one valid combination of all the selected parameters.
curl --request POST \
--url https://api-dev.myrestoo.net/v3/availability/work-days/{date} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Restoo-Account-Id: <restoo-account-id>' \
--header 'Restoo-Partner-Id: <restoo-partner-id>' \
--data '
{
"paxChildren": 0,
"pax": 2,
"status": "CONFIRMED",
"filters": {
"experienceIds": [
1,
2
],
"floorPlanAreaIds": [
1,
2
],
"shiftTypes": [
"LUNCH",
"DINNER"
]
},
"customerUuid": "0199ce9adaab7327bda33ef9f75c123",
"excludeBookingUuid": "50b5571be67b477baa9dead4b290c555",
"promoCode": "promo2x1",
"redemptionCode": "ABC123",
"highChairs": 1,
"strollers": 1
}
'import requests
url = "https://api-dev.myrestoo.net/v3/availability/work-days/{date}"
payload = {
"paxChildren": 0,
"pax": 2,
"status": "CONFIRMED",
"filters": {
"experienceIds": [1, 2],
"floorPlanAreaIds": [1, 2],
"shiftTypes": ["LUNCH", "DINNER"]
},
"customerUuid": "0199ce9adaab7327bda33ef9f75c123",
"excludeBookingUuid": "50b5571be67b477baa9dead4b290c555",
"promoCode": "promo2x1",
"redemptionCode": "ABC123",
"highChairs": 1,
"strollers": 1
}
headers = {
"Restoo-Partner-Id": "<restoo-partner-id>",
"Restoo-Account-Id": "<restoo-account-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Restoo-Partner-Id': '<restoo-partner-id>',
'Restoo-Account-Id': '<restoo-account-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
paxChildren: 0,
pax: 2,
status: 'CONFIRMED',
filters: {
experienceIds: [1, 2],
floorPlanAreaIds: [1, 2],
shiftTypes: ['LUNCH', 'DINNER']
},
customerUuid: '0199ce9adaab7327bda33ef9f75c123',
excludeBookingUuid: '50b5571be67b477baa9dead4b290c555',
promoCode: 'promo2x1',
redemptionCode: 'ABC123',
highChairs: 1,
strollers: 1
})
};
fetch('https://api-dev.myrestoo.net/v3/availability/work-days/{date}', 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://api-dev.myrestoo.net/v3/availability/work-days/{date}",
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([
'paxChildren' => 0,
'pax' => 2,
'status' => 'CONFIRMED',
'filters' => [
'experienceIds' => [
1,
2
],
'floorPlanAreaIds' => [
1,
2
],
'shiftTypes' => [
'LUNCH',
'DINNER'
]
],
'customerUuid' => '0199ce9adaab7327bda33ef9f75c123',
'excludeBookingUuid' => '50b5571be67b477baa9dead4b290c555',
'promoCode' => 'promo2x1',
'redemptionCode' => 'ABC123',
'highChairs' => 1,
'strollers' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Restoo-Account-Id: <restoo-account-id>",
"Restoo-Partner-Id: <restoo-partner-id>"
],
]);
$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://api-dev.myrestoo.net/v3/availability/work-days/{date}"
payload := strings.NewReader("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Restoo-Partner-Id", "<restoo-partner-id>")
req.Header.Add("Restoo-Account-Id", "<restoo-account-id>")
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.post("https://api-dev.myrestoo.net/v3/availability/work-days/{date}")
.header("Restoo-Partner-Id", "<restoo-partner-id>")
.header("Restoo-Account-Id", "<restoo-account-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/availability/work-days/{date}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Restoo-Partner-Id"] = '<restoo-partner-id>'
request["Restoo-Account-Id"] = '<restoo-account-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"status\": \"CONFIRMED\",\n \"filters\": {\n \"experienceIds\": [\n 1,\n 2\n ],\n \"floorPlanAreaIds\": [\n 1,\n 2\n ],\n \"shiftTypes\": [\n \"LUNCH\",\n \"DINNER\"\n ]\n },\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\",\n \"excludeBookingUuid\": \"50b5571be67b477baa9dead4b290c555\",\n \"promoCode\": \"promo2x1\",\n \"redemptionCode\": \"ABC123\",\n \"highChairs\": 1,\n \"strollers\": 1\n}"
response = http.request(request)
puts response.read_body{
"metadata": {
"filters": {
"experiences": [
{
"name": "Premium Menu",
"summary": "<p>A 5-course premium tasting menu.</p>",
"description": "<p>Enjoy a 5-course tasting menu crafted by our head chef.</p>",
"detailsUrl": "https://example.com/experiences/premium-menu",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"turnMinutes": 90,
"isTimeLimited": true,
"minBookingSize": 2,
"maxBookingSize": 10,
"minTicketsPerBooking": 1,
"paxPerTicket": 4,
"automaticTicketQuantity": false,
"pricePerTicket": 7500,
"minAdvanceBookingMinutes": 60,
"firstBookingTime": "18:00:00",
"lastBookingTime": "23:00:00",
"groupId": 1,
"floorPlanAreas": ":\n [\n {\n \"id\": 1,\n \"name\": \"Terrace\",\n \"summary\": \"The beautiful terrace of our restaurant.\",\n \"images\": [],\n }\n ]",
"hasAddOns": true,
"currency": "EUR",
"id": 101
}
],
"floorPlanAreas": [
{
"name": "Terrace",
"summary": "<p>The beautiful terrace of our restaurant.</p>",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"id": 101
}
],
"shiftTypes": [
{
"id": "LUNCH",
"name": "Lunch"
}
]
}
},
"promo": {
"name": "Summer Discount 2025",
"id": 101
},
"availability": {
"isAvailable": false,
"outcome": "SHIFT_FULL",
"code": "TENANT_BOOKING_MAX_DATE_NOTICE_EXCEEDED",
"detail": "Bookings cannot be made more than 30 days in advance.",
"fallbackOptions": [
{
"action": "CONTACT",
"isPreferred": true
}
]
},
"accountId": "best-burger",
"shifts": [
{
"availability": {
"isAvailable": false,
"outcome": "SHIFT_FULL",
"code": "TENANT_BOOKING_MAX_DATE_NOTICE_EXCEEDED",
"detail": "Bookings cannot be made more than 30 days in advance.",
"fallbackOptions": [
{
"action": "CONTACT",
"isPreferred": true
}
]
},
"type": {
"id": "LUNCH",
"name": "Lunch"
},
"firstBookingAt": "2025-03-20T20:00:00+02:00",
"lastBookingAt": "2025-03-21T01:00:00+02:00",
"hasExperiences": true,
"hasAddOns": true,
"isExperienceRequired": true
}
],
"workDay": {
"date": "2025-03-20"
}
}{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"code": "BOOKING_IS_NOT_ON_SEATED_GROUP",
"detail": "The booking must be on the seated group status to be ended."
}{
"type": "about:blank",
"title": "Validation Error",
"status": 422,
"code": "VALIDATION_ERROR",
"detail": "The request is not valid.",
"errors": [
{
"parameter": "status",
"reason": "The selected status is invalid."
}
]
}Authorizations
All requests must include the static API Key in the Authorization header using the Bearer scheme.
Headers
Unique identifier of your Partner account (defined by Restoo).
Path Parameters
The date for the availability search in ISO 8601 format (YYYY-MM-DD)
"2025-03-20"
Body
GetWorkDayAvailabilityRequest
Request payload for work day availability query.
The number of children in the Booking. Available only if the Tenant setting for differentiating adults and children is enabled
0 <= x <= 1000
The number of people (or adults, depending on Tenant settings) in the Booking
1 <= x <= 1002
Desired status of the Booking.
This value determines how availability should be evaluated and how the Booking should be handled if created.
CONFIRMED— The Booking should be immediately confirmed.REQUESTED— The Booking requires manual review and confirmation by the venue.PENDING_WAIT_LIST_BOOKING— The customer wishes to join the wait list and may be confirmed if availability becomes available.
Availability requests should initially be performed using the CONFIRMED status.
If no availability is found, alternative statuses may be offered depending on
the availability result and venue configuration.
Not all statuses are available for every availability request
REQUESTED, PENDING_MERCHANT_CONFIRMATION, PENDING_WAIT_LIST_BOOKING, CONFIRMED, WAIT_LIST_WALK_IN, ARRIVED, SEATED, DESSERTS, ACCOUNT_SENT, ACCOUNT_PAID, ATTENDED, CANCELED, NO_SHOW, DECLINED_BY_MERCHANT, DELETED "CONFIRMED"
Filters to apply on the calendar and work day availability requests.
Show child attributes
Show child attributes
The Customer UUID.
Include this field only to associate the request with an existing Customer in Restoo
"0199ce9adaab7327bda33ef9f75c123"
UUID of the Booking to be excluded from the availability search. Required only when updating an existing Booking
"50b5571be67b477baa9dead4b290c555"
The promotion code requested for the reservation
6 - 255"promo2x1"
The alphanumeric code to redeem the purchased Product
6"ABC123"
The number of high chairs requested
x >= 01
The number of strollers requested
x >= 01
Response
GetWorkDayAvailabilityResponse
Response payload representing the availability for a Work Day.
Metadata returned with the work day availability response.
Show child attributes
Show child attributes
The Promo applied during the availability request, if any.
If null, no Promo was applied or no valid Promo was detected.
Show child attributes
Show child attributes
The Availability details for the request.
Show child attributes
Show child attributes
The unique Restoo Account identifier for the Tenant
"best-burger"
Show child attributes
Show child attributes
The Work Day details.
Show child attributes
Show child attributes