curl --request POST \
--url https://api.cal.com/v2/bookings/{bookingUid}/reassign \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"reason": "Host has to take another call"
}
'import requests
url = "https://api.cal.com/v2/bookings/{bookingUid}/reassign"
payload = {
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"reason": "Host has to take another call"
}
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'cal-api-version': '<cal-api-version>',
Authorization: '<authorization>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userUuid: '3f2504e0-4f89-41d3-9a0c-0305e82c3301',
reason: 'Host has to take another call'
})
};
fetch('https://api.cal.com/v2/bookings/{bookingUid}/reassign', 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/bookings/{bookingUid}/reassign",
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([
'userUuid' => '3f2504e0-4f89-41d3-9a0c-0305e82c3301',
'reason' => 'Host has to take another call'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/bookings/{bookingUid}/reassign"
payload := strings.NewReader("{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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/bookings/{bookingUid}/reassign")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/bookings/{bookingUid}/reassign")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"bookingUid": "booking_uid_123",
"reassignedTo": {
"id": 123,
"uuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"name": "John Doe",
"email": "john.doe@example.com",
"displayEmail": "john.doe@example.com"
}
}
}Reassign a booking
Reassigns the host of a round robin or managed event type booking. The provided authorization header refers to the owner of the booking.
Without userUuid in the body, an available round robin host is picked automatically.
With userUuid, the booking is reassigned to that user. For a round robin booking, the user must be one of the booking’s hosts and the booking keeps its uid. For a managed event booking, the user must be one of the users the managed event is assigned to — list them, along with their availability for the booking’s slot, with GET /v2/bookings/{bookingUid}/reassignment-candidates. Reassignment moves the booking onto the new host’s own child event type, so the original booking is cancelled and the returned booking has a new uid which you must store in place of the old one. Recurring managed bookings cannot be reassigned yet.
If accessed using an OAuth access token, the BOOKING_WRITE scope is required.
curl --request POST \
--url https://api.cal.com/v2/bookings/{bookingUid}/reassign \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"reason": "Host has to take another call"
}
'import requests
url = "https://api.cal.com/v2/bookings/{bookingUid}/reassign"
payload = {
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"reason": "Host has to take another call"
}
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'cal-api-version': '<cal-api-version>',
Authorization: '<authorization>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userUuid: '3f2504e0-4f89-41d3-9a0c-0305e82c3301',
reason: 'Host has to take another call'
})
};
fetch('https://api.cal.com/v2/bookings/{bookingUid}/reassign', 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/bookings/{bookingUid}/reassign",
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([
'userUuid' => '3f2504e0-4f89-41d3-9a0c-0305e82c3301',
'reason' => 'Host has to take another call'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/bookings/{bookingUid}/reassign"
payload := strings.NewReader("{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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/bookings/{bookingUid}/reassign")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/bookings/{bookingUid}/reassign")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userUuid\": \"3f2504e0-4f89-41d3-9a0c-0305e82c3301\",\n \"reason\": \"Host has to take another call\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"bookingUid": "booking_uid_123",
"reassignedTo": {
"id": 123,
"uuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"name": "John Doe",
"email": "john.doe@example.com",
"displayEmail": "john.doe@example.com"
}
}
}Headers
Must be set to 2026-02-25.
"2026-02-25"
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Path Parameters
Body
UUID of the user to reassign the booking to. Omit it to let Cal.com pick an available round robin host. For a managed event booking, list the eligible users with GET /v2/bookings/{bookingUid}/reassignment-candidates and pass a candidate's uuid.
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
Reason for reassigning the booking. Only recorded when userUuid is set.
"Host has to take another call"
Was this page helpful?