Public game settings
const url = 'https://foxleague.ai/api/config';const options = {method: 'GET'};
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/configAnswers the game’s public settings: fees, prices, cooldowns, league limits, prize splits and the defaults the app’s forms start from. The body is the settings object itself, without the success envelope. Amounts in whole FOXSY are for display; to build a payment, use the matching _wei string.
Who: anyone.
Refusals: none.
Responses
Section titled “ Responses ”Success or a refusal: read success (the refusals are in the description).
The game’s public settings, loaded by the app at start.
object
Age in years from which a card’s condition recovers more slowly each day.
Age in years at which recovery reaches its slowest rate, aging_regen_min_points_per_day.
Condition points a card recovers per day at aging_max_age.
A card’s age in years when it is minted. A card grows one year older every 52 days.
How long an auction runs, in seconds.
true when auction listings are available.
The smallest raise over the current bid, in percent.
Seconds before a card can go up for auction again after an auction.
How often, in milliseconds, the platform settles ended auctions (at least 60000).
Seconds after an auction ends before the platform first tries to settle it. Claim is offered only after this plus two settle rounds.
Seconds a late bid adds to an auction.
A bid in this many final seconds of an auction extends it by auction_snipe_extension_seconds.
The yellow card bans and the injuries: the switch, the yellow cards that make one ban, the injury chance and the days out. The numbers are the ones in force now.
object
The same chance at condition 30 and below, in basis points (300 = 3%). Between condition 100 and 30 the chance moves in a straight line between the two.
The chance that one foul the referee calls injures the player fouled at condition 100, in basis points (100 = 1%).
The days a card is out for 1, 2 and 3 or more injuries in one match, in that order. A change counts for matches that end after it; a card already injured keeps its end.
Whether the bans govern now: yellow_cards_per_ban yellow cards in tournaments of more than 2 teams make a card miss its team’s next tournament match.
When the bans govern (RFC 3339, UTC); null while the switch is off. Every card starts at 0 yellow cards toward a ban at that moment.
The yellow cards that make one ban (3 unless the game settings say otherwise). A change counts for matches that end after it.
true when the Common pack is on sale now.
Common cards left in the contract’s current pack budget; 0 when it cannot be read.
Common packs one wallet may buy in any 7 days.
Price of a Common pack in whole FOXSY.
Why the Common pack is not on sale: closed, pool (too few free cards), budget (the current pack budget is spent) or unknown (the budget could not be read). null while it is on sale.
The competition levels: the switch, the ranked ticket price, the XP factor and ELO K of each level.
object
How many competitive matches a card counts per day once the levels govern (rules.competitive_daily_cap, its own key, not the daily XP cap); 0 means no cap.
The ELO K each level moves ratings with.
object
The value for a paid Bronze tournament.
The value for a Gold tournament.
The value for a ranked game.
The value for a Silver tournament.
Whether the competition levels govern now.
When the competition levels govern (RFC 3339, UTC); null while the switch is off.
Whether a private Bronze tournament (one with an invite list) earns XP, ELO and the competitive count like a public one.
What one ranked game costs its starter, in whole FOXSY, once the levels govern.
The share of a match’s XP each level earns, in whole percent.
object
The value for a paid Bronze tournament.
The value for a Gold tournament.
The value for a ranked game.
The value for a Silver tournament.
Condition points a card loses in a tournament or 1v1 challenge match. Older cards lose more.
Condition points a card loses in a ranked or casual match. Older cards lose more.
Condition points a card recovers per day until aging_maturity_age.
true when the app offers an in-app swap to buy FOXSY.
The most FOXSY one in-app swap may buy, in whole FOXSY.
Price tolerance of the in-app swap, in basis points.
Never present on mainnet.
Decimals of the FOXSY token: 18.
The FOXSY token identifier, FOXSY-5d5f3e on mainnet.
Seconds a card made by fusion waits before it can be fused again.
Minimum seconds between two fusions of one wallet; 0 means no wait.
The last part of a card’s fusion cooldown, in seconds, that cannot be bought off.
Price to shorten a card’s fusion cooldown (fusion_ready_at) by one day, in whole FOXSY; 0 means this waiver is off. Every started day above fusion_cooldown_waiver_floor_seconds can be bought: all of them or any number from 1.
The same price in FOXSY wei, as a decimal string.
Fusion cost in whole FOXSY for each step, in order: Common to Uncommon, Uncommon to Rare, Rare to Epic, Epic to Legendary.
Matches a card must really play before the rest of fusion_min_matches can be bought. It applies only to a rarity without its own row in rarity_match_gate (row_set false). Every rarity has its own row since 12 October 2026: read the card’s rarity there (floor).
Price of one bought match toward fusion_min_matches, in whole FOXSY; 0 means this waiver is off. It applies only to a rarity without its own row in rarity_match_gate (row_set false). Every rarity has its own row since 12 October 2026: read the card’s rarity there (price_per_match).
The same price in FOXSY wei, as a decimal string.
Competitive matches each of the three cards needs before it can be fused. It applies only to a rarity without its own row in rarity_match_gate (row_set false). Every rarity has its own row since 12 October 2026: read the card’s rarity there (gate).
Whether a fusion makes a new card (POST /api/fusion/prepare) or draws one from the fusion pool as before.
object
Whether a fusion makes a new card now: the players contract has the new fusion and its live time has passed.
The players contract’s live time of the new fusion (RFC 3339, UTC); null while the contract has none.
No fusion can be made now: the players contract speaks another fusion version than the server and its live time has passed, so it refuses a fusion of the pool and the server cannot sign a new card. live is false and live_from null meanwhile. It ends once both speak the same version.
true when the login offers “Continue with Google” (a wallet kept by Para, getpara.com). Off by default.
true when “Continue with Google” is in preview: FoxLeague is trying it out and players do not see it. google_login_enabled stays false then. Off by default.
true when a visitor without a wallet may browse the public pages: tournaments, 1v1 challenges, marketplace listings, the leaderboard and the matches on air. Every join, buy, bid or create still needs the wallet connect. Off by default.
The lowest ELO of each league.
object
Lowest ELO of the Diamond league.
Lowest ELO of the Gold league.
Lowest ELO of the Platinum league.
Lowest ELO of the Silver league.
A card’s level is floor(sqrt(experience / level_xp_divisor)), at least 1.
Platform fee on a marketplace sale, in percent.
The lowest reserve price an auction listing accepts, in whole FOXSY; 0 means no minimum.
The lowest condition at which a card can play a match or train.
Player cards a team needs to play: 18. A wallet holding this many can register without buying the starter squad.
How a 1v1 challenge prize pool is split.
object
Platform fee, in percent.
The winner’s share, in percent.
The private tournament fee and the calendar deposit.
object
Minutes after the create during which a cancel returns the deposit. A tournament whose create the chain confirmed late, less than this before its registration deadline, returns the whole payment when too few teams join.
The lowest deposit, in FOXSY.
FOXSY of deposit per scheduled game.
Whether the organizer fees apply now.
When they apply (RFC 3339, UTC); null while the switch is off.
FOXSY per scheduled game of a private tournament.
“I’m interested in this player”: the switch and its two limits.
object
true when a manager can show interest in another team’s player. Off by default.
How many interests one manager can send in a UTC day.
Days before the same manager can show interest in the same card to the same owner again.
Durations of the pre-match show slides.
object
Away team slide, in milliseconds.
Head to head slide, in milliseconds.
Home team slide, in milliseconds.
Intro slide, in milliseconds.
How a tournament’s prize pool is split, in percent.
object
Platform fee, in percent.
The runner-up’s share, in percent.
The third place’s share, in percent.
The winner’s share, in percent.
true when the app offers Buy EGLD with card or bank: Ramp Network opens over the game with the player’s own wallet address and EGLD on MultiversX. The player pays Ramp directly; Ramp runs the payment and its identity check. Off by default; while it is false the card and bank buttons read coming soon.
true when Buy EGLD with card or bank is in preview: FoxLeague is trying it out and players do not see it. ramp_enabled stays false then. Off by default.
The match gate of each card rarity and whether its transfer lock rules apply yet.
object
When the rarity lock rules start, as an RFC 3339 time in UTC; null when the setting is not a valid time.
One entry per rarity, Common first.
The match gate of one rarity.
object
Of those, the matches it must really play.
Competitive matches a card of this rarity needs before it can be fused or listed, bought matches included.
The rarity’s level on chain: 0 for Common up to 4 for Legendary.
Price of one bought match for this rarity, in whole FOXSY; 0 means matches cannot be bought for it.
The same price in FOXSY wei, as a decimal string.
The rarity name.
true when the contract holds this rarity’s own gate; false means fusion_min_matches, fusion_match_waiver_floor and fusion_match_waiver_price_per_match apply.
true when matches can be bought for this rarity.
true once the game contract holds its own gate for every rarity.
true when rows_live is true and live_from has passed: a card sent from one wallet to another from now on gets the rarity lock.
Hours each missing match adds to the transfer lock of a card sent before it reached its gate. Each match bought for that card later takes as many hours off, down to the matches it must really play.
The rarity a fusion makes from each rarity, as an object: Common gives Uncommon, Uncommon gives Rare, Rare gives Epic, Epic gives Legendary. The new card is drawn at random from the contract’s pool of cards of that rarity for the position you choose: choosing the position does not choose the card.
The registration fee in FOXSY, the same value as registration_fee_foxsy despite its name.
The registration fee in FOXSY, for display.
The registration fee in FOXSY wei that a relayed registration must pay exactly, as a decimal string.
The registration fee in FOXSY wei, as a decimal string: the exact amount to pay.
FoxLeague’s relayer addresses, one per shard in shard order. A relayed registration names the relayer of the wallet’s shard.
The highest gas limit a relayed registration may carry.
true when FoxLeague can pay the network fee of your registration through POST /api/onboarding/relay.
How many more relayed registrations the platform accepts before its cap is reached.
Shop prices.
object
Price of a full condition recovery (0 to 100) for one card. A partial recovery costs its share, rounded up.
Price of one training slot.
Price of an XP booster.
Never present on mainnet.
Fee to sync one card’s stats to chain, in whole FOXSY.
Starting values of the creation forms.
object
How long a signed challenge authorization can be paid, in chain seconds, from the moment it is issued.
Whether a paid 1v1 challenge is created with the creator’s one signed createAndJoin transaction: true means ask POST /api/tournaments/challenges/authorize first and pay with the signed terms; false means create it with POST /api/tournaments and pay the entry fee with a second transaction.
The shortest 1v1 challenge deadline, in minutes, the creation form offers.
Teams per group in the groups and knockout format.
Fewest teams a knockout tournament needs.
Whether the tournament create form offers Champions FoxLeague: false hides it; true shows it to everyone, to be chosen by an admin only.
The shortest time, in minutes, between a Champions FoxLeague tournament’s snapshot date and its registration deadline (5760 is 4 days).
true once a team may leave a tournament only if it keeps its min_teams. Its creator can then no longer delete a tournament that reached it.
Minutes between rounds that the creation form proposes.
Open 1v1 challenges one player may have at a time.
Seconds after a 1v1 challenge match’s broadcast ends before its prize is paid.
Minutes after the challenge opened at which a paid 1v1 challenge that nobody holds a seat in is cancelled automatically, when the contract holds no entry fee for it (a fee in the contract gets its payer the seat instead). An entry fee that reaches the contract after the cancel is refunded.
Whether a paid standard tournament you play in is created with your one signed createAndJoin transaction: true means ask POST /api/tournaments/challenges/authorize first and pay with the signed terms; false means create it with POST /api/tournaments and pay the entry fee with a second transaction. Its own switch: challenge_create_and_join answers for 1v1 challenges.
The least a paid standard tournament’s registration deadline may be ahead, in seconds, when POST /api/tournaments/challenges/authorize is asked for it: the authorization window, the chain’s finality margin and two intervals of the check that opens a paid tournament whose confirmation never arrived (about 13 minutes by default). A closer deadline is refused.
Fewest teams a Swiss tournament needs.
Entry fee limits per tournament tier.
object
The highest entry fee of a paid Bronze tournament, in whole FOXSY. The create caps it one under silver_min.
The lowest entry fee of a paid Bronze tournament, in whole FOXSY. It applies once the competition levels govern.
Lowest entry fee of a Gold tournament.
Highest entry fee of a Silver tournament.
Lowest entry fee of a Silver tournament.
How a tournament prize pool is split.
object
Platform fee, in percent.
The runner-up’s share, in percent.
The third place’s share, in percent.
The winner’s share, in percent.
Training settings.
object
Training XP an attribute needs to gain one point.
Hours a card sent directly from another wallet waits before it can play, for a card that had reached its rarity’s gate at the transfer. A card sent before it reached its gate waits longer (see rarity_match_gate). A marketplace purchase starts no wait: the buyer keeps what is left of a wait the card already had.
The wait, in hours, that a card sent directly from another wallet before the rarity rules started on 12 October 2026 (rarity_match_gate.live_from) got when it had fewer than fusion_min_matches competitive matches at the transfer; kept for the locks still running from then. Such a lock is never made longer but takes the length of the rarity rules when that is shorter (the card’s own transfer_cooldown_hours holds it). Since then a card sent before it reached its rarity’s gate waits transfer_cooldown_hours plus rarity_match_gate.transfer_lock_hours_per_missing_match per missing match.
What the app does before it broadcasts a transaction you signed whose signature does not match it: off (no check), log (the transaction is still sent and the operator is told) or block (nothing is sent, you are asked to sign again).
Example
{ "aging_maturity_age": 30, "aging_max_age": 39, "aging_regen_min_points_per_day": 24, "aging_starting_age": 18, "auction_duration_seconds": 86400, "auction_enabled": true, "auction_min_increment_percent": 5, "auction_relist_cooldown_seconds": 172800, "auction_settle_interval_ms": 60000, "auction_settle_past_end_margin_seconds": 15, "auction_snipe_extension_seconds": 300, "auction_snipe_window_seconds": 300, "common_pack_available": true, "common_pack_epoch_remaining": 140, "common_pack_per_wallet_per_week": 2, "common_pack_price_foxsy": 2500, "common_pack_unavailable_reason": null, "condition_loss_per_match": 10, "condition_loss_per_match_ranked": 5, "condition_regen_points_per_day": 48, "dex_swap_enabled": true, "dex_swap_max_foxsy": 50000, "dex_swap_slippage_bps": 100, "foxsy_decimals": 18, "foxsy_token_id": "FOXSY-5d5f3e", "fusion_card_cooldown_seconds": 1209600, "fusion_cooldown_seconds": 72000, "fusion_cooldown_waiver_floor_seconds": 259200, "fusion_cooldown_waiver_price_per_day": 75, "fusion_cooldown_waiver_price_per_day_wei": "75000000000000000000", "fusion_costs_foxsy": [ 100, 200, 400, 800 ], "fusion_match_waiver_floor": 5, "fusion_match_waiver_price_per_match": 20, "fusion_match_waiver_price_per_match_wei": "20000000000000000000", "fusion_min_matches": 20, "google_login_enabled": false, "google_login_preview": false, "guest_explore_enabled": false, "league_thresholds": { "diamond_min": 2700, "gold_min": 1600, "platinum_min": 2000, "silver_min": 1300 }, "level_xp_divisor": 200, "marketplace_fee_percent": 10, "marketplace_min_list_price_foxsy": 500, "min_field_condition": 30, "nft_bypass_threshold": 18, "one_v_one_prize_split": { "platform_fee_percent": 10, "winner_percent": 90 }, "prematch_slide_durations_ms": { "away_team": 10000, "head_to_head": 10000, "home_team": 10000, "intro": 10000 }, "ramp_enabled": false, "ramp_preview": false, "rarity_match_gate": { "live_from": "2026-10-12T16:30:18Z", "rarities": [ { "floor": 5, "gate": 5, "level": 0, "price_per_match": 0, "price_per_match_wei": "0", "rarity": "Common", "row_set": true, "waiver_enabled": false }, { "floor": 5, "gate": 15, "level": 1, "price_per_match": 20, "price_per_match_wei": "20000000000000000000", "rarity": "Uncommon", "row_set": true, "waiver_enabled": true }, { "floor": 15, "gate": 45, "level": 2, "price_per_match": 100, "price_per_match_wei": "100000000000000000000", "rarity": "Rare", "row_set": true, "waiver_enabled": true }, { "floor": 45, "gate": 135, "level": 3, "price_per_match": 100, "price_per_match_wei": "100000000000000000000", "rarity": "Epic", "row_set": true, "waiver_enabled": true }, { "floor": 135, "gate": 405, "level": 4, "price_per_match": 100, "price_per_match_wei": "100000000000000000000", "rarity": "Legendary", "row_set": true, "waiver_enabled": true } ], "rows_live": true, "rules_live": true, "transfer_lock_hours_per_missing_match": 6 }, "rarity_next": { "Common": "Uncommon", "Epic": "Legendary", "Rare": "Epic", "Uncommon": "Rare" }, "registration_fee_egld": 5000, "registration_fee_foxsy": 5000, "registration_fee_foxsy_wei": "5000000000000000000000", "registration_fee_wei": "5000000000000000000000", "relayer_addresses": [ "erd1jnc2mkcn0l3gnn5p3ft93re5sh3u8lgqpql3mssezls0e26mxrjqdyy6z7", "erd1dykjj7pvq8206tnaacakuk0fqz22qlczyqrxmjdpmqlf0egg8wysm2cyun", "erd1kgcksck36kt8d6fc0zp9dzlt04lpmufxfu8j9mujvu8zr4fzs0rqgnqxmn" ], "relayer_max_gas_limit": 12500000, "relayer_v3_enabled": true, "relays_remaining_today": 4870, "shop_prices_foxsy": { "condition": 100, "training": 20, "xp_booster": 2000 }, "sync_cost_foxsy": 10, "tournament_defaults": { "challenge_authorization_ttl_seconds": 600, "challenge_create_and_join": false, "standard_create_and_join": false, "standard_create_and_join_min_deadline_seconds": 780, "deadline_grace_minutes": 30, "groups_knockout_group_size": 4, "knockout_min_participants": 2, "league_knockout_enabled": false, "leave_lock_live": false, "league_knockout_min_invite_window_minutes": 5760, "match_stagger_minutes": 15, "one_v_one_max_active_per_user": 1, "one_v_one_prize_delivery_seconds": 180, "one_v_one_unseated_cancel_minutes": 20, "swiss_min_participants": 3 }, "tournament_fee_bounds": { "gold_min": 5000, "silver_max": 5000, "silver_min": 1000, "bronze_max": 999, "bronze_min": 100 }, "tournament_prize_split": { "platform_fee_percent": 10, "runner_up_percent": 30, "third_percent": 15, "winner_percent": 45 }, "training_defaults": { "xp_threshold_per_level": 2000 }, "transfer_cooldown_hours": 504, "transfer_cooldown_hours_unplayed": 1512, "tx_signature_check_mode": "log", "competition_levels": { "competitive_daily_cap": 3, "elo_k": { "bronze": 9, "gold": 17, "ranked": 5, "silver": 13 }, "live": false, "live_from": "2026-11-09T14:00:00Z", "private_bronze_earns": true, "ranked_ticket_price_foxsy": 25, "xp_factor_pct": { "bronze": 50, "gold": 100, "ranked": 25, "silver": 75 } }, "card_bans": { "live": false, "live_from": "2026-11-13T14:00:00Z", "yellow_cards_per_ban": 3, "injury_chance_bp_full_condition": 100, "injury_chance_bp_condition_floor": 300, "injury_days_out": [ 3, 9, 27 ] }, "fusion_mint": { "live": false, "live_from": "2026-11-20T14:00:00Z", "paused": false }, "organizer_fees": { "live": false, "live_from": null, "private_match_fee_foxsy": 0, "calendar_deposit_per_match_foxsy": 25, "calendar_deposit_min_foxsy": 0, "calendar_deposit_grace_minutes": 60 }, "private_tournament_prize_split": { "platform_fee_percent": 20, "runner_up_percent": 25, "third_percent": 15, "winner_percent": 40 }, "player_interest": { "enabled": false, "per_day": 5, "repeat_days": 7 }}