Cancel a Reservation

Cancellation happens on the channel that owns the booking, not on a generic reservation route. This page shows where it is available and what to do when it is not.

There is no generic cancel endpoint

DELETE /v1/reservations/{id} does not exist — the path accepts GET and PATCH only, and PATCH rejects status by name. Cancelling issues a credit refund and revokes access codes, so it is a deliberate operation on the owning channel rather than a field you can set. PATCH changes only checkIn, checkOut, checkInTime, checkOutTime, guestCount and listingId.

Airbnb

Host cancellation is one of the state actions on an Airbnb reservation. Use the Airbnb confirmation code, not the Repull reservation id.

POST/v1/channels/airbnb/reservations/{code}
curl -X POST "https://api.repull.dev/v1/channels/airbnb/reservations/HMABCD1234" \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action": "cancel"}'

The same route carries the other state actions: accept and decline for inquiries and reservation requests, and pre-approve for inquiries.

Host cancellations carry penalties

Cancelling as the host is not the same as a guest cancelling. Airbnb applies host cancellation penalties — fees, a blocked calendar, and a public note on the listing. Confirm the cancellation policy and, where possible, have the guest cancel from their side instead.

Cancelling a reservation that is already cancelled returns invalid_state. Treat that as a soft success — the reservation is in the state you wanted.

Booking.com

Booking.com reservations cannot be cancelled through this API. POST /v1/channels/booking/reservations acknowledges reservations so Booking.com removes them from the new queue — it does not cancel them. Cancel from the Booking.com extranet, then re-read the reservation to pick up the new state.

Other channels

VRBO is read-only today, so cancellations are made on the channel and read back here. For PMS-sourced reservations, cancel in the PMS — it remains the system of record, and the change flows back on the next sync.

Reacting to a cancellation

However a booking is cancelled, subscribe to reservation.cancelled so your system hears about it once rather than polling. That covers cancellations made in an extranet or a PMS, which you would otherwise miss entirely.

curl -X POST "https://api.repull.dev/v1/webhooks" \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/hooks/repull",
    "events": ["reservation.cancelled"]
  }'

API Reference

See the complete Reservations API Reference for list, create, and update, and the capability matrix for what each channel supports.

AI