Skip to content
MyEscapeRoomDocs
Esc

    Type to search. Use the arrow keys and Enter to open a result.

    Account

    The signed-in player's own record and bookings

    MethodPathWhat it does
    GET/api/meThe signed-in person and their record card
    GET/api/me/bookingsThe signed-in player's own bookings
    POST/api/me/bookings/{bookingId}/cancelCancel one of my bookings
    GET/api/players/lookupWho a public player ID belongs to, before inviting them to a booking
    GET/api/me/teamsThe signed-in player's teams, with their members
    GET/api/me/invitationsInvitations waiting for the signed-in player's answer
    POST/api/me/invitations/booking/{participantId}/acceptAccept a place on someone else's booking
    POST/api/me/invitations/booking/{participantId}/declineDecline a place on someone else's booking
    POST/api/me/invitations/team/{invitationId}/acceptAccept an invitation to join a team
    POST/api/me/invitations/team/{invitationId}/declineDecline an invitation to join a team
    POST/api/me/bookings/{bookingId}/teamMake a team of a booking's group
    POST/api/me/bookings/{bookingId}/invoice-requestRequest an invoice for a booking after checkout
    PUT/api/me/bookings/{bookingId}/invoice-requestCorrect an invoice request before the invoice is issued
    GET/api/me/bookings/{bookingId}/invoicesA booking's invoices, and whether one can still be requested
    GET/api/me/bookings/{bookingId}/invoices/{invoiceId}/pdfDownload one invoice as a PDF

    The signed-in person and their record card#

    GET/api/meSession

    Responses

    StatusMeaning
    200{ user, player }
    401Not signed in

    The signed-in player's own bookings#

    GET/api/me/bookingsSession

    Scoped by session, never by a parameter. Bookings placed as a guest have no owner and are not listed for anyone. Each item's cancellation says whether the player may cancel it now under the more generous of the notice the booking was made under and the venue's current one: { allowed, refusal, deadline, refundCents, policyLabel }, where refusal is null, BOOKING_NOT_CONFIRMED, GAME_STARTED, CANCELLATION_NOT_ALLOWED or CANCELLATION_DEADLINE_PASSED, deadline the last moment to cancel (null when neither the notice the booking was made under nor the venue's lets players cancel), refundCents the room money paid online that a cancellation refunds, and policyLabel the venue's policy as the checkout prints it (no room refund promised for a room paid at the venue). Each item's venue carries its IANA timezone, in which its times and the deadline are shown.

    Responses

    StatusMeaning
    200{ bookings }
    401Not signed in

    Cancel one of my bookings#

    POST/api/me/bookings/{bookingId}/cancelSession

    Only the booker, from the session: a guest booking or another player's is a 404. Only a confirmed booking, until the notice before the slot's start (exactly at the deadline is still allowed): the more generous of the venue's notice when the booking was made and its notice now. When neither lets players cancel, the venue takes cancellations itself (CANCELLATION_NOT_ALLOWED). The room money paid online is refunded, never the service fee; a booking paid at the venue refunds nothing. The refund follows within minutes, so the answer's booking.refundStatus is pending (or not_needed when nothing is owed) and booking.refundedCents the amount decided. The optional body { reason } (up to 500 characters) is recorded on the booking and given in the venue's email. Cancelling a booking that is already cancelled answers 200 with it.

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring

    Request body

    FieldTypeDescription
    reasonoptionalstring

    Example request body

    json
    {
      "reason": "Two of us are ill"
    }

    Responses

    StatusMeaning
    200{ booking } — cancelled, now or already, with refundStatus and refundedCents
    400INVALID_JSON; INVALID_INPUT — the reason is over 500 characters
    401Not signed in
    403CANCELLATION_NOT_ALLOWED — the venue does not let players cancel; contact the venue
    404BOOKING_NOT_FOUND: no such booking made by this player
    409CANCELLATION_DEADLINE_PASSED — inside the venue's notice; GAME_STARTED — the slot has started; BOOKING_PLAYED — a session outcome is logged; BOOKING_NOT_CONFIRMED — not paid yet

    Who a public player ID belongs to, before inviting them to a booking#

    GET/api/players/lookupSession

    For checkout's preview of a player about to be named. Case-insensitive. Only what the public profile already shows.

    Parameters

    NameInTypeDescription
    playerIdrequiredquerystringe.g. PLAYER-1000

    Responses

    StatusMeaning
    200{ player: { id, slug, name, avatar, playerId } }
    401Not signed in
    404No player has that ID

    The signed-in player's teams, with their members#

    GET/api/me/teamsSession

    Responses

    StatusMeaning
    200{ teams: [{ id, slug, name, avatar, members: [{ id, name, avatar }] }] }
    401Not signed in

    Invitations waiting for the signed-in player's answer#

    GET/api/me/invitationsSession

    Places on other players' bookings (only once the booking is confirmed) and invitations to join a team. Scoped by session.

    Responses

    StatusMeaning
    200{ bookings, teams }
    401Not signed in

    Accept a place on someone else's booking#

    POST/api/me/invitations/booking/{participantId}/acceptSession

    Only the invited player, and only while the invitation is still open. Accepting credits the player with the booking's outcome from the next leaderboard recalculation, which this enqueues.

    Parameters

    NameInTypeDescription
    participantIdrequiredpathstring

    Responses

    StatusMeaning
    200{ id, status: 'accepted' }
    401Not signed in
    404No such invitation for this player
    409Already answered

    Decline a place on someone else's booking#

    POST/api/me/invitations/booking/{participantId}/declineSession

    Final: a declined invitation credits nothing and is not sent again.

    Parameters

    NameInTypeDescription
    participantIdrequiredpathstring

    Responses

    StatusMeaning
    200{ id, status: 'declined' }
    401Not signed in
    404No such invitation for this player
    409Already answered

    Accept an invitation to join a team#

    POST/api/me/invitations/team/{invitationId}/acceptSession

    Only the invited player, and only while the invitation is still open. Accepting makes the player a member of the team, in the same write as the answer, and enqueues a leaderboard recalculation and a badge evaluation.

    Parameters

    NameInTypeDescription
    invitationIdrequiredpathstring

    Responses

    StatusMeaning
    200{ id, status: 'accepted' }
    401Not signed in
    404No such invitation for this player
    409Already answered

    Decline an invitation to join a team#

    POST/api/me/invitations/team/{invitationId}/declineSession

    Final: the player does not join the team and is not asked again.

    Parameters

    NameInTypeDescription
    invitationIdrequiredpathstring

    Responses

    StatusMeaning
    200{ id, status: 'declined' }
    401Not signed in
    404No such invitation for this player
    409Already answered

    Make a team of a booking's group#

    POST/api/me/bookings/{bookingId}/teamSession

    Only the booker, only for a confirmed booking that has no team yet. Body: { name }, 2–60 characters once trimmed. The booker becomes the team's first member; every other registered player on the booking who has not declined it is invited to the team and only becomes a member by accepting. Guests are left out. The booking is credited to the team from the next leaderboard recalculation, which this enqueues. The team's slug is taken from its name, with a short suffix if that slug is taken.

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring

    Responses

    StatusMeaning
    201{ team: { id, slug, name }, invited }
    400Invalid body (INVALID_JSON, INVALID_INPUT)
    401Not signed in
    404BOOKING_NOT_FOUND: no such booking made by this player
    409BOOKING_NOT_CONFIRMED (not paid yet, or cancelled) or BOOKING_HAS_TEAM (already a team's)
    422NO_OTHER_PLAYERS: no other registered player on the booking to invite

    Request an invoice for a booking after checkout#

    POST/api/me/bookings/{bookingId}/invoice-requestSession

    Only the booking's owner, from the session; a guest booking or another player's is a 404. Body: the same invoice object as POST /api/bookings. Belgian venues only, for a pending or confirmed booking, or a paid cancellation (its service fee is kept, so only the service fee invoice is issued; a cancelled booking's room invoice never is), until 23:59 Brussels time on the 15th of the month after the service fee was paid. An EU VAT number is checked with VIES first. On a confirmed booking or a paid cancellation, MTEC Games VOF's service fee invoice is issued and emailed as a PDF.

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring

    Responses

    StatusMeaning
    201The booking's invoice state: { available, requested, deadline, canRequest, invoices }
    400Invalid body (INVALID_JSON, INVALID_INPUT)
    401Not signed in
    403API_KEY_NOT_PERMITTED — the voucher is active and the key was not granted "May manage vouchers"
    404BOOKING_NOT_FOUND: no such booking made by this player
    409INVOICE_ALREADY_REQUESTED
    422INVOICE_NOT_AVAILABLE (a venue outside Belgium, or a released hold) or INVOICE_DEADLINE_PASSED

    Correct an invoice request before the invoice is issued#

    PUT/api/me/bookings/{bookingId}/invoice-requestSession

    The same checks as POST. Once the invoice is issued, a correction is a credit note and a reissue, which only an operator can do.

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring

    Responses

    StatusMeaning
    200The booking's invoice state
    404BOOKING_NOT_FOUND, or INVOICE_REQUEST_NOT_FOUND (nothing to correct)
    409INVOICE_ALREADY_ISSUED

    A booking's invoices, and whether one can still be requested#

    GET/api/me/bookings/{bookingId}/invoicesSession

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring

    Responses

    StatusMeaning
    200{ available, requested, deadline, canRequest, invoices }
    401Not signed in
    404BOOKING_NOT_FOUND

    Download one invoice as a PDF#

    GET/api/me/bookings/{bookingId}/invoices/{invoiceId}/pdfSession

    Served from private storage to the booking's owner only; never cached.

    Parameters

    NameInTypeDescription
    bookingIdrequiredpathstring
    invoiceIdrequiredpathstring

    Responses

    StatusMeaning
    200application/pdf
    401Not signed in
    404BOOKING_NOT_FOUND or INVOICE_NOT_FOUND
    MyEscapeRoom Docs