Verify a secondary domain of an organization
curl --request POST \
--url https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verifyimport requests
url = "https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify', 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}/secondary-domains/{domainId}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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}/secondary-domains/{domainId}/verify"
req, _ := http.NewRequest("POST", url, nil)
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/organizations/{orgId}/secondary-domains/{domainId}/verify")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"id": 1,
"domain": "acme.fr",
"usernameSuffix": "fr",
"verified": false,
"verifiedAt": null,
"createdAt": "2026-10-02T09:00:00.000Z",
"verificationRecord": {
"type": "TXT",
"name": "_cal-verification.acme.fr",
"value": "cal-verification=3f1c0d7e9a2b4c6d8e0f1a2b3c4d5e6f"
}
}
}Secondary Domains
Verify a secondary domain of an organization
Checks the DNS TXT record returned in verificationRecord and marks the domain as verified. For platform, the plan must be ‘ESSENTIALS’ or higher to access this endpoint. Required membership role: org admin. PBAC permission: organization.update. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control
POST
/
v2
/
organizations
/
{orgId}
/
secondary-domains
/
{domainId}
/
verify
Verify a secondary domain of an organization
curl --request POST \
--url https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verifyimport requests
url = "https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify', 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}/secondary-domains/{domainId}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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}/secondary-domains/{domainId}/verify"
req, _ := http.NewRequest("POST", url, nil)
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/organizations/{orgId}/secondary-domains/{domainId}/verify")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/secondary-domains/{domainId}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"id": 1,
"domain": "acme.fr",
"usernameSuffix": "fr",
"verified": false,
"verifiedAt": null,
"createdAt": "2026-10-02T09:00:00.000Z",
"verificationRecord": {
"type": "TXT",
"name": "_cal-verification.acme.fr",
"value": "cal-verification=3f1c0d7e9a2b4c6d8e0f1a2b3c4d5e6f"
}
}
}Headers
For non-platform customers - value must be Bearer <token> where <token> is api key prefixed with cal_
For platform customers - OAuth client secret key
For platform customers - OAuth client ID
Was this page helpful?