Skip to content
MyEscapeRoomDocs
Esc

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

    Leaderboard

    Materialized leaderboards and session outcomes

    MethodPathWhat it does
    GET/api/players/{slug}A player's public profile, record and seals
    GET/api/teams/{slug}A team's public profile, record and seals
    POST/api/sessions/outcomesRecord a session outcome (escaped/duration) — triggers leaderboard + badge workers
    GET/api/leaderboardMaterialized leaderboard (global or per region)

    A player's public profile, record and seals#

    GET/api/players/{slug}Public

    Parameters

    NameInTypeDescription
    slugrequiredpathstring

    Responses

    StatusMeaning
    200{ player }
    404Not found

    A team's public profile, record and seals#

    GET/api/teams/{slug}Public

    Parameters

    NameInTypeDescription
    slugrequiredpathstring

    Responses

    StatusMeaning
    200{ team }
    404Not found

    Record a session outcome (escaped/duration) — triggers leaderboard + badge workers#

    POST/api/sessions/outcomesSession

    Requires a staff (dashboard) session holding at least the host venue role (the lowest staff tier); there is no API key for this route. The venue is resolved from the booking, not from the request body. Once per booking: a second call answers id: null and changes nothing. Hosts: see the dashboard guide at /dashboard/guides/escape-times.

    Example request body

    json
    {
      "bookingId": "BOOKING_ID",
      "escaped": true,
      "durationSec": 3130
    }

    Responses

    StatusMeaning
    201Outcome recorded, or id: null if the booking already had one
    400INVALID_JSON or INVALID_INPUT (durationSec 1–86400, whole)
    401UNAUTHORIZED: no staff session
    403FORBIDDEN: not staff at the booking's venue
    404BOOKING_NOT_FOUND

    Example response

    json
    {
      "id": "3f0c…"
    }

    Materialized leaderboard (global or per region)#

    GET/api/leaderboardPublic

    played counts confirmed bookings whose session is over, logged or not: a booking counts once the host logs an outcome, or once its slot is 24 hours past (as soon as it ends, for a room that does not record escape times). escapes and escapeRate are over logged outcomes only, and bestTimeSec is null until one of those escaped.

    Parameters

    NameInTypeDescription
    regionquerystring

    Example request

    GET /api/leaderboard
    curl "https://myescaperoom.eu/api/leaderboard?region=Benelux"

    Responses

    StatusMeaning
    200Ranked entries

    Example response

    json
    {
      "entries": [
        {
          "rank": 1,
          "id": "team-cipher",
          "slug": "team-cipher",
          "kind": "team",
          "name": "Team Cipher",
          "region": "Benelux",
          "played": 151,
          "escapes": 142,
          "escapeRate": 94,
          "bestTimeSec": 2180,
          "certified": true
        }
      ]
    }
    MyEscapeRoom Docs