Create & Manage
The full booking lifecycle via the API: creating, listing for a period, reading, updating and canceling.
The full booking lifecycle: creating, listing for a period, reading, updating and canceling. All endpoints require a Bearer token (see Authentication).
Base path: /api/rsv/admin/restaurants/{restaurantId}/reservations.
| Method | Path | Purpose |
|---|---|---|
POST | /reservations | Create a booking |
GET | /reservations | List of bookings for a period |
GET | /reservations/{reservationId} | Get a booking by ID |
PUT | /reservations/{reservationId} | Update a booking |
PUT | /reservations/{reservationId}/cancel | Cancel a booking |
Create a booking
POST /reservations
Creates a new reservation. The behavior depends on the token type:
Hostme/Partner— the booking is created on behalf of the current user (host/manager).Vendor— the booking is created on behalf of an external app (POS, CRM, etc.).
Body — CreateReservationContract. The most used top-level fields are below.
Main fields
| Field | Type | Description |
|---|---|---|
reservationTime | date-time | Date and time of the visit (restaurant local time) |
groupSize | integer | Number of guests |
customerName | string | Guest name |
phone | string | Phone |
email | string | |
tableNumber | string | Preferred/assigned table |
specialRequests | string | Guest requests |
internalNotes | string | Internal notes (not for the guest) |
aboutGuestNotes | string | Notes about the guest |
amount | number | Amount (e.g. prepayment/check) |
estimatedTurnOverTime | integer | Expected table turnover time, minutes |
source | string | Booking source (a label for your channel) |
state | string | State/status |
deliveryType | string | Service type (dine-in/delivery/pickup) |
paymentType | string | Payment type |
depositToken | string | Deposit token (if prepayment is used) |
eventId | integer | Event ID if the booking is for an event |
externalUserId | string | The guest’s external ID on your side |
createdBy | string | Who created it |
Nested objects
| Field | Object | Contains |
|---|---|---|
customerProfile | ProfileData | Guest profile: allergy[], vegetarian, vip, handicapAccessible, anniversary, birthdate, companyName, delivery address |
additionals | Additionals | Flags/requests: highChair, vip, booth, highTop, babyChair, stroller, allergy, vegetarian, contactless, dontDisturb, event, eventTypes[], customs[] |
order | OnlineOrder | Attached order: orderItems[] (productId, amount, modifiers[]), note, total, subTotal, taxes, tips |
referral | ReferralInfoContract | Referral/inviter |
Order refusals. On create and update the server prices
orderItemsfrom the menu before the booking is saved, and rounds amounts to two decimal places. An order it cannot take is refused with400and acode:invalid_price— a product or modifier choice the menu prices below zero;invalid_quantity— theamountof a line or modifier below zero;invalid_amount—tipsor the order total below zero;amount_too_large— a total above21474836.47.
Example (minimal)
curl -X POST https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "reservationTime": "2026-07-01T19:00:00", "groupSize": 2, "customerName": "John Parker", "phone": "+16175550123", "email": "ivan@example.com", "specialRequests": "Window table", "source": "partner-widget" }'Example (with guest profile and requests)
curl -X POST https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "reservationTime": "2026-07-01T20:30:00", "groupSize": 4, "customerName": "Maria Ivanova", "phone": "+16175550100", "additionals": { "highChair": true, "vip": true }, "customerProfile": { "allergy": ["nuts"], "vegetarian": true }, "internalNotes": "Regular guest", "source": "partner-crm" }'Response. On success the created booking is returned as a
BookingContract(see below). Documented errors:400 Bad Request,404 Not Found(body —ProblemDetails).
List for a period
GET /reservations
Returns the restaurant’s bookings for a period. For requests from external apps (scope App),
VendorAppId is set automatically and a date range of no more than 60 days is required.
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
restaurantId * | path | integer | Restaurant identifier |
from | query | date-time | Period start |
to | query | date-time | Period end |
businessDateFrom | query | date | Start by “business date” |
businessDateTo | query | date | End by “business date” |
pending | query | boolean | Pending only |
unviewed | query | boolean | Unviewed only |
includeEvents | query | boolean | Include event bookings |
kind | query | string | Booking kind |
status | query | string | Filter by status |
VendorAppId | query | string | Filter by source app (set automatically for external apps) |
Example
curl -G https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "from=2026-07-01T00:00:00" \ --data-urlencode "to=2026-07-07T23:59:59"For external apps the range is required and limited to 60 days — split long periods into parts.
Get a booking
GET /reservations/{reservationId}
Returns a booking by identifier. Response — BookingContract.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
reservationId * | path | string |
Key response fields (BookingContract)
| Field | Type | Description |
|---|---|---|
customerProfile | object | Guest profile (ProfileData) |
additionals | object | Flags/requests (Additionals) |
details | object | Extra details: cancelOptionName, cancelNote, cancelSource, paymentError, paymentLinkUrl |
waiters[] | array | Assigned servers (id, fullName, …) |
The full
BookingContractobject is extensive (profile, order, check, payment). Only the key blocks are listed here; see the full structure in the Swagger UI.
Update a booking
PUT /reservations/{reservationId}
Updates an existing booking (time, party size, table, etc.). The change is recorded against the current user (for auditing).
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
reservationId * | path | string |
Request body — the same fields as when creating (CreateReservationContract): send
the fields being changed (reservationTime, groupSize, tableNumber, specialRequests, etc.).
curl -X PUT https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations/RID \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "reservationTime": "2026-07-01T20:00:00", "groupSize": 3 }'Cancel a booking
PUT /reservations/{reservationId}/cancel
Cancels a booking on behalf of restaurant staff. Body — CancelReservationContract.
| Field | Type | Description |
|---|---|---|
note | string | Cancellation comment |
cancelOptionName | string | Name of the cancellation reason |
updatedBy | string | Who canceled |
origin | string | Cancellation source |
doNotChargeFee | boolean | Don’t charge the cancellation fee |
Response — the updated booking (BookingContract) with the canceled status.
curl -X PUT https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations/RID/cancel \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "cancelOptionName": "Guest cancelled", "note": "Moved to another day", "doNotChargeFee": true }'Need to moderate bookings from external channels? Use Booking Requests — the host approves a request before it becomes a full booking.