Whether your wallet can fuse now
const url = 'https://foxleague.ai/api/fusion/can-fuse';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/fusion/can-fuse \ --header 'Authorization: Bearer <token>'Whether your wallet may fuse now. After each fusion your wallet waits out a fusion cooldown: inside it the answer is can_fuse: false with the time left. Otherwise it answers can_fuse: true with match counts. With nonces they are the match gate of the cards’ rarity (rarity_match_gate in /api/config). Without nonces they are fusion_min_matches and fusion_match_waiver_floor of /api/config, which apply only to a rarity without its own row there: every rarity has its own row since 12 October 2026.
With nonces it also checks those cards and lists them in cards; reason then names the first failed check: not_in_wallet (a card your wallet does not hold right now: listed on the marketplace or in an auction, sent away or not arrived yet; read from the chain, the nonces in not_in_wallet), ownership_unreadable (no chain answer while FoxLeague’s records do not show every card free in your wallet; try again in a moment), dirty_stats (trained stats not yet saved on chain), card_cooldown (a card’s own fusion wait), below_match_floor (too few matches really played) or insufficient_matches (too few competitive matches, waived ones included). The contract makes the final check when you fuse.
Who: a signed-in player.
Refusals:
A fusion takes at most 3 different card nonces.:noncesnames more than 3 cards or one card twice.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Comma-separated NFT nonces of cards to check, for example 123,456,789. A card your wallet does not hold right now is answered with reason: not_in_wallet and its nonce in not_in_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
With not_in_wallet, card_cooldown, below_match_floor or insufficient_matches: names of the cards that fail it.
true when the wallet may fuse now.
With nonces and past the ownership check (absent with not_in_wallet, ownership_unreadable and dirty_stats): each checked card as {nonce, name, competitive_matches, fusion_match_credit, fusion_ready_at, in_cooldown, below_match_floor, eligible, min_matches_required, match_floor_required}; the last two are the match gate of the card’s rarity.
When your wallet’s fusion cooldown ends (RFC 3339). Only inside the cooldown.
Time left in your wallet’s fusion cooldown, <d>d <h>h; null outside it.
With dirty_stats: names of the cards whose trained stats are not saved on chain yet.
Of those, matches every input card must have really played: with nonces the floor of the cards’ rarity, without them fusion_match_waiver_floor. Absent inside the cooldown and with not_in_wallet, ownership_unreadable or dirty_stats.
Competitive matches every input card needs, waived ones included: with nonces the gate of the cards’ rarity, without them fusion_min_matches. Absent inside the cooldown and with not_in_wallet, ownership_unreadable or dirty_stats.
With not_in_wallet: the nonces your wallet does not hold right now (listed on the marketplace or in an auction, sent away or not arrived yet), as the chain says. FoxLeague’s records never refuse a card by themselves: without a chain answer the check passes when they show every card free in your wallet; otherwise it answers ownership_unreadable.
With nonces: not_in_wallet, ownership_unreadable (neither the chain nor the records could say whether your wallet holds the cards), dirty_stats, card_cooldown, below_match_floor or insufficient_matches; absent otherwise.
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": { "can_fuse": true, "cooldown_remaining": null, "match_floor_required": 5, "min_matches_required": 20 }, "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