curl --request PATCH \
--url https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"name": "Eve Smith",
"email": "eve@example.com",
"slot_date": "2025-07-25",
"slot_start_time": "10:30 AM",
"time_zone": "Asia/Kolkata",
"override_availability": false,
"reschedule_reason": "I want to change the booking time",
"cancel_reason": "I am not available",
"rejection_reason": "Time slot no longer available",
"meeting_outcome_id": "59413def-60eb-47c6-b390-098fcf583b66"
}
'const options = {
method: 'PATCH',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Eve Smith',
email: 'eve@example.com',
slot_date: '2025-07-25',
slot_start_time: '10:30 AM',
time_zone: 'Asia/Kolkata',
override_availability: false,
reschedule_reason: 'I want to change the booking time',
cancel_reason: 'I am not available',
rejection_reason: 'Time slot no longer available',
meeting_outcome_id: '59413def-60eb-47c6-b390-098fcf583b66'
})
};
fetch('https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id}"
payload = {
"name": "Eve Smith",
"email": "eve@example.com",
"slot_date": "2025-07-25",
"slot_start_time": "10:30 AM",
"time_zone": "Asia/Kolkata",
"override_availability": False,
"reschedule_reason": "I want to change the booking time",
"cancel_reason": "I am not available",
"rejection_reason": "Time slot no longer available",
"meeting_outcome_id": "59413def-60eb-47c6-b390-098fcf583b66"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"sid": "<string>",
"parent_booking_id": "<string>",
"email": "<string>",
"name": "<string>",
"host_name": "<string>",
"host_email": "<string>",
"is_multihost": true,
"multihosts": [
{
"name": "<string>",
"email": "<string>"
}
],
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"time_zone": "<string>",
"starts_at_for_client": "<string>",
"ends_at_for_client": "<string>",
"status": "<string>",
"cancel_reason": "<string>",
"cancelled_by": "<string>",
"reschedule_requested": true,
"preferred_meeting_spot": "<string>",
"room_type": "daily",
"room_url": "<string>",
"room_id": "<string>",
"spot_details": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"meeting_id": "<string>",
"meeting": {
"name": "<string>"
},
"no_show": true,
"is_overridden": true,
"bypassed_rules": [
"<string>"
],
"meeting_outcome": {
"id": "59413def-60eb-47c6-b390-098fcf583b66",
"name": "Pricing Discussion",
"color": "yellow",
"kind": "custom",
"color_hex": "#EAB308",
"is_system": false,
"is_organization_owned": true
},
"notes_url": "<string>",
"internal_notes": "<string>",
"metadata": {},
"admin_booking_url": "<string>",
"client_booking_url": "<string>",
"form_responses": [
{
"field": "<string>",
"value": "<string>",
"type": "<string>",
"field_code": "<string>"
}
],
"form_responses_as_hash": {},
"add_on_services": [
{
"id": "0d3c1e8a-58b7-4c1f-a7f3-3c2f5d1b9e10",
"add_on_service_id": "77150ec6-d4f0-4665-98f0-34bda69f7b3a",
"name": "Sauna",
"duration": 30,
"amount": "25.5",
"currency": "USD",
"free": false
}
],
"payment": {
"id": "f46c9ddf-221d-4238-afb2-280c1c6b3185",
"external_id": "pi_3ThCkv2c3CtEndqE1BwejQno",
"provider": "stripe",
"amount": "100.0",
"currency": "USD",
"status": "successful",
"successful": true,
"payment_at": "2026-06-11T17:51:09.321Z"
}
}Update a booking
Update a booking. Use this endpoint to reschedule a booking by providing new slot details, change the booking status (cancel, approve, reject), or assign a meeting outcome to the booking. A rescheduled booking keeps its add-on services and their duration.
To reschedule to a time outside the scheduling link’s availability, pass override_availability: true along with the new slot. The booking keeps its current host.
curl --request PATCH \
--url https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"name": "Eve Smith",
"email": "eve@example.com",
"slot_date": "2025-07-25",
"slot_start_time": "10:30 AM",
"time_zone": "Asia/Kolkata",
"override_availability": false,
"reschedule_reason": "I want to change the booking time",
"cancel_reason": "I am not available",
"rejection_reason": "Time slot no longer available",
"meeting_outcome_id": "59413def-60eb-47c6-b390-098fcf583b66"
}
'const options = {
method: 'PATCH',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Eve Smith',
email: 'eve@example.com',
slot_date: '2025-07-25',
slot_start_time: '10:30 AM',
time_zone: 'Asia/Kolkata',
override_availability: false,
reschedule_reason: 'I want to change the booking time',
cancel_reason: 'I am not available',
rejection_reason: 'Time slot no longer available',
meeting_outcome_id: '59413def-60eb-47c6-b390-098fcf583b66'
})
};
fetch('https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetocal.com/api/external/v2/bookings/{booking_id}"
payload = {
"name": "Eve Smith",
"email": "eve@example.com",
"slot_date": "2025-07-25",
"slot_start_time": "10:30 AM",
"time_zone": "Asia/Kolkata",
"override_availability": False,
"reschedule_reason": "I want to change the booking time",
"cancel_reason": "I am not available",
"rejection_reason": "Time slot no longer available",
"meeting_outcome_id": "59413def-60eb-47c6-b390-098fcf583b66"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"sid": "<string>",
"parent_booking_id": "<string>",
"email": "<string>",
"name": "<string>",
"host_name": "<string>",
"host_email": "<string>",
"is_multihost": true,
"multihosts": [
{
"name": "<string>",
"email": "<string>"
}
],
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"time_zone": "<string>",
"starts_at_for_client": "<string>",
"ends_at_for_client": "<string>",
"status": "<string>",
"cancel_reason": "<string>",
"cancelled_by": "<string>",
"reschedule_requested": true,
"preferred_meeting_spot": "<string>",
"room_type": "daily",
"room_url": "<string>",
"room_id": "<string>",
"spot_details": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"meeting_id": "<string>",
"meeting": {
"name": "<string>"
},
"no_show": true,
"is_overridden": true,
"bypassed_rules": [
"<string>"
],
"meeting_outcome": {
"id": "59413def-60eb-47c6-b390-098fcf583b66",
"name": "Pricing Discussion",
"color": "yellow",
"kind": "custom",
"color_hex": "#EAB308",
"is_system": false,
"is_organization_owned": true
},
"notes_url": "<string>",
"internal_notes": "<string>",
"metadata": {},
"admin_booking_url": "<string>",
"client_booking_url": "<string>",
"form_responses": [
{
"field": "<string>",
"value": "<string>",
"type": "<string>",
"field_code": "<string>"
}
],
"form_responses_as_hash": {},
"add_on_services": [
{
"id": "0d3c1e8a-58b7-4c1f-a7f3-3c2f5d1b9e10",
"add_on_service_id": "77150ec6-d4f0-4665-98f0-34bda69f7b3a",
"name": "Sauna",
"duration": 30,
"amount": "25.5",
"currency": "USD",
"free": false
}
],
"payment": {
"id": "f46c9ddf-221d-4238-afb2-280c1c6b3185",
"external_id": "pi_3ThCkv2c3CtEndqE1BwejQno",
"provider": "stripe",
"amount": "100.0",
"currency": "USD",
"status": "successful",
"successful": true,
"payment_at": "2026-06-11T17:51:09.321Z"
}
}status for approve/reject/cancel, and slot_date, slot_start_time, and time_zone to reschedule. See the operation description below for details.{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Path Parameters
ID or SID of the booking that you want to update.
"hda6gxy"
Body
Name of person making the booking. This is applied only as part of a reschedule, so send it alongside slot_date and slot_start_time. A request carrying it without them is rejected with a 422 error.
"Eve Smith"
Email of person making the booking. This is applied only as part of a reschedule, so send it alongside slot_date and slot_start_time. A request carrying it without them is rejected with a 422 error.
"eve@example.com"
Date on which the booking is to be rescheduled. This should be in "YYYY-MM-DD" format.
"2025-07-25"
Start time for the booking. This should be in "HH:MM AM/PM" format.
"10:30 AM"
Time zone of person rescheduling the booking.
"Asia/Kolkata"
When true, reschedules to the requested time even if it is outside the scheduling link's availability, following the same rules as override_availability on Create a booking. Used only when rescheduling. The response includes is_overridden and bypassed_rules.
Reason for rescheduling the booking (optional).
"I want to change the booking time"
Sets booking lifecycle status in one call (replaces v1 approve / reject / cancel endpoints). Use approved to approve, rejected to reject (optional rejection_reason), or cancelled to cancel (optional cancel_reason). Do not send this field when you are only rescheduling or updating other attributes.
cancelled, approved, rejected Reason for cancelling the booking. Used when status is cancelled.
"I am not available"
Reason for rejecting the booking. Used when status is rejected.
"Time slot no longer available"
Assign a meeting outcome to the booking by providing the outcome's ID. Pass null to remove the currently assigned outcome. This parameter cannot be combined with status or reschedule parameters (slot_date, slot_start_time) in the same request. Meeting outcomes can only be set on confirmed or parallel-error bookings. You can get the outcome ID from the List meeting outcomes endpoint.
"59413def-60eb-47c6-b390-098fcf583b66"
Response
OK - Booking updated successfully
Unique identifier for the booking.
Short identifier (SID) for the booking, used in URLs and API calls.
Reference to the parent booking if this is a group booking.
Email address of the person who made the booking.
Name of the person who made the booking.
Name of the primary host for the meeting.
Email address of the primary host for the meeting.
Whether the meeting has multiple hosts.
Start time of the booking in UTC.
End time of the booking in UTC.
Time zone of the booking location.
Start time of the booking in the client's local time zone.
End time of the booking in the client's local time zone.
Current status of the booking (e.g., confirmed, cancelled, awaiting_approval, rejected).
Reason provided when the booking was cancelled.
Name of the person who cancelled the booking.
Whether a reschedule has been requested for this booking.
Preferred meeting platform or location type selected by the client.
Type of meeting room or platform being used.
daily, zoom, jitsi, google_meet, teams, whereby, in_person, custom, phone_call URL for the meeting room or platform.
Unique identifier for the meeting room or platform.
Additional details about the meeting place.
Timestamp when the booking was created.
Timestamp when the booking was last updated.
Unique identifier of the scheduling link this booking belongs to.
Whether the booking is marked as no-show by the host.
Whether the booking was made or rescheduled outside the scheduling link's availability.
Messages for the availability checks skipped by override_availability (e.g., "Host is not available at the time"). Only included in the response to that create or update request.
Meeting outcome assigned to the booking.
Hide child attributes
Hide child attributes
Unique identifier for the meeting outcome.
"59413def-60eb-47c6-b390-098fcf583b66"
Name of the meeting outcome.
"Pricing Discussion"
Color assigned to the meeting outcome.
blue, orange, gray, red, yellow, violet, pink, teal, cyan, green "yellow"
Kind of the meeting outcome.
"custom"
Hex color code for the meeting outcome.
"#EAB308"
Whether this is a system-defined meeting outcome. System outcomes cannot be modified or deleted.
false
Whether this outcome belongs to the organization.
true
URL to access notes or additional information about the booking.
Internal notes about the booking visible only to hosts and admins.
Additional custom data associated with the booking.
URL for hosts and admins to view and manage the booking.
URL for clients to view their booking details.
Responses submitted through the booking form.
Hide child attributes
Hide child attributes
Add-on services chosen for the booking.
Hide child attributes
Hide child attributes
Unique identifier for the booking's add-on service record.
"0d3c1e8a-58b7-4c1f-a7f3-3c2f5d1b9e10"
ID of the scheduling link's add-on service.
"77150ec6-d4f0-4665-98f0-34bda69f7b3a"
"Sauna"
Minutes the add-on service added to the booking.
30
Price charged for the add-on service.
"25.5"
"USD"
Whether the add-on service was free.
false
Payment details for the booking. Included only when a payment exists for the booking.
Hide child attributes
Hide child attributes
Unique identifier of the payment record.
"f46c9ddf-221d-4238-afb2-280c1c6b3185"
Payment reference ID from the payment provider.
"pi_3ThCkv2c3CtEndqE1BwejQno"
Payment provider that processed the payment.
"stripe"
Payment amount.
"100.0"
Currency code. Follows the ISO 4217 standard.
"USD"
Current status of the payment.
"successful"
Whether the payment was completed successfully.
true
Timestamp when the payment was made.
"2026-06-11T17:51:09.321Z"