curl --request POST \
--url https://api.default.com/v1/scheduling/meetings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"startTime": "2023-11-07T05:31:56Z",
"reservationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event": "<string>",
"personEmail": "jsmith@example.com",
"guestFirstName": "<string>",
"guestLastName": "<string>",
"guestPhone": "<string>",
"guestEmails": [
"jsmith@example.com"
],
"leadTimezone": "<string>",
"responses": {},
"fieldResponses": {},
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.default.com/v1/scheduling/meetings"
payload = {
"startTime": "2023-11-07T05:31:56Z",
"reservationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event": "<string>",
"personEmail": "jsmith@example.com",
"guestFirstName": "<string>",
"guestLastName": "<string>",
"guestPhone": "<string>",
"guestEmails": ["jsmith@example.com"],
"leadTimezone": "<string>",
"responses": {},
"fieldResponses": {},
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startTime: '2023-11-07T05:31:56Z',
reservationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
event: '<string>',
personEmail: 'jsmith@example.com',
guestFirstName: '<string>',
guestLastName: '<string>',
guestPhone: '<string>',
guestEmails: ['jsmith@example.com'],
leadTimezone: '<string>',
responses: {},
fieldResponses: {},
workflowExecutionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.default.com/v1/scheduling/meetings', 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.default.com/v1/scheduling/meetings",
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([
'startTime' => '2023-11-07T05:31:56Z',
'reservationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'event' => '<string>',
'personEmail' => 'jsmith@example.com',
'guestFirstName' => '<string>',
'guestLastName' => '<string>',
'guestPhone' => '<string>',
'guestEmails' => [
'jsmith@example.com'
],
'leadTimezone' => '<string>',
'responses' => [
],
'fieldResponses' => [
],
'workflowExecutionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.default.com/v1/scheduling/meetings"
payload := strings.NewReader("{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.default.com/v1/scheduling/meetings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.default.com/v1/scheduling/meetings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "scheduled",
"date": "2023-11-07T05:31:56Z",
"duration": -1,
"meetingLink": "<string>",
"conferencingType": "google_meet",
"location": "<string>",
"personEmail": "jsmith@example.com",
"additionalAttendees": [
"<string>"
],
"cancellationReason": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}Book a meeting
Books a slot previously returned by POST /v1/scheduling/events/{event}/slots, consuming its reservation. The startTime must be a time the event hosts are available for — on SLOT_TAKEN the reservation stays usable, so fetch slots again and retry with the same reservationId.
Requires the scheduling:write scope.
curl --request POST \
--url https://api.default.com/v1/scheduling/meetings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"startTime": "2023-11-07T05:31:56Z",
"reservationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event": "<string>",
"personEmail": "jsmith@example.com",
"guestFirstName": "<string>",
"guestLastName": "<string>",
"guestPhone": "<string>",
"guestEmails": [
"jsmith@example.com"
],
"leadTimezone": "<string>",
"responses": {},
"fieldResponses": {},
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.default.com/v1/scheduling/meetings"
payload = {
"startTime": "2023-11-07T05:31:56Z",
"reservationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event": "<string>",
"personEmail": "jsmith@example.com",
"guestFirstName": "<string>",
"guestLastName": "<string>",
"guestPhone": "<string>",
"guestEmails": ["jsmith@example.com"],
"leadTimezone": "<string>",
"responses": {},
"fieldResponses": {},
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startTime: '2023-11-07T05:31:56Z',
reservationId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
event: '<string>',
personEmail: 'jsmith@example.com',
guestFirstName: '<string>',
guestLastName: '<string>',
guestPhone: '<string>',
guestEmails: ['jsmith@example.com'],
leadTimezone: '<string>',
responses: {},
fieldResponses: {},
workflowExecutionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.default.com/v1/scheduling/meetings', 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.default.com/v1/scheduling/meetings",
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([
'startTime' => '2023-11-07T05:31:56Z',
'reservationId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'event' => '<string>',
'personEmail' => 'jsmith@example.com',
'guestFirstName' => '<string>',
'guestLastName' => '<string>',
'guestPhone' => '<string>',
'guestEmails' => [
'jsmith@example.com'
],
'leadTimezone' => '<string>',
'responses' => [
],
'fieldResponses' => [
],
'workflowExecutionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.default.com/v1/scheduling/meetings"
payload := strings.NewReader("{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.default.com/v1/scheduling/meetings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.default.com/v1/scheduling/meetings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"reservationId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"event\": \"<string>\",\n \"personEmail\": \"jsmith@example.com\",\n \"guestFirstName\": \"<string>\",\n \"guestLastName\": \"<string>\",\n \"guestPhone\": \"<string>\",\n \"guestEmails\": [\n \"jsmith@example.com\"\n ],\n \"leadTimezone\": \"<string>\",\n \"responses\": {},\n \"fieldResponses\": {},\n \"workflowExecutionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "scheduled",
"date": "2023-11-07T05:31:56Z",
"duration": -1,
"meetingLink": "<string>",
"conferencingType": "google_meet",
"location": "<string>",
"personEmail": "jsmith@example.com",
"additionalAttendees": [
"<string>"
],
"cancellationReason": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}Authorizations
Organization API key, created in workspace settings (Settings → API Keys). Sent as Authorization: Bearer <key>. Shown once at creation; revocable and permission-scoped per key.
Body
The same event or scheduling link identifier used to fetch slots. The reservation is scoped to it. Trigger-routed bookings pass the schedulingLinkId from the trigger outcome.
The lead being booked. With workflowExecutionId set this must match the email the trigger was fired with. A different value responds 400.
10Show child attributes
Show child attributes
Show child attributes
Show child attributes
Links the meeting to the workflow run that routed this lead and resumes it, so CRM writeback and routing assignments record. Responds 404 when the id does not resolve.
Response
Success
scheduled, rescheduled, held, no_show, canceled -2147483648 <= x <= 2147483647google_meet, microsoft_teams, zoom, zoom_personal, in_person, phone, other Was this page helpful?