For the complete documentation index, see llms.txt.

POST /v1/proposals/{id}/cancel

Cancel Proposal

Cancel an `accepted` proposal. Both calendar events are deleted and the underlying booking transitions to `cancelled`. The other party receives a cancellation email naming the actor. Only an existing participant can cancel. Cancellation is only valid from the `accepted` state — `proposed`, `countered`, `rejected`, `expired`, and already-`cancelled` proposals return 409. Internally the saga moves through a transient `cancelling` status while calendar deletes are in flight; if any participant's calendar delete fails, the saga rolls back to `accepted` and returns `502 calendar_unavailable`. ## Error codes - `403 forbidden` — caller is not a participant of this proposal - `404 not_found` — proposal does not exist - `409 conflict` — proposal is not in `accepted` state, or another cancel/accept is racing - `502 calendar_unavailable` — upstream calendar provider failed during the delete phase; safe to retry

Auth required: Yes

Parameters

Responses

Authentication

Requires authentication. Pass a Bearer token (Supabase JWT) or an API key (`Authorization: Bearer vennio_sk_live_*`) in the request headers.

Base URL: https://api.vennio.app