Skip to content

Make a booking

POST
/public/v1/reservations
curl --request POST \
--url https://example.kwickbooking.com/public/v1/reservations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "venueId": "01920000-0000-7000-8000-000000000001", "date": "2026-10-16", "time": "20:00", "partySize": 4, "bookingTypeId": "01920000-0000-7000-8000-000000000003", "guest": { "name": "Sam Patel", "phone": "07911 123456", "email": null }, "notes": null }'

Books a free time for a named guest with a phone number. The booking’s source is the key’s channel. When the venue’s policy asks for a deposit, the booking is held and a payment link goes to the guest automatically. If the time is gone the answer is unavailable with alternatives; a party larger than the venue takes online is needs_venue. Send an Idempotency-Key header.

Media typeapplication/json

POST /public/v1/reservations: book PartySize at Time on Date (venue-local) for Guest. The booking’s source is always the key’s channel.

object
venueId
required
null | string format: uuid
date
required
string
time
required
string
partySize
required
integer format: int32
bookingTypeId
required
null | string format: uuid
guest
required

The guest a booking is for: a name and a phone number, optionally an email.

object
name
required
string
phone
required
string
email
null | string
notes
null | string
Example
{
"venueId": "01920000-0000-7000-8000-000000000001",
"date": "2026-10-16",
"time": "20:00",
"partySize": 4,
"bookingTypeId": "01920000-0000-7000-8000-000000000003",
"guest": {
"name": "Sam Patel",
"phone": "07911 123456",
"email": null
},
"notes": null
}

OK

Media typeapplication/json

The answer to a booking request, with a summary to read out.

object
outcome
required
string
reference
required
null | string
state
required
null | string
venueId
required
null | string format: uuid
date
required
null | string
time
required
null | string
partySize
required
null | integer format: int32
bookingType
required
null | string
durationMinutes
required
null | integer format: int32
deposit
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
summary
required
string
Examplegenerated
{
"outcome": "example",
"reference": "example",
"state": "example",
"venueId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"date": "example",
"time": "example",
"partySize": 1,
"bookingType": "example",
"durationMinutes": 1,
"deposit": {
"required": true,
"amountPence": 1,
"amountDisplay": "example",
"status": "example",
"sentTo": "example",
"linkExpiresAt": "example"
},
"alternatives": [
{
"venueId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"venueName": "example",
"date": "example",
"time": "example",
"options": [
{
"bookingTypeId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"bookingType": "example",
"durationMinutes": 1,
"deposit": {
"required": true,
"amountPence": 1,
"amountDisplay": "example"
}
}
]
}
],
"summary": "example"
}

Created

Media typeapplication/json

The answer to a booking request, with a summary to read out.

object
outcome
required
string
reference
required
null | string
state
required
null | string
venueId
required
null | string format: uuid
date
required
null | string
time
required
null | string
partySize
required
null | integer format: int32
bookingType
required
null | string
durationMinutes
required
null | integer format: int32
deposit
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
summary
required
string
Example
{
"outcome": "booked",
"reference": "48271936",
"state": "confirmed",
"venueId": "01920000-0000-7000-8000-000000000001",
"date": "2026-10-16",
"time": "20:00",
"partySize": 4,
"bookingType": "Table booking",
"durationMinutes": 120,
"deposit": {
"required": false,
"amountPence": 0,
"amountDisplay": "£0.00",
"status": "not_required",
"sentTo": null,
"linkExpiresAt": null
},
"alternatives": [],
"summary": "Booked: Fri 16/10 at 20:00 for 4. Reference 4827 1936."
}
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

Venue required

{
"type": "https://developers.kwickblocks.ai/problems/venue-required",
"title": "Venue required",
"status": 400,
"detail": "Please say which venue this is for."
}

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
Examplevenue-not-found

Venue not found

{
"type": "https://developers.kwickblocks.ai/problems/venue-not-found",
"title": "Venue not found",
"status": 404,
"detail": "I couldn't find that venue."
}
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-conflict

Idempotency-Key conflict

{
"type": "https://developers.kwickblocks.ai/problems/idempotency-conflict",
"title": "Idempotency-Key conflict",
"status": 409,
"detail": "That Idempotency-Key was already used for a different request."
}
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
Examplerate-limited

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."
}