Account
The signed-in player's own record and bookings
| Method | Path | What it does |
|---|---|---|
| GET | /api/me | The signed-in person and their record card |
| GET | /api/me/bookings | The signed-in player's own bookings |
| POST | /api/me/bookings/{bookingId}/cancel | Cancel one of my bookings |
| GET | /api/players/lookup | Who a public player ID belongs to, before inviting them to a booking |
| GET | /api/me/teams | The signed-in player's teams, with their members |
| GET | /api/me/invitations | Invitations waiting for the signed-in player's answer |
| POST | /api/me/invitations/booking/{participantId}/accept | Accept a place on someone else's booking |
| POST | /api/me/invitations/booking/{participantId}/decline | Decline a place on someone else's booking |
| POST | /api/me/invitations/team/{invitationId}/accept | Accept an invitation to join a team |
| POST | /api/me/invitations/team/{invitationId}/decline | Decline an invitation to join a team |
| POST | /api/me/bookings/{bookingId}/team | Make a team of a booking's group |
| POST | /api/me/bookings/{bookingId}/invoice-request | Request an invoice for a booking after checkout |
| PUT | /api/me/bookings/{bookingId}/invoice-request | Correct an invoice request before the invoice is issued |
| GET | /api/me/bookings/{bookingId}/invoices | A booking's invoices, and whether one can still be requested |
| GET | /api/me/bookings/{bookingId}/invoices/{invoiceId}/pdf | Download one invoice as a PDF |
The signed-in person and their record card#
/api/meSessionResponses
| Status | Meaning |
|---|---|
200 | { user, player } |
401 | Not signed in |
The signed-in player's own bookings#
/api/me/bookingsSessionScoped 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
| Status | Meaning |
|---|---|
200 | { bookings } |
401 | Not signed in |
Cancel one of my bookings#
/api/me/bookings/{bookingId}/cancelSessionOnly 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
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string |
Request body
| Field | Type | Description |
|---|---|---|
reasonoptional | string |
Example request body
{
"reason": "Two of us are ill"
}Responses
| Status | Meaning |
|---|---|
200 | { booking } — cancelled, now or already, with refundStatus and refundedCents |
400 | INVALID_JSON; INVALID_INPUT — the reason is over 500 characters |
401 | Not signed in |
403 | CANCELLATION_NOT_ALLOWED — the venue does not let players cancel; contact the venue |
404 | BOOKING_NOT_FOUND: no such booking made by this player |
409 | CANCELLATION_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#
/api/players/lookupSessionFor checkout's preview of a player about to be named. Case-insensitive. Only what the public profile already shows.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
playerIdrequired | query | string | e.g. PLAYER-1000 |
Responses
| Status | Meaning |
|---|---|
200 | { player: { id, slug, name, avatar, playerId } } |
401 | Not signed in |
404 | No player has that ID |
The signed-in player's teams, with their members#
/api/me/teamsSessionResponses
| Status | Meaning |
|---|---|
200 | { teams: [{ id, slug, name, avatar, members: [{ id, name, avatar }] }] } |
401 | Not signed in |
Invitations waiting for the signed-in player's answer#
/api/me/invitationsSessionPlaces on other players' bookings (only once the booking is confirmed) and invitations to join a team. Scoped by session.
Responses
| Status | Meaning |
|---|---|
200 | { bookings, teams } |
401 | Not signed in |
Accept a place on someone else's booking#
/api/me/invitations/booking/{participantId}/acceptSessionOnly 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
| Name | In | Type | Description |
|---|---|---|---|
participantIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | { id, status: 'accepted' } |
401 | Not signed in |
404 | No such invitation for this player |
409 | Already answered |
Decline a place on someone else's booking#
/api/me/invitations/booking/{participantId}/declineSessionFinal: a declined invitation credits nothing and is not sent again.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
participantIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | { id, status: 'declined' } |
401 | Not signed in |
404 | No such invitation for this player |
409 | Already answered |
Accept an invitation to join a team#
/api/me/invitations/team/{invitationId}/acceptSessionOnly 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
| Name | In | Type | Description |
|---|---|---|---|
invitationIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | { id, status: 'accepted' } |
401 | Not signed in |
404 | No such invitation for this player |
409 | Already answered |
Decline an invitation to join a team#
/api/me/invitations/team/{invitationId}/declineSessionFinal: the player does not join the team and is not asked again.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
invitationIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | { id, status: 'declined' } |
401 | Not signed in |
404 | No such invitation for this player |
409 | Already answered |
Make a team of a booking's group#
/api/me/bookings/{bookingId}/teamSessionOnly 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
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
201 | { team: { id, slug, name }, invited } |
400 | Invalid body (INVALID_JSON, INVALID_INPUT) |
401 | Not signed in |
404 | BOOKING_NOT_FOUND: no such booking made by this player |
409 | BOOKING_NOT_CONFIRMED (not paid yet, or cancelled) or BOOKING_HAS_TEAM (already a team's) |
422 | NO_OTHER_PLAYERS: no other registered player on the booking to invite |
Request an invoice for a booking after checkout#
/api/me/bookings/{bookingId}/invoice-requestSessionOnly 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
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
201 | The booking's invoice state: { available, requested, deadline, canRequest, invoices } |
400 | Invalid body (INVALID_JSON, INVALID_INPUT) |
401 | Not signed in |
403 | API_KEY_NOT_PERMITTED — the voucher is active and the key was not granted "May manage vouchers" |
404 | BOOKING_NOT_FOUND: no such booking made by this player |
409 | INVOICE_ALREADY_REQUESTED |
422 | INVOICE_NOT_AVAILABLE (a venue outside Belgium, or a released hold) or INVOICE_DEADLINE_PASSED |
Correct an invoice request before the invoice is issued#
/api/me/bookings/{bookingId}/invoice-requestSessionThe 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
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | The booking's invoice state |
404 | BOOKING_NOT_FOUND, or INVOICE_REQUEST_NOT_FOUND (nothing to correct) |
409 | INVOICE_ALREADY_ISSUED |
A booking's invoices, and whether one can still be requested#
/api/me/bookings/{bookingId}/invoicesSessionParameters
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | { available, requested, deadline, canRequest, invoices } |
401 | Not signed in |
404 | BOOKING_NOT_FOUND |
Download one invoice as a PDF#
/api/me/bookings/{bookingId}/invoices/{invoiceId}/pdfSessionServed from private storage to the booking's owner only; never cached.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
bookingIdrequired | path | string | |
invoiceIdrequired | path | string |
Responses
| Status | Meaning |
|---|---|
200 | application/pdf |
401 | Not signed in |
404 | BOOKING_NOT_FOUND or INVOICE_NOT_FOUND |