curl --request GET \
--url https://api.bookingshake.io/api/fields \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bookingshake.io/api/fields"
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/fields', 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/fields",
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/fields"
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/fields")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bookingshake.io/api/fields")
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[
{
"value": "field_event_type",
"type": "text",
"collection": "reservations",
"code": "event_type",
"label": "Event Type",
"isRequiredInBO": false,
"isCustom": false
},
{
"value": "field_date",
"type": "date",
"collection": "reservations",
"code": "date",
"label": "Date",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_source",
"type": "select",
"collection": "reservations",
"code": "source",
"label": "Source",
"isRequiredInBO": false,
"isCustom": false,
"data": [
{
"label": "Website",
"value": "src_website"
},
{
"label": "Phone",
"value": "src_phone"
}
]
},
{
"value": "field_pax",
"type": "number",
"collection": "reservations",
"code": "pax",
"label": "Number of Guests",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_firstname",
"type": "text",
"collection": "clients",
"code": "firstname",
"label": "First Name",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_email",
"type": "email",
"collection": "clients",
"code": "email",
"label": "Email",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "Abc123XyZ789",
"type": "input",
"collection": "clients",
"code": "custom_a1b2c3d4e5",
"label": "Preferred Language",
"isRequiredInBO": false,
"isCustom": true
},
{
"value": "Def456UvW012",
"type": "input",
"collection": "reservations",
"code": "custom_f6g7h8i9j0",
"label": "Budget Range",
"isRequiredInBO": true,
"isCustom": true
}
]{
"message": "invalid token"
}{
"message": "Rate limit exceeded",
"data": {
"limit": 60,
"window": "60 seconds",
"remaining": 0,
"resetAt": "2025-11-17T14:30:00.000Z",
"retryAfter": 45
}
}{
"message": "error"
}List available fields
Retrieve all available fields (both default and custom) for your venue. Fields include metadata such as type, collection, code, label, and whether they’re required in the back office. Custom fields are automatically merged from both venue-level and venue group-level configurations.
curl --request GET \
--url https://api.bookingshake.io/api/fields \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.bookingshake.io/api/fields"
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/fields', 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/fields",
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/fields"
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/fields")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bookingshake.io/api/fields")
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[
{
"value": "field_event_type",
"type": "text",
"collection": "reservations",
"code": "event_type",
"label": "Event Type",
"isRequiredInBO": false,
"isCustom": false
},
{
"value": "field_date",
"type": "date",
"collection": "reservations",
"code": "date",
"label": "Date",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_source",
"type": "select",
"collection": "reservations",
"code": "source",
"label": "Source",
"isRequiredInBO": false,
"isCustom": false,
"data": [
{
"label": "Website",
"value": "src_website"
},
{
"label": "Phone",
"value": "src_phone"
}
]
},
{
"value": "field_pax",
"type": "number",
"collection": "reservations",
"code": "pax",
"label": "Number of Guests",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_firstname",
"type": "text",
"collection": "clients",
"code": "firstname",
"label": "First Name",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "field_email",
"type": "email",
"collection": "clients",
"code": "email",
"label": "Email",
"isRequiredInBO": true,
"isCustom": false
},
{
"value": "Abc123XyZ789",
"type": "input",
"collection": "clients",
"code": "custom_a1b2c3d4e5",
"label": "Preferred Language",
"isRequiredInBO": false,
"isCustom": true
},
{
"value": "Def456UvW012",
"type": "input",
"collection": "reservations",
"code": "custom_f6g7h8i9j0",
"label": "Budget Range",
"isRequiredInBO": true,
"isCustom": true
}
]{
"message": "invalid token"
}{
"message": "Rate limit exceeded",
"data": {
"limit": 60,
"window": "60 seconds",
"remaining": 0,
"resetAt": "2025-11-17T14:30:00.000Z",
"retryAfter": 45
}
}{
"message": "error"
}Authorizations
Bearer authentication using your BookingShake API key. Retrieve your API key from Settings > Integrations in your BookingShake dashboard.
Response
List of fields retrieved successfully
Unique field identifier
"Abc123XyZ789"
Field type (e.g., text, number, date, select)
"text"
Indicates where the field should be used: 'clients' (contact.custom_fields), 'accounts' (company.custom_fields), or 'reservations' (booking.custom_fields)
clients, accounts, reservations "clients"
Field code/identifier. For custom fields, follows the format 'custom_XXXXXXXXXXX'
"custom_a1b2c3d4e5"
Field display label (translated based on venue's default language)
"Event Type"
Whether the field is required in the back office
false
Indicates if this is a custom field (true) or a default system field (false)
false
Additional data for select-type fields (list of available options)
[
{ "label": "Option 1", "value": "opt1" },
{ "label": "Option 2", "value": "opt2" }
]
