curl --request POST \
--url https://api.cal.com/v2/insights/booking-limits/usage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scope": "team",
"offset": 0,
"limit": 50,
"selectedTeamId": 12,
"date": "2026-10-13",
"eventTypeId": 101,
"userUuids": [
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
]
}
'import requests
url = "https://api.cal.com/v2/insights/booking-limits/usage"
payload = {
"scope": "team",
"offset": 0,
"limit": 50,
"selectedTeamId": 12,
"date": "2026-10-13",
"eventTypeId": 101,
"userUuids": ["3f2504e0-4f89-41d3-9a0c-0305e82c3301"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scope: 'team',
offset: 0,
limit: 50,
selectedTeamId: 12,
date: '2026-10-13',
eventTypeId: 101,
userUuids: ['3f2504e0-4f89-41d3-9a0c-0305e82c3301']
})
};
fetch('https://api.cal.com/v2/insights/booking-limits/usage', 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.cal.com/v2/insights/booking-limits/usage",
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([
'scope' => 'team',
'offset' => 0,
'limit' => 50,
'selectedTeamId' => 12,
'date' => '2026-10-13',
'eventTypeId' => 101,
'userUuids' => [
'3f2504e0-4f89-41d3-9a0c-0305e82c3301'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.cal.com/v2/insights/booking-limits/usage"
payload := strings.NewReader("{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.cal.com/v2/insights/booking-limits/usage")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/insights/booking-limits/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"date": "2026-10-13",
"eventType": {
"perDay": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perWeek": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perMonth": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perYear": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"eventTypeId": 101,
"timeZone": "Europe/London"
},
"users": [
{
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"timeZone": "America/New_York",
"user": {
"perDay": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perWeek": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perMonth": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perYear": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
}
},
"binding": {
"layer": "user",
"limitKey": "perWeek",
"remaining": 2
}
}
],
"total": 42
}
}Get booking limits usage
How much of each booking limit is used in the day, week, month and year containing date (default today), per user in scope. Counts come from the same queries booking-limit enforcement uses. Reports the user’s global limit and, when eventTypeId is given, the event type’s own limit; team booking limits are not included yet. Team scope requires insights.read on the team, even for direct members. Org scope requires eventTypeId and lists that event’s hosts. An admin skipBookingLimits override can still let a booking through when remaining is 0.
curl --request POST \
--url https://api.cal.com/v2/insights/booking-limits/usage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scope": "team",
"offset": 0,
"limit": 50,
"selectedTeamId": 12,
"date": "2026-10-13",
"eventTypeId": 101,
"userUuids": [
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
]
}
'import requests
url = "https://api.cal.com/v2/insights/booking-limits/usage"
payload = {
"scope": "team",
"offset": 0,
"limit": 50,
"selectedTeamId": 12,
"date": "2026-10-13",
"eventTypeId": 101,
"userUuids": ["3f2504e0-4f89-41d3-9a0c-0305e82c3301"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scope: 'team',
offset: 0,
limit: 50,
selectedTeamId: 12,
date: '2026-10-13',
eventTypeId: 101,
userUuids: ['3f2504e0-4f89-41d3-9a0c-0305e82c3301']
})
};
fetch('https://api.cal.com/v2/insights/booking-limits/usage', 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.cal.com/v2/insights/booking-limits/usage",
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([
'scope' => 'team',
'offset' => 0,
'limit' => 50,
'selectedTeamId' => 12,
'date' => '2026-10-13',
'eventTypeId' => 101,
'userUuids' => [
'3f2504e0-4f89-41d3-9a0c-0305e82c3301'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.cal.com/v2/insights/booking-limits/usage"
payload := strings.NewReader("{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.cal.com/v2/insights/booking-limits/usage")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/insights/booking-limits/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scope\": \"team\",\n \"offset\": 0,\n \"limit\": 50,\n \"selectedTeamId\": 12,\n \"date\": \"2026-10-13\",\n \"eventTypeId\": 101,\n \"userUuids\": [\n \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"date": "2026-10-13",
"eventType": {
"perDay": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perWeek": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perMonth": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perYear": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"eventTypeId": 101,
"timeZone": "Europe/London"
},
"users": [
{
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"timeZone": "America/New_York",
"user": {
"perDay": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perWeek": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perMonth": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
},
"perYear": {
"limit": 20,
"used": 7,
"remaining": 13,
"periodStart": "2026-10-11",
"periodEnd": "2026-10-17"
}
},
"binding": {
"layer": "user",
"limitKey": "perWeek",
"remaining": 2
}
}
],
"total": 42
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
user: the caller only. team: accepted members of selectedTeamId. org: the hosts of eventTypeId, which is then required.
user, team, org "team"
0
x <= 10050
Required for team scope.
12
Calendar day (YYYY-MM-DD). Reports the day, week, month and year containing it, each read in its limit's own time zone: the user's for the global limit, the event type's for the event-type limit. Defaults to today.
"2026-10-13"
Adds the event type's own booking limit. Must be an event type inside the scope; required for org scope.
101
Only report these users. Every uuid must be inside the scope.
100["3f2504e0-4f89-41d3-9a0c-0305e82c3301"]
Was this page helpful?