curl --request GET \
--url https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookingsimport requests
url = "https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookings"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cal.com/v2/organizations/{orgId}/users/{userId}/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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings"
req, _ := http.NewRequest("GET", url, nil)
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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyGet all bookings for an organization user
If accessed using an OAuth access token, the ORG_BOOKING_READ scope is required.
curl --request GET \
--url https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookingsimport requests
url = "https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookings"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cal.com/v2/organizations/{orgId}/users/{userId}/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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings"
req, _ := http.NewRequest("GET", url, nil)
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.cal.com/v2/organizations/{orgId}/users/{userId}/bookings")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/users/{userId}/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyHeaders
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
For platform customers - OAuth client secret key
For platform customers - OAuth client ID
Query Parameters
Filter bookings by status. If you want to filter by multiple statuses, separate them with a comma.
1upcoming, recurring, past, cancelled, unconfirmed "?status=upcoming,past"
Filter bookings by the attendee's email address.
"example@domain.com"
Filter bookings by the attendee's name.
"John Doe"
Filter bookings by the booking Uid.
"2NtaeaVcKfpmSZ4CthFdfk"
Filter bookings by event type ids. Event type ids must be separated by a comma.
"?eventTypeIds=100,200"
Filter bookings by event type id.
"?eventTypeId=100"
Filter bookings by team ids that user is part of. Team ids must be separated by a comma.
"?teamIds=50,60"
Filter bookings by team id that user is part of
"?teamId=50"
Filter bookings with start after this date string.
"?afterStart=2025-03-07T10:00:00.000Z"
Filter bookings with end before this date string.
"?beforeEnd=2025-03-07T11:00:00.000Z"
Filter bookings that have been created after this date string.
"?afterCreatedAt=2025-03-07T10:00:00.000Z"
Filter bookings that have been created before this date string.
"?beforeCreatedAt=2025-03-14T11:00:00.000Z"
Filter bookings that have been updated after this date string.
"?afterUpdatedAt=2025-03-07T10:00:00.000Z"
Filter bookings that have been updated before this date string.
"?beforeUpdatedAt=2025-03-14T11:00:00.000Z"
Sort results by their start time in ascending or descending order.
asc, desc "?sortStart=asc OR ?sortStart=desc"
Sort results by their end time in ascending or descending order.
asc, desc "?sortEnd=asc OR ?sortEnd=desc"
Sort results by their creation time (when booking was made) in ascending or descending order.
asc, desc "?sortCreated=asc OR ?sortCreated=desc"
Sort results by their updated time (for example when booking status changes) in ascending or descending order.
asc, desc "?sortUpdatedAt=asc OR ?sortUpdatedAt=desc"
The number of items to return
1 <= x <= 25010
The number of items to skip
x >= 00
Response
Was this page helpful?