Skip to content

Cancel a booking

POST
/public/v1/bookings/{reference}/cancel
curl --request POST \
--url https://example.kwickbooking.com/public/v1/bookings/example/cancel \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "phone": "07911 123456", "reason": "Can'\''t make it", "venueId": null }'

Cancels a booking at once and frees its table. A paid deposit is never refunded automatically: the venue’s team is told and will be in touch. Inside the venue’s notice for cancellations the request goes to the venue instead (needs_venue). Send an Idempotency-Key header.

reference
required
string
Media typeapplication/json

POST /public/v1/bookings/{reference}/cancel: the phone on the booking and an optional reason.

object
phone
required
string
reason
null | string
venueId
null | string format: uuid
Example
{
"phone": "07911 123456",
"reason": "Can't make it",
"venueId": null
}

OK

Media typeapplication/json

The answer to an amend or cancel: amended, cancelled or already_cancelled with the booking; unavailable with alternatives; or needs_venue with the enquiry raised for staff.

object
outcome
required
string
booking
required
One of:
null
alternatives
required
Array<object>

Another time, day or venue that fits when the asked one doesn’t.

object
venueId
required
string format: uuid
venueName
required
string
date
required
string
time
required
string
options
required
Array<object>

A booking type that fits a time, with its length and deposit.

object
bookingTypeId
required
string format: uuid
bookingType
required
string
durationMinutes
required
integer format: int32
deposit
required

A deposit as a guest would hear it.

object
required
required
boolean
amountPence
required
integer format: int32
amountDisplay
required
null | string
enquiryId
required
null | string format: uuid
depositTopUp
required
One of:
null
summary
required
string
Example
{
"outcome": "cancelled",
"booking": {
"reference": "48271936",
"venueId": "01920000-0000-7000-8000-000000000001",
"venueName": "Soho",
"date": "2026-10-16",
"time": "20:00",
"partySize": 4,
"bookingType": "Table booking",
"state": "cancelled",
"guestFirstName": "Sam",
"deposit": {
"required": false,
"amountPence": 0,
"amountDisplay": null,
"status": "none"
},
"expectedArrival": null
},
"alternatives": [],
"enquiryId": null,
"depositTopUp": null,
"summary": "Cancelled: Fri 16/10 at 20:00 for 4."
}
Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples
Exampleidempotency-key-required

Idempotency-Key required

{
"type": "https://developers.kwickblocks.ai/problems/idempotency-key-required",
"title": "Idempotency-Key required",
"status": 400,
"detail": "This request needs an Idempotency-Key header."
}

Invalid or missing integration key (https://developers.kwickblocks.ai/problems/invalid-key)

Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples
Exampleinvalid-key

Invalid or missing integration key

{
"type": "https://developers.kwickblocks.ai/problems/invalid-key",
"title": "Invalid or missing integration key",
"status": 401,
"detail": "This integration key isn't valid. Ask the venue's admin for a new one."
}
Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples
Examplecapability-missing

Capability not granted

{
"type": "https://developers.kwickblocks.ai/problems/capability-missing",
"title": "Capability not granted",
"status": 403,
"detail": "This integration key isn't allowed to do that. Ask the venue's admin to add the capability."
}
Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples
Examplebooking-not-found

Booking not found

{
"type": "https://developers.kwickblocks.ai/problems/booking-not-found",
"title": "Booking not found",
"status": 404,
"detail": "I couldn't find a booking with that reference and phone number."
}
Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples

Booking can't be changed

{
"type": "https://developers.kwickblocks.ai/problems/booking-not-changeable",
"title": "Booking can't be changed",
"status": 409,
"detail": "This booking can't be changed any more."
}
Media typeapplication/problem+json

RFC 9457 problem details. type is a URI with a page describing the problem.

object
type
required
string format: uri
title
required
string
status
required
integer format: int32
detail
required

Safe to read to a guest.

string
instance
string
traceId
string
code

A machine-readable code on the widget’s routes.

string
Examples

Too many requests

{
"type": "https://developers.kwickblocks.ai/problems/rate-limited",
"title": "Too many requests",
"status": 429,
"detail": "There have been too many requests. Please try again in a minute."
}