List quotes
curl --request GET \
--url https://api.bookingshake.io/api/quotes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bookingshake.io/api/quotes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bookingshake.io/api/quotes', 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.bookingshake.io/api/quotes",
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>"
],
]);
$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.bookingshake.io/api/quotes"
req, _ := http.NewRequest("GET", url, nil)
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.bookingshake.io/api/quotes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bookingshake.io/api/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"message": "success",
"data": {
"items": [
{
"id": "<string>",
"number": "<string>",
"status": "draft",
"title": "<string>",
"language": "<string>",
"currency": "<string>",
"created_at": 123,
"service_start_date": "<string>",
"service_end_date": "<string>",
"amount_excl_tax": 123,
"amount_incl_tax": 123,
"taxable_breakdown": {},
"tax_breakdown": {},
"global_discount_excl_tax": 123,
"lines": [
{
"name": "<string>",
"description": "<string>",
"accounting_code": "<string>",
"quantity": "<string>",
"unit": "<string>",
"unit_price_excl_tax": 123,
"discount": 123,
"tax_rate": "<string>",
"total_excl_tax": 123
}
],
"booking_id": "<string>",
"account_id": "<string>",
"contact_id": "<string>",
"seller": {
"id": "<string>",
"legal_name": "<string>",
"company_type": "<string>",
"company_registration_id": "<string>",
"vat_number": "<string>",
"share_capital": "<string>",
"company_other_id": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>",
"iban": "<string>",
"email": "<string>"
},
"account": {
"id": "<string>",
"name": "<string>",
"legal_name": "<string>",
"company_type": "<string>",
"company_registration_id": "<string>",
"siret": "<string>",
"vat_number": "<string>",
"rcs_number": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>",
"billing_address_line_1": "<string>",
"billing_address_line_2": "<string>",
"billing_postal_code": "<string>",
"billing_city": "<string>",
"billing_country": "<string>",
"billing_country_code": "<string>",
"peppol_id": "<string>"
},
"contact": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"landline_phone": "<string>",
"title": "<string>",
"position": "<string>",
"company": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>"
},
"pdf_url": "<string>",
"metadata": {},
"sent_at": 123,
"validated_at": 123,
"canceled_at": 123,
"expired_at": 123,
"valid_until": "2023-12-25",
"signature": {
"signed_at": 123,
"signed_pdf_url": "<string>"
}
}
],
"next_cursor": "<string>"
}
}{
"message": "invalid token"
}{
"message": "Rate limit exceeded",
"data": {
"limit": 10,
"window": "60 seconds",
"remaining": 0,
"resetAt": "2025-11-17T14:30:00.000Z",
"retryAfter": 45
}
}{
"message": "invalid token"
}Quotes
List quotes
Paginated listing of the venue issued quotes, newest first. Items use the full quote payload of GET /quotes/.
A page may contain fewer than limit items even when more data remains (internal scan bound): always rely on next_cursor. There is no service-date filter here: to find quotes by event date, use GET /bookings with date_from/date_to and follow quote_ids.
GET
/
quotes
List quotes
curl --request GET \
--url https://api.bookingshake.io/api/quotes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bookingshake.io/api/quotes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bookingshake.io/api/quotes', 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.bookingshake.io/api/quotes",
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>"
],
]);
$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.bookingshake.io/api/quotes"
req, _ := http.NewRequest("GET", url, nil)
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.bookingshake.io/api/quotes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bookingshake.io/api/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"message": "success",
"data": {
"items": [
{
"id": "<string>",
"number": "<string>",
"status": "draft",
"title": "<string>",
"language": "<string>",
"currency": "<string>",
"created_at": 123,
"service_start_date": "<string>",
"service_end_date": "<string>",
"amount_excl_tax": 123,
"amount_incl_tax": 123,
"taxable_breakdown": {},
"tax_breakdown": {},
"global_discount_excl_tax": 123,
"lines": [
{
"name": "<string>",
"description": "<string>",
"accounting_code": "<string>",
"quantity": "<string>",
"unit": "<string>",
"unit_price_excl_tax": 123,
"discount": 123,
"tax_rate": "<string>",
"total_excl_tax": 123
}
],
"booking_id": "<string>",
"account_id": "<string>",
"contact_id": "<string>",
"seller": {
"id": "<string>",
"legal_name": "<string>",
"company_type": "<string>",
"company_registration_id": "<string>",
"vat_number": "<string>",
"share_capital": "<string>",
"company_other_id": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>",
"iban": "<string>",
"email": "<string>"
},
"account": {
"id": "<string>",
"name": "<string>",
"legal_name": "<string>",
"company_type": "<string>",
"company_registration_id": "<string>",
"siret": "<string>",
"vat_number": "<string>",
"rcs_number": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>",
"billing_address_line_1": "<string>",
"billing_address_line_2": "<string>",
"billing_postal_code": "<string>",
"billing_city": "<string>",
"billing_country": "<string>",
"billing_country_code": "<string>",
"peppol_id": "<string>"
},
"contact": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"landline_phone": "<string>",
"title": "<string>",
"position": "<string>",
"company": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"country": "<string>",
"country_code": "<string>"
},
"pdf_url": "<string>",
"metadata": {},
"sent_at": 123,
"validated_at": 123,
"canceled_at": 123,
"expired_at": 123,
"valid_until": "2023-12-25",
"signature": {
"signed_at": 123,
"signed_pdf_url": "<string>"
}
}
],
"next_cursor": "<string>"
}
}{
"message": "invalid token"
}{
"message": "Rate limit exceeded",
"data": {
"limit": 10,
"window": "60 seconds",
"remaining": 0,
"resetAt": "2025-11-17T14:30:00.000Z",
"retryAfter": 45
}
}{
"message": "invalid token"
}Authorizations
Bearer authentication using your BookingShake API key. Retrieve your API key from Settings > Integrations in your BookingShake dashboard.
Query Parameters
Maximum items per page
Required range:
1 <= x <= 100Opaque pagination cursor from the previous page
Issued at or after this Unix millisecond timestamp
Issued at or before this Unix millisecond timestamp
Filter by lifecycle status (canceled includes expired quotes)
Available options:
draft, ongoing, sent, validated, canceled ⌘I
