curl --request GET \
--url https://api.cal.com/v2/event-types/{eventTypeId}/history \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types/{eventTypeId}/history"
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cal-api-version': '<cal-api-version>', Authorization: '<authorization>'}
};
fetch('https://api.cal.com/v2/event-types/{eventTypeId}/history', 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/event-types/{eventTypeId}/history",
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: <authorization>",
"cal-api-version: <cal-api-version>"
],
]);
$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/event-types/{eventTypeId}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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/event-types/{eventTypeId}/history")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/event-types/{eventTypeId}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"eventTypeId": 123,
"auditLogs": [
{
"id": "018f4c2e-3f1a-7abc-9def-0123456789ab",
"action": "EVENT_TYPE_MODIFIED",
"type": "RECORD_MODIFIED",
"timestamp": "2026-01-01T00:00:00.000Z",
"source": "WEBAPP",
"actor": {
"type": "USER",
"displayName": "Ada Lovelace",
"displayEmail": "ada@example.com",
"displayAvatar": "https://example.com/avatar.png"
},
"actionDisplayTitle": "Ada Lovelace modified the event type",
"displayFields": [
{
"label": "Duration",
"fieldValue": {
"type": "rawValue",
"value": "enabled"
}
}
],
"displayJson": {},
"impersonatedBy": {
"displayName": "Grace Hopper",
"displayEmail": "grace@example.com",
"displayAvatar": "https://example.com/avatar.png"
},
"hasError": false
}
]
},
"pagination": {
"nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJpZCI6IjAxSFgifQ",
"hasMore": false
}
}Get event type history
If accessed using an OAuth access token, the EVENT_TYPE_READ scope is required.
Only the event type owner and applicable administrators can view its history. General event type read access does not include access to its history.
curl --request GET \
--url https://api.cal.com/v2/event-types/{eventTypeId}/history \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types/{eventTypeId}/history"
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cal-api-version': '<cal-api-version>', Authorization: '<authorization>'}
};
fetch('https://api.cal.com/v2/event-types/{eventTypeId}/history', 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/event-types/{eventTypeId}/history",
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: <authorization>",
"cal-api-version: <cal-api-version>"
],
]);
$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/event-types/{eventTypeId}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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/event-types/{eventTypeId}/history")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/event-types/{eventTypeId}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"eventTypeId": 123,
"auditLogs": [
{
"id": "018f4c2e-3f1a-7abc-9def-0123456789ab",
"action": "EVENT_TYPE_MODIFIED",
"type": "RECORD_MODIFIED",
"timestamp": "2026-01-01T00:00:00.000Z",
"source": "WEBAPP",
"actor": {
"type": "USER",
"displayName": "Ada Lovelace",
"displayEmail": "ada@example.com",
"displayAvatar": "https://example.com/avatar.png"
},
"actionDisplayTitle": "Ada Lovelace modified the event type",
"displayFields": [
{
"label": "Duration",
"fieldValue": {
"type": "rawValue",
"value": "enabled"
}
}
],
"displayJson": {},
"impersonatedBy": {
"displayName": "Grace Hopper",
"displayEmail": "grace@example.com",
"displayAvatar": "https://example.com/avatar.png"
},
"hasError": false
}
]
},
"pagination": {
"nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJpZCI6IjAxSFgifQ",
"hasMore": false
}
}Headers
Must be set to 2026-06-12. If not set to this value, the endpoint will default to an older version.
"2026-06-12"
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Path Parameters
Query Parameters
The number of audit logs to return. Defaults to 25 and cannot exceed 50.
1 <= x <= 5025
Cursor from the previous response. Pass pagination.nextCursor to fetch the next page of audit logs.
2048"eyJjcmVhdGVkQXQiOiIyMDI2LTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJpZCI6IjAxSFgifQ"
Response
Indicates whether the request was successful.
success, error "success"
The event type history data including audit log entries.
Show child attributes
Show child attributes
Pagination metadata for fetching additional pages.
Show child attributes
Show child attributes
Was this page helpful?