curl --request POST \
--url https://app.famulor.io/api/v1/bookings/{id}/reschedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"start": "2026-08-14T09:30:00Z"
}
'import requests
url = "https://app.famulor.io/api/v1/bookings/{id}/reschedule"
payload = { "start": "2026-08-14T09:30:00Z" }
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({start: '2026-08-14T09:30:00Z'})
};
fetch('https://app.famulor.io/api/v1/bookings/{id}/reschedule', 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://app.famulor.io/api/v1/bookings/{id}/reschedule",
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([
'start' => '2026-08-14T09:30:00Z'
]),
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://app.famulor.io/api/v1/bookings/{id}/reschedule"
payload := strings.NewReader("{\n \"start\": \"2026-08-14T09:30:00Z\"\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://app.famulor.io/api/v1/bookings/{id}/reschedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"start\": \"2026-08-14T09:30:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/bookings/{id}/reschedule")
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 \"start\": \"2026-08-14T09:30:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type_name": "<string>",
"event_type_slug": "<string>",
"invitee_name": "<string>",
"invitee_email": "<string>",
"invitee_phone": "<string>",
"invitee_timezone": "<string>",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"status": "confirmed",
"source": "web",
"call_id": "<string>",
"notes": "<string>",
"answers": {},
"created_at": "2023-11-07T05:31:56Z"
}
}Reschedule a booking
Moves a confirmed booking to a new start time. The new slot is validated against the event type’s availability (the booking’s own slot does not block itself), unless allow_outside_availability is true (staff override: any future time within 2 years that does not overlap a confirmed booking of the same event type); a lost race for the slot returns 409. Sends an updated ICS invitation to the invitee and re-pushes the external calendar event (both best-effort).
Required scope: bookings:write (keys without scope restrictions have full access).
curl --request POST \
--url https://app.famulor.io/api/v1/bookings/{id}/reschedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"start": "2026-08-14T09:30:00Z"
}
'import requests
url = "https://app.famulor.io/api/v1/bookings/{id}/reschedule"
payload = { "start": "2026-08-14T09:30:00Z" }
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({start: '2026-08-14T09:30:00Z'})
};
fetch('https://app.famulor.io/api/v1/bookings/{id}/reschedule', 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://app.famulor.io/api/v1/bookings/{id}/reschedule",
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([
'start' => '2026-08-14T09:30:00Z'
]),
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://app.famulor.io/api/v1/bookings/{id}/reschedule"
payload := strings.NewReader("{\n \"start\": \"2026-08-14T09:30:00Z\"\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://app.famulor.io/api/v1/bookings/{id}/reschedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"start\": \"2026-08-14T09:30:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/bookings/{id}/reschedule")
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 \"start\": \"2026-08-14T09:30:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type_name": "<string>",
"event_type_slug": "<string>",
"invitee_name": "<string>",
"invitee_email": "<string>",
"invitee_phone": "<string>",
"invitee_timezone": "<string>",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"status": "confirmed",
"source": "web",
"call_id": "<string>",
"notes": "<string>",
"answers": {},
"created_at": "2023-11-07T05:31:56Z"
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.
Path Parameters
Booking ID
Body
New start time in ISO 8601 UTC. The duration stays the one of the event type.
Set true to book outside the event type's open times (staff override). Any future time within the next 2 years is accepted; the time must not overlap another confirmed booking of the same event type. Guests on the public booking page only ever see open times.
Response
The rescheduled booking.
Show child attributes
Show child attributes