curl --request PUT \
--url https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"bookingFields": [
{
"field": "name",
"variant": "fullName",
"slug": "name",
"label": "<string>",
"placeholder": "<string>",
"disableOnPrefill": true
}
]
}
'import requests
url = "https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields"
payload = { "bookingFields": [
{
"field": "name",
"variant": "fullName",
"slug": "name",
"label": "<string>",
"placeholder": "<string>",
"disableOnPrefill": True
}
] }
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'cal-api-version': '<cal-api-version>',
Authorization: '<authorization>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
bookingFields: [
{
field: 'name',
variant: 'fullName',
slug: 'name',
label: '<string>',
placeholder: '<string>',
disableOnPrefill: true
}
]
})
};
fetch('https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields', 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}/teams/{teamId}/event-types/{eventTypeId}/booking-fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'bookingFields' => [
[
'field' => 'name',
'variant' => 'fullName',
'slug' => 'name',
'label' => '<string>',
'placeholder' => '<string>',
'disableOnPrefill' => true
]
]
]),
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/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields"
payload := strings.NewReader("{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
]
}
}Replace organization team booking fields
Replaces all booking fields. Omitted custom fields are deleted, while omitted default fields are restored with their default settings. Use PATCH to update specific fields. Workflow-added fields are read-only and ignored. Required membership role: team admin. PBAC permission: eventType.update. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the TEAM_EVENT_TYPE_WRITE scope is required.
curl --request PUT \
--url https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"bookingFields": [
{
"field": "name",
"variant": "fullName",
"slug": "name",
"label": "<string>",
"placeholder": "<string>",
"disableOnPrefill": true
}
]
}
'import requests
url = "https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields"
payload = { "bookingFields": [
{
"field": "name",
"variant": "fullName",
"slug": "name",
"label": "<string>",
"placeholder": "<string>",
"disableOnPrefill": True
}
] }
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'cal-api-version': '<cal-api-version>',
Authorization: '<authorization>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
bookingFields: [
{
field: 'name',
variant: 'fullName',
slug: 'name',
label: '<string>',
placeholder: '<string>',
disableOnPrefill: true
}
]
})
};
fetch('https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields', 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}/teams/{teamId}/event-types/{eventTypeId}/booking-fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'bookingFields' => [
[
'field' => 'name',
'variant' => 'fullName',
'slug' => 'name',
'label' => '<string>',
'placeholder' => '<string>',
'disableOnPrefill' => true
]
]
]),
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/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields"
payload := strings.NewReader("{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/booking-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"bookingFields\": [\n {\n \"field\": \"name\",\n \"variant\": \"fullName\",\n \"slug\": \"name\",\n \"label\": \"<string>\",\n \"placeholder\": \"<string>\",\n \"disableOnPrefill\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
]
}
}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"
For platform customers - OAuth client secret key
For platform customers - OAuth client ID
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Body
Booking fields to add or use as a replacement. The array cannot be empty, contain duplicate default fields or custom slugs, or use a default field's slug for a custom field. When replacing fields, at least one of email or attendeePhoneNumber must remain visible and required. Workflow-added fields are read-only and ignored when replacing fields.
1- Default Full Name
- Default Split Name
- Default Email
- Default Location
- Default Title
- Default Notes
- Default Guests
- Default Reschedule Reason
- Default Attendee Phone
- Workflow-added SMS Reminder
- Workflow-added AI Agent Phone
- Custom Email
- Custom Phone
- Custom Address
- Custom Short Text
- Custom Number
- Custom Long Text
- Custom Select
- Custom Multi-Select
- Custom Multiple Emails
- Custom Checkbox Group
- Custom Checkbox
- Custom Radio Group
- Custom URL
Show child attributes
Show child attributes
Was this page helpful?