Conventions: requests and responses
Rules common to all endpoints: data formats, dates and times, identifiers, pagination and typical request parameters.
Rules that apply to every API endpoint: formats, dates, identifiers, pagination.
Data formats
| Value | |
|---|---|
| Request body | JSON, header Content-Type: application/json |
| Response body | JSON, application/json |
| Encoding | UTF-8 |
Most POST/PUT endpoints also accept application/json-patch+json, text/json
and application/*+json, but plain application/json is recommended.
Date and time
All time values use ISO 8601.
| Type in the spec | Example | Meaning |
|---|---|---|
date-time | 2026-07-01T19:00:00 | Date and time |
date | 2026-07-01 | Date only (e.g. businessDateFrom/businessDateTo) |
Time zone. Reservation times are interpreted in the restaurant’s local time zone. The restaurant’s time zone is available from
GET /api/core/admin/account/me→restaurants[].timeZone.date-timevalues usually carry no zone offset — send the restaurant’s local time. If you operate in a different time zone, convert the time on your side.
Identifiers
ID types in the API are mixed — be careful:
| Entity | Type | Example |
|---|---|---|
Restaurant (restaurantId) | integer | 123 |
Reservation (reservationId) | string | "a1b2c3d4-..." |
Member/guest (memberId) | string | "..." |
Product (productId), modifier | string | "..." |
Partner app (appId) | string | "..." |
restaurantId is numeric and appears in almost every path:
/api/.../restaurants/{restaurantId}/.... Most other identifiers are strings (GUIDs).
Pagination
List endpoints with paged output return a PagedResult wrapper:
{ "results": [ /* items */ ], "count": 1234}| Field | Type | Description |
|---|---|---|
results | array | Items on the current page |
count | integer (int64) | Total number of items (for computing the page count) |
Paging and filtering parameters (page, pageSize, search, date ranges, etc.)
depend on the specific endpoint — see its description in the relevant section.
Filtering by date
Some list endpoints require a date range. For example, the list of reservations for external
apps (scope App) requires a mandatory range of no more than 60 days
(see Reservations).
Null and optional fields
- In responses most fields are nullable — check for
nullbefore use. - In requests send only the fields you need; missing ones are treated as unset.
- Fields marked
*(required) in the sections must be present in the request.
Idempotency and duplicates
The spec does not describe a dedicated idempotency header (Idempotency-Key).
To avoid duplicates on retry:
- Keep a “your ID ↔ Hostme reservation ID” mapping on your side.
- Use the
sourcefield (and, where applicable,externalUserId) to mark where a record came from. - On network errors, first check whether the record was created (with a repeat GET) before retrying the POST.
Headers
| Header | Value |
|---|---|
Authorization | Bearer <access_token> — required for all protected requests |
Content-Type | application/json — for requests with a body |
Accept | application/json (recommended) |