Cards on sale in the marketplace
const url = 'https://foxleague.ai/api/marketplace/listings';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/marketplace/listingsCards listed for sale: fixed-price listings and auctions, each with the card’s stats, condition and transfer lock and, for an auction, its reserve, top bid and end. Filters match exactly. Without sort_by the newest listing comes first. sort_by=ending_soon puts live auctions first (the one ending soonest on top), then fixed-price listings (newest first), then auctions that have ended and wait to be settled. sort_by=price_asc puts the lowest current price first and sort_by=price_desc the highest (the current price is an auction’s top bid, else its reserve, else the fixed price). sort_by=overall_desc puts the highest sum of the seven stats first. Every order is complete: listings that tie keep one order by card nonce.
The answer is one page. The X-Total-Count response header holds how many listings match the filters in all; ask for the next page with offset set to the number of rows already read until you hold that many.
Who: anyone.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Only cards of this position: GK, DEF, MID or FWD.
Only cards of this rarity: Common, Uncommon, Rare, Epic or Legendary.
Only listings whose current price is at least this, in whole FOXSY. The current price is an auction’s top bid, else its reserve, else the fixed price.
Only listings whose current price is at most this, in whole FOXSY.
ending_soon for live auctions first (see the description), price_asc for the lowest current price first, price_desc for the highest current price first, overall_desc for the highest sum of the seven stats first. Leave it out for the newest listing first.
Rows per page, 1 to 200. Default 50.
Rows to skip. Default 0.
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.
A card on sale, at a fixed price or at auction.
object
The card’s accuracy attribute.
Condition from 0 to 100, as last recorded.
The card’s control attribute.
The card’s country index.
The card’s defense attribute.
Auction end (RFC 3339); a late bid can push it later. null for a fixed-price listing.
The card’s XP.
The top bid in whole FOXSY; null before the first bid and for a fixed-price listing.
true for an auction, false for a fixed-price listing.
The card’s level.
When the card was listed (RFC 3339).
The auction reserve in whole FOXSY; null for a fixed-price listing.
When the card was minted on chain (RFC 3339); null when unknown.
The card’s name.
The card’s NFT nonce.
The seller’s wallet.
The card’s portrait URI; null when it has none.
GK, DEF, MID or FWD.
The card’s power attribute.
Common, Uncommon, Rare, Epic or Legendary.
The listed price in whole FOXSY; 0 when unknown. For an auction read min_price and highest_bid.
The card’s shirt number.
The card’s speed attribute.
The card’s stamina attribute.
The length of this card’s transfer lock in hours; null means the standard length.
The kind of a card’s transfer lock: rarity_gate (the card was sent before it reached its gate; Reduce Cooldown does not apply, each match bought for the card shortens the lock down to a floor; a listed card already sits at its floor), standard (the usual lock; Reduce Cooldown applies) or per_card (a lock set before the rarity rules; Reduce Cooldown applies).
When the card last moved between wallets (RFC 3339). Its transfer lock counts from here and carries over to a buyer; null when no lock applies.
The card’s vision attribute.
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": [ { "accuracy": 72, "condition": 88, "control": 70, "country": 7, "defense": 41, "ends_at": "2026-10-02T07:30:00Z", "experience": 1840, "highest_bid": 1750, "is_auction": true, "level": 7, "listed_at": "2026-10-01T07:30:00Z", "min_price": 1500, "minted_at": "2026-09-21T12:00:00Z", "name": "Marco Vela", "nft_nonce": 4127, "owner_address": "erd124fl6zy54klay937yrnujckpak28lrdjg0eel92ue3gm36kcwf9tfwwqlt", "portrait": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku", "position": "FWD", "power": 69, "rarity": "Rare", "sale_price": 1500, "shirt_number": 9, "speed": 74, "stamina": 71, "transfer_cooldown_hours": null, "transfer_lock_kind": null, "transferred_at": null, "vision": 66 }, { "accuracy": 58, "condition": 100, "control": 57, "country": 22, "defense": 50, "ends_at": null, "experience": 410, "highest_bid": null, "is_auction": false, "level": 3, "listed_at": "2026-09-30T16:12:44Z", "min_price": null, "minted_at": "2026-09-21T12:00:00Z", "name": "Pavel Dudek", "nft_nonce": 3990, "owner_address": "erd1pn9sh2kw4wv0ewvlkpp37svkukh9wxw7v4d7q7k98cv7tm49eae922gpfa", "portrait": null, "position": "MID", "power": 52, "rarity": "Common", "sale_price": 350, "shirt_number": 8, "speed": 55, "stamina": 59, "transfer_cooldown_hours": null, "transfer_lock_kind": "standard", "transferred_at": "2026-09-25T10:00:00Z", "vision": 60 } ], "success": true}A server read failed. The body is empty.