curl --request GET \
--url https://api.cal.com/v2/event-types/{eventTypeId}/crm-sync-errors \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types/{eventTypeId}/crm-sync-errors"
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}/crm-sync-errors', 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}/crm-sync-errors",
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}/crm-sync-errors"
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}/crm-sync-errors")
.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}/crm-sync-errors")
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": [
{
"id": "019ea850-efc7-7a48-8508-aed31b72ce68",
"credentialId": 123,
"eventTypeId": 49,
"appSlug": "salesforce",
"timestamp": "2026-06-08T17:38:57.107Z",
"errorCode": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
"errorMessage": "Validation rule blocked this update",
"droppedFields": [
"Custom_Field__c"
],
"dismissedAt": "2026-06-08T17:40:00.000Z",
"rawMessage": "FIELD_CUSTOM_VALIDATION_EXCEPTION: Validation rule blocked this update",
"eventCreated": false,
"bookingUid": "booking_uid_123"
}
],
"pagination": {
"nextCursor": "eyJ2IjoxLCJzb3J0VXVpZCI6IjAxOWVhODUwLWVmYzctN2E0OC04NTA4LWFlZDMxYjcyY2U2OCJ9",
"hasMore": true
}
}List CRM sync errors for an event type
By default, only active CRM sync errors are returned; pass includeDismissed=true to include dismissed errors.
If accessed using an OAuth access token, the EVENT_TYPE_READ scope is required.
curl --request GET \
--url https://api.cal.com/v2/event-types/{eventTypeId}/crm-sync-errors \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types/{eventTypeId}/crm-sync-errors"
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}/crm-sync-errors', 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}/crm-sync-errors",
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}/crm-sync-errors"
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}/crm-sync-errors")
.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}/crm-sync-errors")
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": [
{
"id": "019ea850-efc7-7a48-8508-aed31b72ce68",
"credentialId": 123,
"eventTypeId": 49,
"appSlug": "salesforce",
"timestamp": "2026-06-08T17:38:57.107Z",
"errorCode": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
"errorMessage": "Validation rule blocked this update",
"droppedFields": [
"Custom_Field__c"
],
"dismissedAt": "2026-06-08T17:40:00.000Z",
"rawMessage": "FIELD_CUSTOM_VALIDATION_EXCEPTION: Validation rule blocked this update",
"eventCreated": false,
"bookingUid": "booking_uid_123"
}
],
"pagination": {
"nextCursor": "eyJ2IjoxLCJzb3J0VXVpZCI6IjAxOWVhODUwLWVmYzctN2E0OC04NTA4LWFlZDMxYjcyY2U2OCJ9",
"hasMore": true
}
}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
CRM app slug connected to the event type, for example salesforce.
"salesforce"
When true, returns dismissed historical errors as well as active errors. Defaults to false.
true
Opaque cursor from pagination.nextCursor. Omit to fetch the first page of CRM sync errors.
"eyJ2IjoxLCJzb3J0VXVpZCI6IjAxOWVhODUwLWVmYzctN2E0OC04NTA4LWFlZDMxYjcyY2U2OCJ9"
Maximum number of CRM sync errors to return.
1 <= x <= 10050
Was this page helpful?