Skip to content

Your MetaStaking average

GET
/api/teams/metastaking
curl --request GET \
--url https://foxleague.ai/api/teams/metastaking \
--header 'Authorization: Bearer <token>'

Answers the 30-day average of your wallet’s MultiversX MetaStaking holdings, with the latest daily value. Once a UTC day, at the snapshot hour (00:00 UTC by default, snapshot_hour_utc), the server reads every team wallet from the MultiversX gateway: active SFOXSY-e335c1 positions (FOXSY staked alone; an unbonding position is not counted) plus the FOXSY half of the dual-farm position (METAFOXSLK-2a13e3, the EGLD-FOXSY farm) at that day’s pool price: the LP amount inside your dual-farm position times the pool’s FOXSY reserve, divided by the pool’s LP supply. The average the Dashboard shows and the Shop discount uses is discount_average_foxsy_atomic: the sum of your daily totals over the snapshot days of the last 30 UTC days, always divided by 30. average_30d_foxsy_atomic divides the same sum by the number of those days (days_covered) instead. A day you held nothing counts 0. A day whose read of your wallet failed adds nothing to the sum and is left out of days_covered. There is no history before the first snapshot day: until 30 days exist, days_covered says how many days the sum covers. discount_percent is the % of the discount that average gives (1 for every full 100,000 FOXSY, at most 10). discount_next_percent_day, discount_next_percent and discount_percent_kept say what holding today_foxsy_atomic on every future snapshot day does to it: the window slides (its oldest days drop out) and the first day it reaches the next % is the date, none when that is not within 30 days. That day can pass several steps at once: discount_next_percent is the % it reaches. today_single_foxsy_atomic and today_dual_foxsy_atomic split today’s total into the FOXSY staked alone and the dual farm’s FOXSY half. The window ends today once today’s snapshot is complete, else yesterday. Amounts are atomic FOXSY (18 decimals) as decimal strings. Nothing is paid or boosted by it.

Who: a signed-in player with a team. You only ever read your own wallet.

Refusals:

  • MetaStaking snapshots are not taken on this network.: carries code: "not_on_this_network"; MetaStaking exists on mainnet only.
  • Team not found: your wallet has no team.

Without a session the answer is HTTP 401. If the snapshots cannot be read on our side, the answer is HTTP 500 with an empty body.

Success or a refusal: read success (the refusals are in the description).

Media type application/json
object
code

A machine-readable reason next to error, set only where the caller must act differently. tx_pending: the payment was not refused but could not be verified yet; keep the transaction hash and confirm again with the same hash, never pay twice.

string | null
data

The answer. Present when success is true.

object
average_30d_foxsy_atomic

The sum of your daily totals over the snapshot days of the last 30 UTC days divided by the number of those days (days_covered), in atomic FOXSY (18 decimals) as a decimal string, rounded down. null before the first snapshot day. The Dashboard and the Shop discount use discount_average_foxsy_atomic instead.

string | null
days_covered
required

How many snapshot days the average covers, at most window_days.

integer format: int64
discount_average_foxsy_atomic

Your 30-day average as the Dashboard shows it and the Shop discount uses it: the sum of your daily totals over the snapshot days of the last 30 UTC days, always divided by 30, in atomic FOXSY as a decimal string, rounded down. A day without a snapshot, a day you held nothing and a day whose read of your wallet failed add nothing to the sum, so the average grows over your first 30 days. null exactly when average_30d_foxsy_atomic is.

string | null
discount_next_percent

The % reached on discount_next_percent_day: at least discount_percent + 1, more when that one day lifts the average past several steps of 100,000 FOXSY, at most 10. null exactly when discount_next_percent_day is.

integer | null format: int32
discount_next_percent_day

The first future snapshot day, YYYY-MM-DD (UTC), on which discount_percent goes up if you hold today_foxsy_atomic on every snapshot day until then. The window slides: its oldest days drop out. null at 10%, when today_foxsy_atomic is null or when the next % is not reached within 30 days.

string | null
discount_percent
required

The % of the MetaStaking Shop discount that discount_average_foxsy_atomic gives: 1 for every full 100,000 FOXSY, at most 10 (from 1,000,000 FOXSY).

integer format: int32
discount_percent_kept
required

true when holding today_foxsy_atomic on every snapshot day keeps discount_percent at least where it is on each of the next 30 days (after them the window holds that total alone). false when it drops on one of them or when today_foxsy_atomic is null.

boolean
last_snapshot_day

The latest snapshot day in the window, YYYY-MM-DD (UTC). null before the first one.

string | null
snapshot_hour_utc
required

The UTC hour (0 to 23) the daily snapshot is taken at.

integer format: int64
today_dual_foxsy_atomic

The part of today_foxsy_atomic from the dual farm (METAFOXSLK-2a13e3): its FOXSY half at that day’s pool price, in atomic FOXSY as a decimal string. today_single_foxsy_atomic plus this part is today_foxsy_atomic. null exactly when today_foxsy_atomic is.

string | null
today_foxsy_atomic

Your total on last_snapshot_day, in atomic FOXSY as a decimal string. "0" when you were read holding nothing then. null when there is no snapshot day yet, that day’s read of your wallet failed or your team did not exist yet when that day’s snapshot started.

string | null
today_single_foxsy_atomic

The part of today_foxsy_atomic staked alone (active SFOXSY-e335c1 positions), in atomic FOXSY as a decimal string. null exactly when today_foxsy_atomic is.

string | null
window_days
required

The window of the average in UTC days: 30.

integer format: int64
error

Why the request was refused, in plain words. Present when success is false.

string | null
success
required

true when the request did what it asked. false is a refusal: read error.

boolean
Example
{
"data": {
"average_30d_foxsy_atomic": "100000000000000000000000",
"days_covered": 9,
"discount_average_foxsy_atomic": "30000000000000000000000",
"discount_next_percent": 1,
"discount_next_percent_day": "2026-11-28",
"discount_percent": 0,
"discount_percent_kept": true,
"last_snapshot_day": "2026-11-07",
"snapshot_hour_utc": 0,
"today_dual_foxsy_atomic": "15000000000000000000000",
"today_foxsy_atomic": "100000000000000000000000",
"today_single_foxsy_atomic": "85000000000000000000000",
"window_days": 30
},
"success": true
}

No valid session. The body is plain text: Missing Authorization header, Invalid Authorization format, Invalid session token or Session expired or invalid. Sign in again.

Media type text/plain
string
Example
Session expired or invalid

The snapshots could not be read on our side. The body is empty.