Booking Endpoints
Create, list, retrieve, complete, and cancel bookings through the HyperXI REST API.
POST
/api/public/:slug/bookCreate a new booking. This is a public endpoint -- no authentication required. The :slug parameter is the tenant slug.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
slot_id | string (uuid) | yes | The slot ID to book |
room_id | string (uuid) | yes | Room ID |
party_size | integer | yes | Number of people in the booking |
customer_name | string | yes | Customer full name |
customer_email | string | yes | Customer email address |
customer_phone | string | no | Customer phone number |
newsletter_opt_in | boolean | no | Opt in to newsletter |
sms_opt_in | boolean | no | Opt in to SMS notifications |
discount_code | string | no | Discount code to apply |
voucher_code | string | no | Voucher code to redeem |
Examples
curl
curl -X POST "https://api.hyperxi.com:10443/api/public/downtown-escape/book" \
-H "Content-Type: application/json" \
-d '{
"slot_id": "a1b2c3d4-...",
"room_id": "f47ac10b-...",
"party_size": 4,
"customer_name": "John Smith",
"customer_email": "john@example.com",
"customer_phone": "+15551234567"
}'Node.js
const response = await fetch(
"https://api.hyperxi.com:10443/api/public/downtown-escape/book",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
slot_id: "a1b2c3d4-...",
room_id: "f47ac10b-...",
party_size: 4,
customer_name: "John Smith",
customer_email: "john@example.com",
customer_phone: "+15551234567",
}),
}
);
const data = await response.json();Response
{
"success": true,
"data": {
"id": "b5c6d7e8-...",
"status": "pending",
"room_id": "f47ac10b-...",
"slot_id": "a1b2c3d4-...",
"party_size": 4,
"customer_name": "John Smith",
"customer_email": "john@example.com",
"total_cents": 14000,
"checkout_url": "https://checkout.stripe.com/...",
"created_at": "2026-04-13T10:00:00Z"
}
}GET
/api/bookingsList bookings for your tenant. Requires authentication. Supports filtering by status, room, date range, and pagination.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | no | Filter: pending | confirmed | completed | cancelled | no_show |
room_id | string (uuid) | no | Filter by room |
start_date | string | no | Filter from date (YYYY-MM-DD) |
end_date | string | no | Filter to date (YYYY-MM-DD) |
limit | integer | no | Max results (1-100, default 50) |
Examples
curl
curl -X GET "https://api.hyperxi.com:10443/api/bookings?status=confirmed&limit=10" \
-H "Authorization: Bearer hxi_live_your_key_here" \
-H "x-tenant-slug: downtown-escape"Node.js
const response = await fetch(
"https://api.hyperxi.com:10443/api/bookings?status=confirmed&limit=10",
{
headers: {
"Authorization": "Bearer hxi_live_your_key_here",
"x-tenant-slug": "downtown-escape",
},
}
);
const data = await response.json();Response
{
"success": true,
"data": [
{
"id": "b5c6d7e8-...",
"status": "confirmed",
"room_name": "The Vault",
"slot_date": "2026-04-15",
"slot_time": "14:00",
"party_size": 4,
"customer_name": "John Smith",
"total_cents": 14000,
"created_at": "2026-04-13T10:00:00Z"
}
]
}GET
/api/bookings/:idGet a single booking by ID with full details including payment information and waiver status. Requires authentication.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | yes | Booking ID |
Examples
curl
curl -X GET "https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-..." \
-H "Authorization: Bearer hxi_live_your_key_here" \
-H "x-tenant-slug: downtown-escape"Node.js
const response = await fetch(
"https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-...",
{
headers: {
"Authorization": "Bearer hxi_live_your_key_here",
"x-tenant-slug": "downtown-escape",
},
}
);
const data = await response.json();Response
{
"success": true,
"data": {
"id": "b5c6d7e8-...",
"status": "confirmed",
"room_id": "f47ac10b-...",
"room_name": "The Vault",
"slot_id": "a1b2c3d4-...",
"slot_date": "2026-04-15",
"slot_time": "14:00",
"party_size": 4,
"customer_name": "John Smith",
"customer_email": "john@example.com",
"customer_phone": "+15551234567",
"total_cents": 14000,
"payment_status": "paid",
"waiver_status": "pending",
"created_at": "2026-04-13T10:00:00Z"
}
}POST
/api/bookings/:id/completeMark a booking as completed after the escape room session finishes. Requires authentication.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | yes | Booking ID |
Examples
curl
curl -X POST "https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-.../complete" \
-H "Authorization: Bearer hxi_live_your_key_here" \
-H "x-tenant-slug: downtown-escape"Node.js
const response = await fetch(
"https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-.../complete",
{
method: "POST",
headers: {
"Authorization": "Bearer hxi_live_your_key_here",
"x-tenant-slug": "downtown-escape",
},
}
);
const data = await response.json();Response
{
"success": true,
"data": {
"id": "b5c6d7e8-...",
"status": "completed",
"completed_at": "2026-04-15T15:05:00Z"
}
}POST
/api/bookings/:id/cancelCancel a booking. If the booking has been paid, a refund may be automatically processed depending on your cancellation policy. Requires authentication.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | yes | Booking ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
reason | string | yes | Reason for cancellation |
Examples
curl
curl -X POST "https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-.../cancel" \
-H "Authorization: Bearer hxi_live_your_key_here" \
-H "x-tenant-slug: downtown-escape" \
-H "Content-Type: application/json" \
-d '{ "reason": "Customer requested reschedule" }'Node.js
const response = await fetch(
"https://api.hyperxi.com:10443/api/bookings/b5c6d7e8-.../cancel",
{
method: "POST",
headers: {
"Authorization": "Bearer hxi_live_your_key_here",
"x-tenant-slug": "downtown-escape",
"Content-Type": "application/json",
},
body: JSON.stringify({
reason: "Customer requested reschedule",
}),
}
);
const data = await response.json();Response
{
"success": true,
"data": {
"id": "b5c6d7e8-...",
"status": "cancelled",
"cancelled_at": "2026-04-13T12:00:00Z",
"cancellation_reason": "Customer requested reschedule"
}
}