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.
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.
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.
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).
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.
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.
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
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 League + Knockout: false hides it; true shows it to everyone, to be chosen by an admin only.
The shortest time, in minutes, between a League + Knockout tournament’s snapshot date and its registration deadline (5760 is 4 days).
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.
Fewest teams a Swiss tournament needs.
Entry fee limits per tournament tier.
object
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_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": 24, "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": 86400, "fusion_cooldown_waiver_floor_seconds": 259200, "fusion_cooldown_waiver_price_per_day": 250, "fusion_cooldown_waiver_price_per_day_wei": "250000000000000000000", "fusion_costs_foxsy": [ 500, 1000, 2500, 5000 ], "fusion_match_waiver_floor": 5, "fusion_match_waiver_price_per_match": 100, "fusion_match_waiver_price_per_match_wei": "100000000000000000000", "fusion_min_matches": 20, "league_thresholds": { "diamond_min": 2700, "gold_min": 1600, "platinum_min": 2000, "silver_min": 1300 }, "level_xp_divisor": 200, "marketplace_fee_percent": 5, "marketplace_min_list_price_foxsy": 100, "min_field_condition": 30, "nft_bypass_threshold": 18, "one_v_one_prize_split": { "platform_fee_percent": 5, "winner_percent": 95 }, "prematch_slide_durations_ms": { "away_team": 10000, "head_to_head": 10000, "home_team": 10000, "intro": 10000 }, "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": [ "erd1pn9sh2kw4wv0ewvlkpp37svkukh9wxw7v4d7q7k98cv7tm49eae922gpfa", "erd1f7kfgpqxgmvdpsdj05s6grka6gfputqftf78r57xr0v3zxupyu5v3u70sv", "erd1ug68eu5y0mydn8fhfsgawxel2w2me46vk59hp4aupc4jy8wx9s3zt3gmse" ], "relayer_max_gas_limit": 12500000, "relayer_v3_enabled": true, "relays_remaining_today": 4870, "shop_prices_foxsy": { "condition": 100, "training": 99, "xp_booster": 249 }, "sync_cost_foxsy": 10, "tournament_defaults": { "deadline_grace_minutes": 30, "groups_knockout_group_size": 4, "knockout_min_participants": 2, "league_knockout_enabled": 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, "swiss_min_participants": 3 }, "tournament_fee_bounds": { "gold_min": 5000, "silver_max": 5000, "silver_min": 100 }, "tournament_prize_split": { "platform_fee_percent": 5, "runner_up_percent": 30, "third_percent": 15, "winner_percent": 50 }, "training_defaults": { "xp_threshold_per_level": 2000 }, "transfer_cooldown_hours": 504, "transfer_cooldown_hours_unplayed": 1512, "tx_signature_check_mode": "log"}