curl --request POST \
--url https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"targetTeamId": 42,
"title": "Discovery call (EMEA)",
"slug": "discovery-call-emea",
"description": "<string>",
"lengthInMinutes": 30
}
'import requests
url = "https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate"
payload = {
"targetTeamId": 42,
"title": "Discovery call (EMEA)",
"slug": "discovery-call-emea",
"description": "<string>",
"lengthInMinutes": 30
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
targetTeamId: 42,
title: 'Discovery call (EMEA)',
slug: 'discovery-call-emea',
description: '<string>',
lengthInMinutes: 30
})
};
fetch('https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate', 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}/duplicate",
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([
'targetTeamId' => 42,
'title' => 'Discovery call (EMEA)',
'slug' => 'discovery-call-emea',
'description' => '<string>',
'lengthInMinutes' => 30
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$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}/duplicate"
payload := strings.NewReader("{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}")
req, _ := http.NewRequest("POST", url, payload)
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/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"eventType": {
"id": 1,
"lengthInMinutes": 60,
"title": "Learn the secrets of masterchief!",
"slug": "learn-the-secrets-of-masterchief",
"description": "Discover the culinary wonders of Argentina by making the best flan ever!",
"locations": [
{
"type": "address",
"address": "123 Example St, City, Country",
"public": true
}
],
"disableGuests": true,
"recurrence": {
"interval": 1,
"occurrences": 10,
"frequency": "yearly",
"disabled": false
},
"metadata": {},
"price": 123,
"currency": "<string>",
"lockTimeZoneToggleOnBookingPage": true,
"forwardParamsSuccessRedirect": true,
"successRedirectUrl": "<string>",
"isInstantEvent": true,
"scheduleId": 123,
"hidden": true,
"bookingRequiresAuthentication": true,
"teamId": 123,
"bookingUrl": "https://cal.com/team/acme/30min",
"hosts": [
{
"userId": 123,
"name": "John Doe",
"username": "john-doe",
"mandatory": false,
"priority": "medium",
"weight": 100,
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"avatarUrl": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
],
"schedulingType": "roundRobin",
"team": {
"id": 123,
"slug": "<string>",
"bannerUrl": "<string>",
"name": "<string>",
"logoUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"theme": "<string>"
},
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
],
"lengthInMinutesOptions": [
15,
30,
60
],
"slotInterval": 60,
"minimumBookingNotice": 0,
"beforeEventBuffer": 0,
"afterEventBuffer": 0,
"seatsPerTimeSlot": 123,
"seatsShowAvailabilityCount": true,
"bookingLimitsCount": {
"day": 1,
"week": 2,
"month": 3,
"year": 4
},
"bookerActiveBookingsLimit": {
"maximumActiveBookings": 3,
"offerReschedule": true
},
"onlyShowFirstAvailableSlot": true,
"bookingLimitsDuration": {
"day": 60,
"week": 120,
"month": 180,
"year": 240,
"disabled": false
},
"bookingWindow": [
{
"type": "businessDays",
"value": 5,
"rolling": true,
"disabled": false
}
],
"bookerLayouts": {
"defaultLayout": "month",
"enabledLayouts": [
"month"
]
},
"confirmationPolicy": {
"type": "always",
"blockUnconfirmedBookingsInBooker": true,
"noticeThreshold": {
"unit": "minutes",
"count": 30
},
"disabled": false
},
"bookingProposalCount": 123,
"requiresBookerEmailVerification": true,
"skipAttendeeEmailDeliverabilityCheck": true,
"emailSettings": {
"disableEmailsToAttendees": true,
"disableEmailsToHosts": true,
"disableProposalEmailsToHosts": true
},
"hideCalendarNotes": true,
"color": {
"lightThemeHex": "#292929",
"darkThemeHex": "#fafafa"
},
"seats": {
"seatsPerTimeSlot": 4,
"showAttendeeInfo": true,
"showAvailabilityCount": true,
"disabled": false
},
"offsetStart": 123,
"customName": "<string>",
"destinationCalendar": {
"integration": "<string>",
"externalId": "<string>"
},
"useDestinationCalendarEmail": true,
"hideCalendarEventDetails": true,
"hideOrganizerEmail": true,
"calVideoSettings": {
"disableRecordingForOrganizer": false,
"disableRecordingForGuests": false,
"redirectUrlOnExit": "<string>",
"enableAutomaticRecordingForOrganizer": false,
"enableAutomaticTranscription": false,
"disableTranscriptionForGuests": false,
"disableTranscriptionForOrganizer": false,
"hideTranscriptionForGuests": false,
"hideTranscriptionForOrganizer": false,
"sendTranscriptionEmails": true,
"disableAttendeeRecordingDownloadEmail": false,
"transcriptionLanguage": "multi"
},
"disableCancelling": {
"disabled": true
},
"disableRescheduling": {
"disabled": true,
"minutesBefore": 60
},
"interfaceLanguage": "<string>",
"weekStart": "<string>",
"allowReschedulingPastBookings": true,
"allowReschedulingCancelledBookings": true,
"showOptimizedSlots": true,
"useIsolatedAvailability": true,
"privateNoteEnabled": true,
"privateNoteMode": "duplicate_event",
"privateNoteTemplate": "<string>",
"ownerId": 123,
"parentEventTypeId": 123,
"assignAllTeamMembers": true,
"rescheduleWithSameRoundRobinHost": true,
"allowRRHostChoiceOnReschedule": true,
"isRRWeightsEnabled": true
},
"droppedHostUserIds": [
101,
102
],
"droppedWorkflowIds": [
7
],
"destinationCalendarDropped": false
}
}Duplicate an organization team event type
Copies the event type into the target team, which is the source’s team or another team of the same organization. In another team, hosts who are not accepted members of the target team are left out and no workflows are activated; the response lists both. The source’s destination calendar is left off when the caller cannot set it, which the response reports in destinationCalendarDropped. Required membership role: team admin of the source’s team. PBAC permission: eventType.create on the source’s team; the caller also needs eventType.read on the source’s team and eventType.create on the target team. A source the caller cannot read returns 404, the same as a missing one. 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 POST \
--url https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"targetTeamId": 42,
"title": "Discovery call (EMEA)",
"slug": "discovery-call-emea",
"description": "<string>",
"lengthInMinutes": 30
}
'import requests
url = "https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate"
payload = {
"targetTeamId": 42,
"title": "Discovery call (EMEA)",
"slug": "discovery-call-emea",
"description": "<string>",
"lengthInMinutes": 30
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
targetTeamId: 42,
title: 'Discovery call (EMEA)',
slug: 'discovery-call-emea',
description: '<string>',
lengthInMinutes: 30
})
};
fetch('https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate', 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}/duplicate",
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([
'targetTeamId' => 42,
'title' => 'Discovery call (EMEA)',
'slug' => 'discovery-call-emea',
'description' => '<string>',
'lengthInMinutes' => 30
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$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}/duplicate"
payload := strings.NewReader("{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}")
req, _ := http.NewRequest("POST", url, payload)
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/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"targetTeamId\": 42,\n \"title\": \"Discovery call (EMEA)\",\n \"slug\": \"discovery-call-emea\",\n \"description\": \"<string>\",\n \"lengthInMinutes\": 30\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"eventType": {
"id": 1,
"lengthInMinutes": 60,
"title": "Learn the secrets of masterchief!",
"slug": "learn-the-secrets-of-masterchief",
"description": "Discover the culinary wonders of Argentina by making the best flan ever!",
"locations": [
{
"type": "address",
"address": "123 Example St, City, Country",
"public": true
}
],
"disableGuests": true,
"recurrence": {
"interval": 1,
"occurrences": 10,
"frequency": "yearly",
"disabled": false
},
"metadata": {},
"price": 123,
"currency": "<string>",
"lockTimeZoneToggleOnBookingPage": true,
"forwardParamsSuccessRedirect": true,
"successRedirectUrl": "<string>",
"isInstantEvent": true,
"scheduleId": 123,
"hidden": true,
"bookingRequiresAuthentication": true,
"teamId": 123,
"bookingUrl": "https://cal.com/team/acme/30min",
"hosts": [
{
"userId": 123,
"name": "John Doe",
"username": "john-doe",
"mandatory": false,
"priority": "medium",
"weight": 100,
"userUuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"avatarUrl": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
],
"schedulingType": "roundRobin",
"team": {
"id": 123,
"slug": "<string>",
"bannerUrl": "<string>",
"name": "<string>",
"logoUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"theme": "<string>"
},
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
],
"lengthInMinutesOptions": [
15,
30,
60
],
"slotInterval": 60,
"minimumBookingNotice": 0,
"beforeEventBuffer": 0,
"afterEventBuffer": 0,
"seatsPerTimeSlot": 123,
"seatsShowAvailabilityCount": true,
"bookingLimitsCount": {
"day": 1,
"week": 2,
"month": 3,
"year": 4
},
"bookerActiveBookingsLimit": {
"maximumActiveBookings": 3,
"offerReschedule": true
},
"onlyShowFirstAvailableSlot": true,
"bookingLimitsDuration": {
"day": 60,
"week": 120,
"month": 180,
"year": 240,
"disabled": false
},
"bookingWindow": [
{
"type": "businessDays",
"value": 5,
"rolling": true,
"disabled": false
}
],
"bookerLayouts": {
"defaultLayout": "month",
"enabledLayouts": [
"month"
]
},
"confirmationPolicy": {
"type": "always",
"blockUnconfirmedBookingsInBooker": true,
"noticeThreshold": {
"unit": "minutes",
"count": 30
},
"disabled": false
},
"bookingProposalCount": 123,
"requiresBookerEmailVerification": true,
"skipAttendeeEmailDeliverabilityCheck": true,
"emailSettings": {
"disableEmailsToAttendees": true,
"disableEmailsToHosts": true,
"disableProposalEmailsToHosts": true
},
"hideCalendarNotes": true,
"color": {
"lightThemeHex": "#292929",
"darkThemeHex": "#fafafa"
},
"seats": {
"seatsPerTimeSlot": 4,
"showAttendeeInfo": true,
"showAvailabilityCount": true,
"disabled": false
},
"offsetStart": 123,
"customName": "<string>",
"destinationCalendar": {
"integration": "<string>",
"externalId": "<string>"
},
"useDestinationCalendarEmail": true,
"hideCalendarEventDetails": true,
"hideOrganizerEmail": true,
"calVideoSettings": {
"disableRecordingForOrganizer": false,
"disableRecordingForGuests": false,
"redirectUrlOnExit": "<string>",
"enableAutomaticRecordingForOrganizer": false,
"enableAutomaticTranscription": false,
"disableTranscriptionForGuests": false,
"disableTranscriptionForOrganizer": false,
"hideTranscriptionForGuests": false,
"hideTranscriptionForOrganizer": false,
"sendTranscriptionEmails": true,
"disableAttendeeRecordingDownloadEmail": false,
"transcriptionLanguage": "multi"
},
"disableCancelling": {
"disabled": true
},
"disableRescheduling": {
"disabled": true,
"minutesBefore": 60
},
"interfaceLanguage": "<string>",
"weekStart": "<string>",
"allowReschedulingPastBookings": true,
"allowReschedulingCancelledBookings": true,
"showOptimizedSlots": true,
"useIsolatedAvailability": true,
"privateNoteEnabled": true,
"privateNoteMode": "duplicate_event",
"privateNoteTemplate": "<string>",
"ownerId": 123,
"parentEventTypeId": 123,
"assignAllTeamMembers": true,
"rescheduleWithSameRoundRobinHost": true,
"allowRRHostChoiceOnReschedule": true,
"isRRWeightsEnabled": true
},
"droppedHostUserIds": [
101,
102
],
"droppedWorkflowIds": [
7
],
"destinationCalendarDropped": false
}
}Headers
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Path Parameters
The team's uuid (preferred), its short-uuid (Flickr Base58) form, or its numeric id.
Body
The team the copy is created in: the source event type's team, or another team of the same organization.
42
255"Discovery call (EMEA)"
Must not be used by another event type in the target team.
"discovery-call-emea"
Defaults to the source event type's description.
3000Defaults to the source event type's length.
x >= 130
Was this page helpful?