Amba

Leaderboards

Leaderboard definitions (metric, period, max entries) + admin-side ranked entries.

Leaderboards are named rankings of app_users by a metric (xp, streak_length, custom). leaderboard_entries rows are written by the engagement pipeline; the ranking / tiebreaker logic lives in the shared segment-rule + gamification helpers.

Source: apps/api/src/routes/admin/leaderboards.ts.

Endpoints

MethodPathDescription
POST/admin/projects/:projectId/leaderboardsCreate a leaderboard.
GET/admin/projects/:projectId/leaderboardsList leaderboards.
GET/admin/projects/:projectId/leaderboards/:leaderboardIdFetch.
PATCH/admin/projects/:projectId/leaderboards/:leaderboardIdPartial update.
DELETE/admin/projects/:projectId/leaderboards/:leaderboardIdDelete.
GET/admin/projects/:projectId/leaderboards/:leaderboardId/entriesPaginated ranked entries with user display info.

POST /admin/projects/:projectId/leaderboards

Request

FieldTypeRequiredDefault
namestringyes
metricstringyes
periodstringno"all_time"
max_entriesnumberno100
custom_eventstringnonull

Response 201

{ "data": { "id": "…", "name": "…", "metric": "xp", "period": "all_time", "max_entries": 100 } }

Try it:

POST/admin/projects/%7B%7BprojectId%7D%7D/leaderboards
developer auth
curl -X POST 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X POST '${BASE_URL}/admin/projects/{projectId}/leaderboards' \
  -H 'Authorization: Bearer ${DEV_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d '{}'

GET /admin/projects/:projectId/leaderboards

{ "data": [{ "id": "…", "name": "…", "metric": "xp" }] }

Try it:

GET/admin/projects/%7B%7BprojectId%7D%7D/leaderboards
developer auth
curl -X GET 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X GET '${BASE_URL}/admin/projects/{projectId}/leaderboards' \
  -H 'Authorization: Bearer ${DEV_TOKEN}'

GET /admin/projects/:projectId/leaderboards/:leaderboardId

Errors

  • 404 NOT_FOUND.

Try it:

GET/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D
developer auth
curl -X GET 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X GET '${BASE_URL}/admin/projects/{projectId}/leaderboards/{leaderboardId}' \
  -H 'Authorization: Bearer ${DEV_TOKEN}'

PATCH /admin/projects/:projectId/leaderboards/:leaderboardId

Allowed fields: name, metric, period, max_entries, custom_event, is_active.

Try it:

PATCH/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D
developer auth
curl -X PATCH 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X PATCH '${BASE_URL}/admin/projects/{projectId}/leaderboards/{leaderboardId}' \
  -H 'Authorization: Bearer ${DEV_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d '{}'

DELETE /admin/projects/:projectId/leaderboards/:leaderboardId

{ "data": { "deleted": true } }

Try it:

DELETE/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D
developer auth
curl -X DELETE 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X DELETE '${BASE_URL}/admin/projects/{projectId}/leaderboards/{leaderboardId}' \
  -H 'Authorization: Bearer ${DEV_TOKEN}'

GET /admin/projects/:projectId/leaderboards/:leaderboardId/entries

Paginated entries ordered by rank ASC NULLS LAST, joined to app_users for display name + avatar.

Query

ParamDefault
limit50
offset0

Response 200

{
  "data": [
    {
      "leaderboard_id": "…",
      "app_user_id": "…",
      "rank": 1,
      "score": 1234,
      "app_users": { "display_name": "…", "avatar_url": "…" }
    }
  ],
  "total": 100,
  "offset": 0,
  "limit": 50
}

Try it:

GET/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D/entries
developer auth
curl -X GET 'https://api.amba.dev/admin/projects/%7B%7BprojectId%7D%7D/leaderboards/%7B%7BleaderboardId%7D%7D/entries'
Loading auth… Configure auth in the settings drawer (top-right) to run this request.

Curl:

curl -X GET '${BASE_URL}/admin/projects/{projectId}/leaderboards/{leaderboardId}/entries' \
  -H 'Authorization: Bearer ${DEV_TOKEN}'