curl --request POST \
--url https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots \
--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,
"customerUuid": "0199ce9adaab7327bda33ef9f75c123"
}
'import requests
url = "https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots"
payload = {
"paxChildren": 0,
"pax": 2,
"customerUuid": "0199ce9adaab7327bda33ef9f75c123"
}
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, customerUuid: '0199ce9adaab7327bda33ef9f75c123'})
};
fetch('https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots', 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/search/work-days/{date}/shifts/{time}/time-slots",
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,
'customerUuid' => '0199ce9adaab7327bda33ef9f75c123'
]),
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/search/work-days/{date}/shifts/{time}/time-slots"
payload := strings.NewReader("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\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/search/work-days/{date}/shifts/{time}/time-slots")
.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 \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots")
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 \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\n}"
response = http.request(request)
puts response.read_body{
"tenants": [
{
"business": {
"name": "Best Burger",
"phone": "+34910011223",
"whatsapp": "+34910011223",
"email": "contact@bestburger.com",
"websiteUrl": "https://bestburger.com",
"bookingsUrl": "https://best-burger.myrestoo.net",
"menuUrl": "https://bestburger.com/menu",
"groupMenuUrl": "https://bestburger.com/group-menu",
"parkingUrl": "https://bestburger.com/parking",
"address": {
"line1": "Infinite Loop 1",
"line2": "Apt. 4B",
"location": "Apple Campus",
"city": "Cupertino",
"state": "California",
"postalCode": "95014",
"country": "ES"
}
},
"alternatives": [
{
"type": "EXPERIENCES",
"data": {
"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
}
]
},
"floorPlanAreas": [
{
"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
}
]
},
"name": "Terrace",
"summary": "<p>The beautiful terrace of our restaurant.</p>",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"id": 101
}
],
"shift": {
"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
},
"timeSlots": [
{
"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
}
]
},
"startAt": "2025-03-20T20:00:00+02:00",
"isTimeLimited": true,
"strollersAvailable": {
"type": "LIMITED",
"available": 3
},
"highChairsAvailable": {
"type": "LIMITED",
"available": 3
},
"experienceId": 123,
"floorPlanAreaId": 123,
"turnMinutes": 90
}
],
"workDay": {
"date": "2025-03-20"
}
}
}
],
"accountId": "best-burger"
}
]
}{
"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."
}
]
}Search Alternative Tenants Availability
Searches for availability across multiple Tenants belonging to the same cross-selling group. For each tenant in the group, resolves availability based on the tenant’s feature configuration (shift time slots or experiences). Errors encountered while resolving individual tenants are silently reported and the tenant is excluded from the result. Each item includes the alternative type and its corresponding availability data.
curl --request POST \
--url https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots \
--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,
"customerUuid": "0199ce9adaab7327bda33ef9f75c123"
}
'import requests
url = "https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots"
payload = {
"paxChildren": 0,
"pax": 2,
"customerUuid": "0199ce9adaab7327bda33ef9f75c123"
}
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, customerUuid: '0199ce9adaab7327bda33ef9f75c123'})
};
fetch('https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots', 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/search/work-days/{date}/shifts/{time}/time-slots",
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,
'customerUuid' => '0199ce9adaab7327bda33ef9f75c123'
]),
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/search/work-days/{date}/shifts/{time}/time-slots"
payload := strings.NewReader("{\n \"paxChildren\": 0,\n \"pax\": 2,\n \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\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/search/work-days/{date}/shifts/{time}/time-slots")
.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 \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/availability/search/work-days/{date}/shifts/{time}/time-slots")
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 \"customerUuid\": \"0199ce9adaab7327bda33ef9f75c123\"\n}"
response = http.request(request)
puts response.read_body{
"tenants": [
{
"business": {
"name": "Best Burger",
"phone": "+34910011223",
"whatsapp": "+34910011223",
"email": "contact@bestburger.com",
"websiteUrl": "https://bestburger.com",
"bookingsUrl": "https://best-burger.myrestoo.net",
"menuUrl": "https://bestburger.com/menu",
"groupMenuUrl": "https://bestburger.com/group-menu",
"parkingUrl": "https://bestburger.com/parking",
"address": {
"line1": "Infinite Loop 1",
"line2": "Apt. 4B",
"location": "Apple Campus",
"city": "Cupertino",
"state": "California",
"postalCode": "95014",
"country": "ES"
}
},
"alternatives": [
{
"type": "EXPERIENCES",
"data": {
"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
}
]
},
"floorPlanAreas": [
{
"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
}
]
},
"name": "Terrace",
"summary": "<p>The beautiful terrace of our restaurant.</p>",
"images": [
{
"type": "THUMBNAIL",
"url": "https://example.com/assets/image.jpg"
}
],
"id": 101
}
],
"shift": {
"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
},
"timeSlots": [
{
"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
}
]
},
"startAt": "2025-03-20T20:00:00+02:00",
"isTimeLimited": true,
"strollersAvailable": {
"type": "LIMITED",
"available": 3
},
"highChairsAvailable": {
"type": "LIMITED",
"available": 3
},
"experienceId": 123,
"floorPlanAreaId": 123,
"turnMinutes": 90
}
],
"workDay": {
"date": "2025-03-20"
}
}
}
],
"accountId": "best-burger"
}
]
}{
"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"
The time for the availability search in ISO 8601 format (HH:MM:SS)
"22:30:00"
Body
GetTenantsAvailabilityRequest
Request payload for fetching availability across multiple Tenants.
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
The Customer UUID.
Include this field only to associate the request with an existing Customer in Restoo
"0199ce9adaab7327bda33ef9f75c123"
Response
GetTenantsAvailabilityResponse
Response payload containing availability information across multiple Tenants.
Show child attributes
Show child attributes