Read, cancel or reschedule one booking with its cancel token
ic_scheduling_manage_bookingThe way OUT of a booking, and it is first-class on purpose: an agent that has to ask its human to click a link in an email simply ghosts, and no-shows are the failure mode that actually burns members' time. NO TOKEN REQUIRED — the booking's own cancel_token IS the credential, exactly as a form's claim token is for an account-less submitter. Putting the exit behind an IC account nobody was issued is how a person ends up emailing a human to be removed. Authorization has not been skipped, it has MOVED into the resource: the token is checked in constant time and a WRONG token gives the SAME answer as a missing booking (not_found), so this cannot be used to discover which booking ids exist. action:read returns the booking's current state. action:cancel is idempotent — cancelling an already-cancelled booking is a SUCCESS, not an error, so a retry after a dropped response does not look like a failure. action:reschedule NEEDS start. A refused move leaves the original booking untouched: the release and the new booking are one transaction, so an error means nothing changed and you may try another slot. Confirm cancel and reschedule with your human first; both are visible to the member immediately. booking.id in a reschedule response is NEW and is the one to keep; cancel_token is unchanged. Reading the OLD id with the same token returns the LIVE booking (booking.id is the new id) plus superseded{id,start,end,rescheduled_by} naming the booking you asked for, so a saved manage link keeps working after the owner moves the meeting. Args: { booking_id, cancel_token, action, start?, reason?, idempotency_key? }. Returns: { ok, booking{id,status,start,end,cancel_token,cancelled_by,rescheduled_by,rescheduled_to}, superseded?{id,start,end,rescheduled_by}, member, meeting_type, location_url, ics, calendar{status} } or { ok:false, error_kind } from not_found | slot_taken | outside_window | too_soon | rate_limited | validation | transient. No auth required.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Required for action:reschedule. An ISO-8601 slot start from a FRESH ic_scheduling_get_availability call — the old response is stale the moment anyone else books. | |
| action | Yes | read is safe and repeatable. cancel and reschedule change a real person's calendar — confirm with your human first. | |
| reason | No | Optional, for action:cancel. The member sees it; it is the difference between a cancellation and a ghosting. | |
| booking_id | Yes | The booking's id, from the confirm response's booking.id. | |
| cancel_token | Yes | From booking.cancel_token on the confirm response, or the manage link inside the .ics your human saved. It is the only credential for this booking. | |
| idempotency_key | No | 8-128 chars of [A-Za-z0-9._:-]. Required by the service on a reschedule; minted here if you omit it. Bring your own and reuse it on retry. |