Scope
Fan Rep is an append-only ledger (RepLedgerEntry) separate from quest points and leaderboard scores. Clients read aggregates and a paginated ledger. Only a narrow set of social actions may earn through the generic earn route.
Endpoint map
GET /api/v1/engage/rep/breakdown— totals by source plus per-team Club Rep subtotalsGET /api/v1/engage/rep/ledger— keyset-paginated ledgerPOST /api/v1/engage/rep/earn— client-safe earn (reaction,message,pollVote,shareonly)GET /api/v1/engage/rep/me— Club Rep per teamGET /api/v1/engage/rep/player/me— Player Rep per playerPOST /api/admin/users/{userId}/rep— platform-admin D-Sports Direct grant (redacted internals)
/earn):
POST /api/v1/engage/quests/arena-check-in- Daily-quest session complete paths under
/api/v1/engage/quests/*
Breakdown contract
GET /api/v1/engage/rep/breakdown returns:
Amount and
repType are server-authoritative. Clients must not invent source splits.
Ledger contract
- Keyset pagination on
(createdAt DESC, id DESC). sourceisfanAmp|club|playerAmp|dsportsDirect.playerChallengemaps tosource=playerAmp.- Direct grants map to
source=dsportsDirect. Ledger rows may include an optional storedreason.
Earn contract
POST /api/v1/engage/rep/earnaccepts onlyreaction,message,pollVote, andshare.- Direct kinds (
adminGrant,referralBonus,eventReward) on/earnreturn403. - Arena check-in and daily-quest Rep use their dedicated routes.
- Unauthorized requests return
401.
D-Sports Direct grants
- The live producer is
POST /api/admin/users/{userId}/rep(isAdminonly). - Body:
{ amount: integer 1–100000, reason?: string max 200 }. - Each POST is a new grant. The server generates the idempotency key.
referralBonusandeventRewardare reserved Direct kinds with no writer yet.- Native admin Coins UI for this grant is follow-up work, not the contract.
