Calendar
Take a booking
Books a specific time. The calendar holds the slot, emails the attendee and the host, and creates the connected calendar event - exactly as if the attendee had booked it themselves. Use a start time from the slots endpoint; if the slot has gone since, the calendar’s own message says so and you should offer another. Requires scope calendar:write.
POST
/
calendar
/
bookings
Take a booking
curl --request POST \
--url https://api.smartlyq.com/v1/calendar/bookings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"event_type_id": 123,
"start": "<string>",
"email": "<string>",
"name": "<string>",
"timezone": "<string>",
"notes": "<string>",
"contact_id": 123
}
'import requests
url = "https://api.smartlyq.com/v1/calendar/bookings"
payload = {
"event_type_id": 123,
"start": "<string>",
"email": "<string>",
"name": "<string>",
"timezone": "<string>",
"notes": "<string>",
"contact_id": 123
}
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({
event_type_id: 123,
start: '<string>',
email: '<string>',
name: '<string>',
timezone: '<string>',
notes: '<string>',
contact_id: 123
})
};
fetch('https://api.smartlyq.com/v1/calendar/bookings', 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.smartlyq.com/v1/calendar/bookings",
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([
'event_type_id' => 123,
'start' => '<string>',
'email' => '<string>',
'name' => '<string>',
'timezone' => '<string>',
'notes' => '<string>',
'contact_id' => 123
]),
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.smartlyq.com/v1/calendar/bookings"
payload := strings.NewReader("{\n \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\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.smartlyq.com/v1/calendar/bookings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartlyq.com/v1/calendar/bookings")
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 \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"booking_uid": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"status": "<string>"
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}Authorizations
API key from Developer dashboard (Bearer token).
Body
application/json
ISO 8601 start time, from the slots endpoint.
Attendee email. The confirmation goes here.
Attendee name. Defaults to the email.
Attendee's IANA timezone.
CRM contact to link the booking to.
⌘I
Take a booking
curl --request POST \
--url https://api.smartlyq.com/v1/calendar/bookings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"event_type_id": 123,
"start": "<string>",
"email": "<string>",
"name": "<string>",
"timezone": "<string>",
"notes": "<string>",
"contact_id": 123
}
'import requests
url = "https://api.smartlyq.com/v1/calendar/bookings"
payload = {
"event_type_id": 123,
"start": "<string>",
"email": "<string>",
"name": "<string>",
"timezone": "<string>",
"notes": "<string>",
"contact_id": 123
}
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({
event_type_id: 123,
start: '<string>',
email: '<string>',
name: '<string>',
timezone: '<string>',
notes: '<string>',
contact_id: 123
})
};
fetch('https://api.smartlyq.com/v1/calendar/bookings', 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.smartlyq.com/v1/calendar/bookings",
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([
'event_type_id' => 123,
'start' => '<string>',
'email' => '<string>',
'name' => '<string>',
'timezone' => '<string>',
'notes' => '<string>',
'contact_id' => 123
]),
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.smartlyq.com/v1/calendar/bookings"
payload := strings.NewReader("{\n \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\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.smartlyq.com/v1/calendar/bookings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartlyq.com/v1/calendar/bookings")
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 \"event_type_id\": 123,\n \"start\": \"<string>\",\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"timezone\": \"<string>\",\n \"notes\": \"<string>\",\n \"contact_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"booking_uid": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"status": "<string>"
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}
