curl --request POST \
--url https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"duration": 123,
"email": "<string>",
"firstName": "<string>",
"formFields": [
{
"name": "<string>",
"value": "<string>"
}
],
"lastName": "<string>",
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": true
}
],
"likelyAvailableUserIds": [
"<string>"
],
"slug": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"locale": "<string>",
"timezone": "<string>"
}
'import requests
url = "https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book"
payload = {
"duration": 123,
"email": "<string>",
"firstName": "<string>",
"formFields": [
{
"name": "<string>",
"value": "<string>"
}
],
"lastName": "<string>",
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": True
}
],
"likelyAvailableUserIds": ["<string>"],
"slug": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"locale": "<string>",
"timezone": "<string>"
}
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({
duration: 123,
email: '<string>',
firstName: '<string>',
formFields: [{name: '<string>', value: '<string>'}],
lastName: '<string>',
legalConsentResponses: [{communicationTypeId: '<string>', consented: true}],
likelyAvailableUserIds: ['<string>'],
slug: '<string>',
startTime: '2023-11-07T05:31:56Z',
locale: '<string>',
timezone: '<string>'
})
};
fetch('https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book', 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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book",
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([
'duration' => 123,
'email' => '<string>',
'firstName' => '<string>',
'formFields' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'lastName' => '<string>',
'legalConsentResponses' => [
[
'communicationTypeId' => '<string>',
'consented' => true
]
],
'likelyAvailableUserIds' => [
'<string>'
],
'slug' => '<string>',
'startTime' => '2023-11-07T05:31:56Z',
'locale' => '<string>',
'timezone' => '<string>'
]),
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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book"
payload := strings.NewReader("{\n \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book")
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 \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"bookingTimezone": "<string>",
"calendarEventId": "<string>",
"contactId": "<string>",
"duration": 123,
"end": "2023-11-07T05:31:56Z",
"formFields": [
{
"isCustom": true,
"label": "<string>",
"name": "<string>",
"value": "<string>",
"fieldType": "<string>",
"translatedLabel": "<string>",
"valueLabel": "<string>"
}
],
"guestEmails": [
"<string>"
],
"isOffline": true,
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": true
}
],
"start": "2023-11-07T05:31:56Z",
"subject": "<string>",
"locale": "<string>",
"location": "<string>",
"webConferenceMeetingId": "<string>",
"webConferenceUrl": "<string>"
}{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Book a meeting
Book a meeting for a specified meeting page.
curl --request POST \
--url https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"duration": 123,
"email": "<string>",
"firstName": "<string>",
"formFields": [
{
"name": "<string>",
"value": "<string>"
}
],
"lastName": "<string>",
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": true
}
],
"likelyAvailableUserIds": [
"<string>"
],
"slug": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"locale": "<string>",
"timezone": "<string>"
}
'import requests
url = "https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book"
payload = {
"duration": 123,
"email": "<string>",
"firstName": "<string>",
"formFields": [
{
"name": "<string>",
"value": "<string>"
}
],
"lastName": "<string>",
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": True
}
],
"likelyAvailableUserIds": ["<string>"],
"slug": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"locale": "<string>",
"timezone": "<string>"
}
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({
duration: 123,
email: '<string>',
firstName: '<string>',
formFields: [{name: '<string>', value: '<string>'}],
lastName: '<string>',
legalConsentResponses: [{communicationTypeId: '<string>', consented: true}],
likelyAvailableUserIds: ['<string>'],
slug: '<string>',
startTime: '2023-11-07T05:31:56Z',
locale: '<string>',
timezone: '<string>'
})
};
fetch('https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book', 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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book",
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([
'duration' => 123,
'email' => '<string>',
'firstName' => '<string>',
'formFields' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'lastName' => '<string>',
'legalConsentResponses' => [
[
'communicationTypeId' => '<string>',
'consented' => true
]
],
'likelyAvailableUserIds' => [
'<string>'
],
'slug' => '<string>',
'startTime' => '2023-11-07T05:31:56Z',
'locale' => '<string>',
'timezone' => '<string>'
]),
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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book"
payload := strings.NewReader("{\n \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\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.hubapi.com/scheduler/2026-03/meetings/meeting-links/book")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/scheduler/2026-03/meetings/meeting-links/book")
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 \"duration\": 123,\n \"email\": \"<string>\",\n \"firstName\": \"<string>\",\n \"formFields\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"lastName\": \"<string>\",\n \"legalConsentResponses\": [\n {\n \"communicationTypeId\": \"<string>\",\n \"consented\": true\n }\n ],\n \"likelyAvailableUserIds\": [\n \"<string>\"\n ],\n \"slug\": \"<string>\",\n \"startTime\": \"2023-11-07T05:31:56Z\",\n \"locale\": \"<string>\",\n \"timezone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"bookingTimezone": "<string>",
"calendarEventId": "<string>",
"contactId": "<string>",
"duration": 123,
"end": "2023-11-07T05:31:56Z",
"formFields": [
{
"isCustom": true,
"label": "<string>",
"name": "<string>",
"value": "<string>",
"fieldType": "<string>",
"translatedLabel": "<string>",
"valueLabel": "<string>"
}
],
"guestEmails": [
"<string>"
],
"isOffline": true,
"legalConsentResponses": [
{
"communicationTypeId": "<string>",
"consented": true
}
],
"start": "2023-11-07T05:31:56Z",
"subject": "<string>",
"locale": "<string>",
"location": "<string>",
"webConferenceMeetingId": "<string>",
"webConferenceUrl": "<string>"
}{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Supported products
Supported products
Required Scopes
Required Scopes
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
The duration of the meeting in milliseconds.
The email address of the person booking the meeting.
The first name of the person booking the meeting.
Show child attributes
Show child attributes
The last name of the person booking the meeting.
Show child attributes
Show child attributes
The unique path identifier for the meeting page.
The date and time when the meeting is scheduled to start, in ISO 8601 format.
The locale used for formatting dates and times in the meeting booking.
The timezone in which the meeting is scheduled.
Response
successful operation
The timezone the meeting was booked from.
The unique identifier for the meeting's calendar event.
The ID of the contact associated to the meeting.
The duration of the meeting in milliseconds.
The date and time when the meeting is scheduled to end, in ISO 8601 format.
Show child attributes
Show child attributes
Whether the meeting was booked offline and no associated calendar event was created.
Show child attributes
Show child attributes
The date and time when the meeting is scheduled to start, in ISO 8601 format.
The title of the meeting and calendar event.
The locale the meeting was booked with, used to determine date formatting in calendar event description.
The physical or virtual location where the meeting will take place.
The unique identifier for the web conference meeting.
The URL for accessing the meeting's web conference.
Was this page helpful?