Search Customers
curl --request GET \
--url https://api-dev.myrestoo.net/v3/customers \
--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"
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', 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",
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"
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")
.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")
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 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"
}
]
}{
"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
Search Customers
Searches customers by phone and/or email. At least one parameter is required. Returns all customers matching any of the provided criteria.
GET
/
customers
Search Customers
curl --request GET \
--url https://api-dev.myrestoo.net/v3/customers \
--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"
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', 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",
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"
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")
.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")
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 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"
}
]
}{
"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).
Query Parameters
The customer phone number in E.164 format
Example:
"+34600111222"
The customer email
Example:
"steve.jobs@restoo.me"
Response
Private Customer details.
- PrivateCustomerResponse · object[]
- PublicCustomerResponse · object[]
Show child attributes
Show child attributes