Skip to main content

Season Distribution

Returns the authenticated user's token distribution record(s) for a given season.

GET /points/distribution/:season_id
Authorization: Bearer <token>

Path Parameters

ParameterTypeDescription
season_idUUIDSeason ID (obtained from GET /points/seasons)

Response

The data payload is an array. A user may have up to two records — one for the user pool and one for the mm (market maker) pool. Returns [] if the season snapshot has not been taken yet.

{
"success": true,
"data": [
{
"id": "f1e2d3c4-...",
"season_id": "a1b2c3d4-...",
"user_address": "0xabcd...1234",
"pool_type": "user",
"weighted_points": "48500.00",
"share_pct": "0.000023000000",
"token_amount": "805.00",
"claim_status": "pending",
"claim_deadline": "2026-03-05T00:00:00Z",
"claim_nonce": 1,
"claimed_at": null,
"claim_tx_hash": null,
"created_at": "2026-02-03T00:00:00Z"
}
],
"error": null,
"timestamp": 1745280000
}

Records are sorted by pool_typemm appears before user.

Response Fields

FieldTypeDescription
idstringDistribution record UUID — used in the claim endpoint
season_idstringSeason UUID
user_addressstringUser's wallet address
pool_typestringuser (regular pool) or mm (market maker pool)
weighted_pointsDecimalFor the user pool: TP×0.65 + PP×0.20 + HP×0.05 + RP×0.10 summed across the season's epochs. For the mm pool: quality score sum
share_pctDecimalShare of pool (12-decimal precision)
token_amountDecimalToken amount allocated (human-readable, not wei)
claim_statusstringpending / claimed / expiredclaimed and expired are reserved: no code path currently executes them (pre-TGE, distribution contract not deployed)
claim_deadlinestringClaim deadline — 30 days after snapshot (ISO 8601)
claim_nonceintNonce used in EIP-712 signature
claimed_atstring | nullTimestamp when claimed on-chain
claim_tx_hashstring | nullOn-chain claim transaction hash

Distribution Formula

weighted_points = TP × 0.65 + PP × 0.20 + HP × 0.05 + RP × 0.10 (summed over the season's epochs)
share_pct = user_weighted_points / Σ(all_users_weighted_points)
token_amount = season_pool_tokens × share_pct

The MM pool uses each market maker's quality score sum in place of weighted_points. earn_level_weight plays no role in token distribution — it only determines Earn subscription quotas.

Code Examples

Python

import requests

BASE_URL = "https://api.prex.world/api/v1"
JWT_TOKEN = "your_jwt_token"
SEASON_ID = "a1b2c3d4-..."

resp = requests.get(
f"{BASE_URL}/points/distribution/{SEASON_ID}",
headers={"Authorization": f"Bearer {JWT_TOKEN}"},
)
records = resp.json()["data"]

for rec in records:
print(f"Pool: {rec['pool_type']}, Tokens: {rec['token_amount']}, Status: {rec['claim_status']}")
if rec["claim_status"] == "pending":
print(f" Claim by: {rec['claim_deadline']}, distribution_id: {rec['id']}")