Get Customer Bookings
curl --request GET \
--url https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings \
--header 'Authorization: Bearer <token>' \
--header 'Restoo-Account-Id: <restoo-account-id>' \
--header 'Restoo-Partner-Id: <restoo-partner-id>'import requests
url = "https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings"
headers = {
"Restoo-Partner-Id": "<restoo-partner-id>",
"Restoo-Account-Id": "<restoo-account-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'Restoo-Partner-Id': '<restoo-partner-id>',
'Restoo-Account-Id': '<restoo-account-id>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings', 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/customers/{customerUuid}/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Restoo-Partner-Id", "<restoo-partner-id>")
req.Header.Add("Restoo-Account-Id", "<restoo-account-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings")
.header("Restoo-Partner-Id", "<restoo-partner-id>")
.header("Restoo-Account-Id", "<restoo-account-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Restoo-Partner-Id"] = '<restoo-partner-id>'
request["Restoo-Account-Id"] = '<restoo-account-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"privateNotes": "Customer requested a table near the window.",
"quotedWaitMinutes": 15,
"isWalkIn": true,
"hasFixedTables": false,
"isHighlighted": false,
"channel": "API",
"ticketPartner": "DEFAULT",
"ticketExternalId": "POS-98234",
"ticketTotalAmount": 12500,
"tableReadyAt": "2025-03-20T20:15:00+02:00",
"arrivedAt": "2025-03-20T20:25:00+02:00",
"seatedAt": "2025-03-20T20:30:00+02:00",
"endedAt": "2025-03-20T22:15:00+02:00",
"ip": "192.168.0.25",
"customer": {
"privateNotes": "Customer prefers a table near the terrace.",
"visitFrequency": 30,
"averageOrderAmountPerPax": 4500,
"bookingReputation": 0.85,
"bookingsCount": 25,
"visitsCount": 18,
"cancellationsCount": 3,
"noShowsCount": 2,
"firstVisitAt": "2023-05-10T20:00:00+02:00",
"lastVisitAt": "2025-03-15T21:30:00+02:00",
"firstCancellationAt": "2024-09-12T19:00:00+02:00",
"nextVisitScheduledAt": "2025-04-05T22:00:00+02:00",
"tags": [
{
"id": 1,
"name": "VIP",
"color": "#FF5733"
}
],
"uuid": "50b5571be67b477baa9dead4b290c555",
"email": "steve.jobs@restoo.me",
"phone": "+34600111222",
"birthDate": "1979-03-20",
"postalCode": "28045",
"isVip": true,
"isBusiness": false,
"language": "en",
"acceptsImportantAlerts": true,
"hasGdprConsent": true,
"acceptsMarketing": true,
"country": "ES",
"name": "Steve Jobs"
},
"tables": [
{
"name": "T101",
"floorPlanAreaId": 12,
"posId": "POS-T101",
"id": 101
}
],
"uuid": "50b5571be67b477baa9dead4b290c555",
"bookingAt": "2025-03-20T23:00:00+02:00",
"status": "CONFIRMED",
"isTimeLimited": true,
"customerSpecialRequests": "Table near the window",
"hasAllergies": true,
"allergiesDescription": "Peanuts, shellfish, lactose intolerance",
"specialOccasion": "BIRTHDAY",
"needsAccessibleSeating": true,
"hotelRoom": "Room 305",
"publicNotes": "Your reservation includes a birthday cake.",
"isReconfirmed": true,
"isReconfirmedByCustomer": false,
"cancelReason": "CHANGED_PLANS",
"bookingPartner": "GOOGLE",
"bookingExternalId": "book_123456",
"shiftType": {
"id": "LUNCH",
"name": "Lunch"
},
"floorPlanArea": {
"name": "Terrace",
"id": 101
},
"promo": {
"name": "Summer Discount 2025",
"id": 101
},
"product": {
"orderItemId": 101,
"orderUuid": "50b5571be67b477baa9dead4b290c555",
"currency": "EUR",
"experienceTickets": 1,
"id": 101,
"isGift": true,
"name": "Gift Card",
"quantity": 1,
"taxRate": 1050,
"type": "ITEM",
"unitPrice": 7500
},
"experience": {
"tickets": 1,
"discount": 10.5,
"experienceId": 123,
"name": "Premium Menu",
"pricePerTicket": 7500,
"currency": "EUR",
"id": 101
},
"cancellationPolicy": {
"status": "PENDING_SIGNATURE",
"signDeadlineAt": "2025-03-20T22:00:00+02:00",
"signedAt": "2025-03-20T21:35:10+02:00",
"signedFromIp": "203.0.113.10",
"endedAt": "2025-03-21T23:59:59+02:00",
"endedBy": "GUEST",
"chargeStatus": "SUCCEEDED",
"refundStatus": null,
"type": "GUARANTEE_AUTHORIZATION",
"amount": 2500,
"amountType": "PER_PAX",
"cancellationNoticeHours": 24,
"currency": "EUR",
"cancellationFeeAmount": 5000,
"chargedAmount": 5000,
"guaranteedPax": 2,
"id": 101,
"refundedAmount": 0
},
"addOns": [
{
"addOnId": 123,
"name": "Premium wine tasting",
"unitPrice": 1000,
"currency": "EUR",
"id": 101,
"quantity": 1
}
],
"accountId": "best-burger",
"highChairs": 1,
"paxChildren": 0,
"pax": 2,
"strollers": 1,
"turnMinutes": 90,
"createdAt": "2025-03-20T18:45:00+02:00",
"updatedAt": "2025-03-21T09:30:00+02:00"
}
]
}{
"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."
}
]
}Customer
Get Customer Bookings
Retrieves all bookings associated with a customer.
GET
/
customers
/
{customerUuid}
/
bookings
Get Customer Bookings
curl --request GET \
--url https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings \
--header 'Authorization: Bearer <token>' \
--header 'Restoo-Account-Id: <restoo-account-id>' \
--header 'Restoo-Partner-Id: <restoo-partner-id>'import requests
url = "https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings"
headers = {
"Restoo-Partner-Id": "<restoo-partner-id>",
"Restoo-Account-Id": "<restoo-account-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'Restoo-Partner-Id': '<restoo-partner-id>',
'Restoo-Account-Id': '<restoo-account-id>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings', 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/customers/{customerUuid}/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Restoo-Partner-Id", "<restoo-partner-id>")
req.Header.Add("Restoo-Account-Id", "<restoo-account-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings")
.header("Restoo-Partner-Id", "<restoo-partner-id>")
.header("Restoo-Account-Id", "<restoo-account-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.myrestoo.net/v3/customers/{customerUuid}/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Restoo-Partner-Id"] = '<restoo-partner-id>'
request["Restoo-Account-Id"] = '<restoo-account-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"privateNotes": "Customer requested a table near the window.",
"quotedWaitMinutes": 15,
"isWalkIn": true,
"hasFixedTables": false,
"isHighlighted": false,
"channel": "API",
"ticketPartner": "DEFAULT",
"ticketExternalId": "POS-98234",
"ticketTotalAmount": 12500,
"tableReadyAt": "2025-03-20T20:15:00+02:00",
"arrivedAt": "2025-03-20T20:25:00+02:00",
"seatedAt": "2025-03-20T20:30:00+02:00",
"endedAt": "2025-03-20T22:15:00+02:00",
"ip": "192.168.0.25",
"customer": {
"privateNotes": "Customer prefers a table near the terrace.",
"visitFrequency": 30,
"averageOrderAmountPerPax": 4500,
"bookingReputation": 0.85,
"bookingsCount": 25,
"visitsCount": 18,
"cancellationsCount": 3,
"noShowsCount": 2,
"firstVisitAt": "2023-05-10T20:00:00+02:00",
"lastVisitAt": "2025-03-15T21:30:00+02:00",
"firstCancellationAt": "2024-09-12T19:00:00+02:00",
"nextVisitScheduledAt": "2025-04-05T22:00:00+02:00",
"tags": [
{
"id": 1,
"name": "VIP",
"color": "#FF5733"
}
],
"uuid": "50b5571be67b477baa9dead4b290c555",
"email": "steve.jobs@restoo.me",
"phone": "+34600111222",
"birthDate": "1979-03-20",
"postalCode": "28045",
"isVip": true,
"isBusiness": false,
"language": "en",
"acceptsImportantAlerts": true,
"hasGdprConsent": true,
"acceptsMarketing": true,
"country": "ES",
"name": "Steve Jobs"
},
"tables": [
{
"name": "T101",
"floorPlanAreaId": 12,
"posId": "POS-T101",
"id": 101
}
],
"uuid": "50b5571be67b477baa9dead4b290c555",
"bookingAt": "2025-03-20T23:00:00+02:00",
"status": "CONFIRMED",
"isTimeLimited": true,
"customerSpecialRequests": "Table near the window",
"hasAllergies": true,
"allergiesDescription": "Peanuts, shellfish, lactose intolerance",
"specialOccasion": "BIRTHDAY",
"needsAccessibleSeating": true,
"hotelRoom": "Room 305",
"publicNotes": "Your reservation includes a birthday cake.",
"isReconfirmed": true,
"isReconfirmedByCustomer": false,
"cancelReason": "CHANGED_PLANS",
"bookingPartner": "GOOGLE",
"bookingExternalId": "book_123456",
"shiftType": {
"id": "LUNCH",
"name": "Lunch"
},
"floorPlanArea": {
"name": "Terrace",
"id": 101
},
"promo": {
"name": "Summer Discount 2025",
"id": 101
},
"product": {
"orderItemId": 101,
"orderUuid": "50b5571be67b477baa9dead4b290c555",
"currency": "EUR",
"experienceTickets": 1,
"id": 101,
"isGift": true,
"name": "Gift Card",
"quantity": 1,
"taxRate": 1050,
"type": "ITEM",
"unitPrice": 7500
},
"experience": {
"tickets": 1,
"discount": 10.5,
"experienceId": 123,
"name": "Premium Menu",
"pricePerTicket": 7500,
"currency": "EUR",
"id": 101
},
"cancellationPolicy": {
"status": "PENDING_SIGNATURE",
"signDeadlineAt": "2025-03-20T22:00:00+02:00",
"signedAt": "2025-03-20T21:35:10+02:00",
"signedFromIp": "203.0.113.10",
"endedAt": "2025-03-21T23:59:59+02:00",
"endedBy": "GUEST",
"chargeStatus": "SUCCEEDED",
"refundStatus": null,
"type": "GUARANTEE_AUTHORIZATION",
"amount": 2500,
"amountType": "PER_PAX",
"cancellationNoticeHours": 24,
"currency": "EUR",
"cancellationFeeAmount": 5000,
"chargedAmount": 5000,
"guaranteedPax": 2,
"id": 101,
"refundedAmount": 0
},
"addOns": [
{
"addOnId": 123,
"name": "Premium wine tasting",
"unitPrice": 1000,
"currency": "EUR",
"id": 101,
"quantity": 1
}
],
"accountId": "best-burger",
"highChairs": 1,
"paxChildren": 0,
"pax": 2,
"strollers": 1,
"turnMinutes": 90,
"createdAt": "2025-03-20T18:45:00+02:00",
"updatedAt": "2025-03-21T09:30:00+02:00"
}
]
}{
"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 customer UUID
Example:
"50b5571be67b477baa9dead4b290c555"
Query Parameters
Filter start date in ISO 8601 format (YYYY-MM-DD)
Example:
"2025-01-01"
Filter end date in ISO 8601 format (YYYY-MM-DD). Must be equal to or after date_from
Example:
"2025-12-31"
Response
Full Booking details, including private properties.
- PrivateBookingResponse · object[]
- PublicBookingResponse · object[]
Show child attributes
Show child attributes