Discovery
Geospatial venue/room search
| Method | Path | What it does |
|---|---|---|
| GET | /api/rooms/search | Search rooms by proximity, city, difficulty, group size, theme |
| GET | /api/rooms/{slug} | Get a room and its venue by slug |
| GET | /api/rooms/{slug}/reviews | Player notes for a room, newest first |
| GET | /api/slots/available | Available slots for several rooms at once, grouped by room |
| GET | /api/stats | Catalogue counts and the countries of live venues with active rooms |
| GET | /api/rooms/{slug}/availability | Available slots for a room (optionally by day or window) |
Search rooms by proximity, city, difficulty, group size, theme#
/api/rooms/searchPublicParameters
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | Free text over room name, venue name, city and tags |
lat | query | number | Latitude |
lng | query | number | Longitude |
radiusKm | query | number | |
city | query | string | |
country | query | string | ISO 3166-1 alpha-2 code of the venue's country, like BE |
genres | query | string | Comma-separated |
difficulty | query | string | Comma-separated |
minPlayers | query | integer | |
maxPlayers | query | integer | |
themes | query | string | Comma-separated tags |
certifiedOnly | query | boolean | |
limit | query | integer | |
offset | query | integer |
Example request
curl "https://myescaperoom.eu/api/rooms/search?lat=52.3676&lng=4.9041&radiusKm=10&genres=Horror&minPlayers=2"Responses
| Status | Meaning |
|---|---|
200 | Rooms with venue + distance |
Example response
{
"items": [
{
"room": {
"id": "room-01",
"slug": "the-haunted-laboratory",
"name": "The Haunted Laboratory"
},
"venue": {
"city": "Amsterdam"
},
"distanceKm": 1.2
}
],
"total": 1
}Get a room and its venue by slug#
/api/rooms/{slug}PublicParameters
| Name | In | Type | Description |
|---|---|---|---|
slugrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | Room + venue |
404 | Not found |
Player notes for a room, newest first#
/api/rooms/{slug}/reviewsPublicParameters
| Name | In | Type | Description |
|---|---|---|---|
slugrequired | path | string | |
limit | query | integer | |
offset | query | integer |
Responses
| Status | Meaning |
|---|---|
200 | { reviews, total } |
404 | Not found |
Available slots for several rooms at once, grouped by room#
/api/slots/availablePublicOne request for a whole shelf rather than one per room. Never returns a slot that has already started.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
roomIdsrequired | query | string | Comma-separated, max 60 |
from | query | string | Defaults to now |
to | query | string | Defaults to seven days out |
Responses
| Status | Meaning |
|---|---|
200 | { slotsByRoom } |
Catalogue counts and the countries of live venues with active rooms#
/api/statsPublicResponses
| Status | Meaning |
|---|---|
200 | { rooms, venues, cities, countries: [{ code, name }] }. A venue's country in any public or embed response is an ISO 3166-1 alpha-2 code, like BE. |
Available slots for a room (optionally by day or window)#
/api/rooms/{slug}/availabilityPublicA slot is booked whole by one group, so the group size filters nothing: whether a party fits is the room's minPlayers and maxPlayers. Days are YYYY-MM-DD in the venue's time zone; a value that is not a real day is a 400 INVALID_INPUT, never ignored. At most 200 slots come back. A venue may only offer the sessions a host has said they can work for its first few days ahead (its staffing window, set by the venue): inside it, a session with no host yet is left out of every availability answer, and a booking for one is refused with 409 SLOT_UNAVAILABLE. Further ahead every free session is listed.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
slugrequired | path | string | |
date | query | string | One venue-local day. |
from | query | string | First venue-local day of a window, inclusive. Plain YYYY-MM-DD only, no time or offset. |
to | query | string | Day the window ends, exclusive: that day is not included. Plain YYYY-MM-DD only, no time or offset. When given, the response also carries hasLater: whether any slot lies on or after that day. |
Responses
| Status | Meaning |
|---|---|
200 | { slots, hasLater? } |
400 | INVALID_INPUT — a day that is not YYYY-MM-DD |
404 | ROOM_NOT_FOUND |