Shop prices and your quotas
const url = 'https://foxleague.ai/api/shop/status?wallet_address=example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://foxleague.ai/api/shop/status?wallet_address=example' \ --header 'Authorization: Bearer <token>'The shop card for the signed-in wallet: prices in whole FOXSY, your XP booster, your training quota and the Common pack’s price, weekly cap and availability.
Who: a signed-in player, for their own wallet.
Refusals:
Wallet mismatch: sign with the correct wallet:wallet_addressis not the session wallet.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Your wallet; it must be the session wallet.
Responses
Section titled “ Responses ”Success or a refusal: read success (the refusals are in the description).
object
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.
The answer. Present when success is true.
object
true when the Common pack is on sale: price and weekly cap above 0, at least 5 Common players free in the pool and at least 5 left in the contract’s pack budget window.
Common packs you bought in the last 7 days.
Common players left in the contract’s current pack budget window (the field keeps its name).
Common packs one wallet may buy in any 7 days.
Price of a Common pack (5 players), whole FOXSY.
Common packs you may still buy in the current 7 days.
The part of a transfer lock that cannot be waived, in hours.
Not sent. Read your FOXSY balance from your wallet on chain.
Product prices.
object
Price of a full recovery (0 to 100) of one player; you pay for the missing points, rounded up.
Price of one training slot.
Price of one XP booster.
Your training allowance.
object
Free trainings per day.
Extra trainings per day on top of the free ones, paid from banked slots.
Training slot purchases verified in the last 24 hours, for display only.
Training slots you bought and have not used; they do not expire.
Trainings since the last daily reset.
true while your XP booster runs.
How long a booster lasts, in hours.
When your booster ends (RFC 3339); null when none runs.
The booster’s XP multiplier in percent: 200 means 2x.
Why the request was refused, in plain words. Present when success is false.
true when the request did what it asked. false is a refusal: read error.
Example
{ "data": { "common_pack_available": true, "common_pack_bought_this_week": 1, "common_pack_epoch_remaining": 340, "common_pack_per_wallet_per_week": 2, "common_pack_price_foxsy": 2500, "common_pack_remaining_this_week": 1, "cooldown_waiver_floor_hours": 72, "prices": { "condition_recovery": 100, "training_slot": 20, "xp_booster": 250 }, "training": { "daily_free": 5, "premium_cap": 12, "premium_used_today": 0, "slots_banked": 10, "used_today": 3 }, "xp_booster_active": true, "xp_booster_duration_hours": 24, "xp_booster_expires_at": "2026-10-02T08:40:00+00:00", "xp_booster_multiplier_pct": 200 }, "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.
Example
Session expired or invalid