Skip to the documentation
API

Approve or decline a booking

Answers a booking that waits for approval, on a page whose `config.approval` is true.

POST/bookings/{id}/approve

Runs any of 2 calls on your workspace.

POST /bookings/{id}/approve

Answers a booking that waits for approval, on a page whose config.approval is true.

Example

Both need calendar:write and emails:send, because the guest is emailed from the address of the page.

curl
curl -X POST "$OE/bookings/bkg_2b8d4f6a1c3e5079b6d8f0a2/approve" -H "$AUTH"curl -X POST "$OE/bookings/bkg_2b8d4f6a1c3e5079b6d8f0a2/decline" -H "$AUTH" -H 'content-type: application/json' -d '{  "reason": "I am away that week."}'
Response
{  "object": "booking",  "id": "bkg_2b8d4f6a1c3e5079b6d8f0a2",  "pageId": "bkp_5c1e9a7b3d2f48e6a0b4c7d1",  "pageName": "Intro call",  "status": "confirmed",  "expired": false,  "past": false,  "start": "2026-11-03T09:00:00.000Z",  "end": "2026-11-03T09:30:00.000Z",  "durationMinutes": 30,  "guest": { "name": "Ann Lee", "email": "[email protected]", "timezone": "America/New_York" },  "guests": [],  "answers": [    { "id": "notes", "label": "Anything we should know?", "kind": "long-text", "value": "I would like to talk about pricing." }  ],  "location": "https://meet.example.com/hana",  "eventId": "evt_8a1c3e5f7b2d4960c8e0a2b4",  "endedBy": null,  "endReason": null,  "rescheduleCount": 0,  "guestMailFailed": false,  "createdAt": "2026-10-28T14:12:40.115Z"}

Approving turns the hold on the calendar into a confirmed meeting and sends the guest the invitation.

Declining frees the time and tells the guest. reason is optional, up to 500 characters, and goes into the email.

A booking that is not waiting for approval answers 409 booking_not_pending, and a request whose time has passed 409 booking_ended.

Reference