Magic Eden
Magic Eden is a multi-chain NFT marketplace offering REST and instruction-generation APIs for Solana, EVM chains (Ethereum, Polygon, Base, ApeChain, Arbitrum, Berachain, BSC, SEI, Abstract), and Bitcoin Ordinals (inscriptions, rare sats, and runes). Developers can fetch collections, tokens, listings, bids, activity, holder stats, AMM pool data, launchpad data, and generate signed transactions or PSBTs for listing, buying, bidding, transferring, swapping, and minting across all supported chains.
APIs
Magic Eden Solana API
REST endpoints and signed-transaction instruction generators for the Solana marketplace - collections, tokens, wallets, listings, bids, activity, MMM AMM pools, marketplace popu...
Magic Eden EVM API
Reservoir-powered v4 REST API for EVM chains (Ethereum, Polygon, Base, ApeChain, Arbitrum, Berachain, BSC, SEI, Abstract) covering collections, user collections, search, NFT act...
Magic Eden Bitcoin Ordinals & Runes API
REST and PSBT-generation endpoints for the Bitcoin Ordinals marketplace - ordinal collections, block activities, rare sats batch listings, and full Runes lifecycle (orders, mark...
Collections
Pricing Plans
Rate Limits
FinOps
Magic Eden Finops
FINOPSResources
Sources
opencollection: 1.0.0
info:
name: Magic Eden Solana API
version: v2
items:
- info:
name: collections
type: folder
items:
- info:
name: Get collections
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections
headers:
- name: ME-Pub-API-Metadata
value: ''
params:
- name: offset
value: ''
type: query
description: The number of items to skip, default 0, min 0
- name: limit
value: ''
type: query
description: The numbers of items to return, default 200, min 1, max 500
docs: Get collections
- info:
name: Get attributes of a collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:collectionSymbol/attributes
params:
- name: collectionSymbol
value: ''
type: path
description: collection symbol
docs: Get attributes of a collection
- info:
name: Get activities of a collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:symbol/activities
params:
- name: symbol
value: btest
type: path
description: collection symbol
- name: offset
value: ''
type: query
description: The number of items to skip, default 0, min 0
- name: limit
value: ''
type: query
description: The numbers of items to return, default 100, min 1, max 1000
docs: Get activities of a collection
- info:
name: Get holder stats of a collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:symbol/holder_stats
params:
- name: symbol
value: ''
type: path
description: collection symbol
docs: Get holder stats of a collection
- info:
name: Get wallets rank sorted by volume for one collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:symbol/leaderboard
params:
- name: symbol
value: ''
type: path
description: collection symbol
- name: limit
value: ''
type: query
description: The numbers of items to return, default 100, min 1, max 100
docs: Get wallets rank sorted by volume for one collection
- info:
name: Get listings of a collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:symbol/listings
params:
- name: symbol
value: btest
type: path
description: collection symbol
- name: offset
value: ''
type: query
description: The number of items to skip, default 0, min 0
- name: limit
value: ''
type: query
description: The numbers of items to return, default 20, min 1, max 100
- name: min_price
value: ''
type: query
description: Filter listings that are less than this price
- name: max_price
value: ''
type: query
description: Filter listings that are more than this price
- name: attributes
value: ''
type: query
description: 'Represents a filtering mechanism where the elements within each inner array are logically ORed, and
the resulting arrays are ANDed together at the top level. Each inner array consists of objects with two properties:
traitType (a string) and value (a string). For example: [[{"traitType":"trait1", "value":"value1"},{"traitType":"trait1",
"value":"value2"}]] would return listings that have "value1" OR "value2" for "trait1".'
- name: sort
value: ''
type: query
description: The field to sort the listings, default 'listPrice'
- name: listingAggMode
value: ''
type: query
description: True to return aggregated marketplace listings, false to return just Magic Eden listings.
- name: sort_direction
value: ''
type: query
description: The direction returned elements should be sorted in, default 'asc'
- name: paymentMints
value: ''
type: query
description: Filter listings by the payment mint address that the seller expects. Default to filter for listings that
only accept native SOL. Use "ALL" to show all listings.
docs: Get listings of a collection
- info:
name: Get stats of a collection
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/collections/:symbol/stats
params:
- name: symbol
value: ''
type: path
description: collection symbol
- name: timeWindow
value: ''
type: query
description: Time window for stats, default all. '24h', '7d', '30d', 'all'
- name: listingAggMode
value: ''
type: query
description: True to return aggregated marketplace listings, false to return just Magic Eden listings. Defaults to
false.
docs: Get stats of a collection
- info:
name: Get batch listings of a collection
type: http
http:
method: POST
url: https://api-mainnet.magiceden.dev/v2/collections/batch/listings
params:
- name: offset
value: ''
type: query
description: The number of items to skip, default 0, min 0
- name: limit
value: ''
type: query
description: The numbers of items to return, default 20, min 1, max 100
- name: min_price
value: ''
type: query
description: Filter listings that are less than this price
- name: max_price
value: ''
type: query
description: Filter listings that are more than this price
- name: attributes
value: ''
type: query
description: 'Represents a filtering mechanism where the elements within each inner array are logically ORed, and
the resulting arrays are ANDed together at the top level. Each inner array consists of objects with two properties:
traitType (a string) and value (a string). For example: [[{"traitType":"trait1", "value":"value1"},{"traitType":"trait1",
"value":"value2"}]] would return listings that have "value1" OR "value2" for "trait1".'
- name: sort
value: ''
type: query
description: The field to sort the listings, default 'listPrice'
- name: sort_direction
value: ''
type: query
description: The direction returned elements should be sorted in, default 'asc'
- name: listingAggMode
value: ''
type: query
description: True to return aggregated marketplace listings, false to return just Magic Eden listings.
docs: Get batch listings of a collection
- info:
name: instructions
type: folder
items:
- info:
name: Get instruction to buy (bid)
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/buy
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: price
value: ''
type: query
description: Price in SOL
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 will default to 7 days.
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to buy (bid)
- info:
name: Get instruction to cancel a buy
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/buy_cancel
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: price
value: ''
type: query
description: Price in SOL
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to cancel a buy
- info:
name: Get instruction to change a buy price
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/buy_change_price
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: price
value: ''
type: query
description: Old price in SOL
- name: newPrice
value: ''
type: query
description: New price in SOL
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to change a buy price
- info:
name: Get instruction to buy now
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/buy_now
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenATA
value: ''
type: query
description: Associate Token Account
- name: price
value: ''
type: query
description: Price in SOL
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: buyerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: sellerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: buyerCreatorRoyaltyPercent
value: ''
type: query
description: buyerCreatorRoyaltyPercent, integer 0-100
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
- name: splPrice
value: ''
type: query
description: SPL token price information (JSON string)
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to buy now
- info:
name: Get instruction to buy now and transfer nft to another owner
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/buy_now_transfer_nft
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenATA
value: ''
type: query
description: Associate Token Account
- name: price
value: ''
type: query
description: Price in SOL
- name: destinationATA
value: ''
type: query
description: Associated token account to send bought NFT to
- name: destinationOwner
value: ''
type: query
description: Owner of token account
- name: createATA
value: ''
type: query
description: whether to include create ATA instructions
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: buyerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: sellerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: buyerCreatorRoyaltyPercent
value: ''
type: query
description: buyerCreatorRoyaltyPercent, integer 0-100
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to buy now and transfer nft to another owner
- info:
name: Get instruction to deposit to escrow
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/deposit
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: amount
value: ''
type: query
description: Amount in SOL
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to deposit to escrow
- info:
name: Get instruction to sell (list)
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/sell
params:
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenAccount
value: ''
type: query
description: Token account
- name: price
value: ''
type: query
description: Price in SOL
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to sell (list)
- info:
name: Get instruction to cancel a sell
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/sell_cancel
params:
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenAccount
value: ''
type: query
description: Token account
- name: price
value: ''
type: query
description: Price in SOL
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to cancel a sell
- info:
name: Get instruction to change a sell price
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/sell_change_price
params:
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenAccount
value: ''
type: query
description: Token account
- name: price
value: ''
type: query
description: Price in SOL
- name: newPrice
value: ''
type: query
description: New price in SOL
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: expiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to change a sell price
- info:
name: Get instruction to sell now (accept offer)
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/sell_now
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: seller
value: ''
type: query
description: Seller wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: tokenMint
value: ''
type: query
description: Token mint address
- name: tokenATA
value: ''
type: query
description: Associate token account
- name: price
value: ''
type: query
description: Price in SOL
- name: newPrice
value: ''
type: query
description: New price in SOL
- name: sellerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: buyerReferral
value: ''
type: query
description: Buyer referral wallet
- name: sellerReferral
value: ''
type: query
description: Seller referral wallet
- name: buyerExpiry
value: ''
type: query
description: timestamp in seconds in the future, 0 means no expiry
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to sell now (accept offer)
- info:
name: Get instruction to withdraw from escrow
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/withdraw
params:
- name: buyer
value: ''
type: query
description: Buyer wallet
- name: auctionHouseAddress
value: ''
type: query
description: Auction house Address. If not provided, will use default auction house.
- name: amount
value: ''
type: query
description: Amount in SOL
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: prioFeeMicroLamports
value: ''
type: query
description: Priority fee in microlamports
- name: maxPrioFeeLamports
value: ''
type: query
description: Maximum priority fee in lamports
- name: exactPrioFeeLamports
value: ''
type: query
description: Exact priority fee in lamports
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to withdraw from escrow
- info:
name: launchpad
type: folder
items:
- info:
name: Get launchpad collections
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/launchpad/collections
params:
- name: offset
value: ''
type: query
description: The number of items to skip, default 0, min 0
- name: limit
value: ''
type: query
description: The numbers of items to return, default 200, min 1, max 500
docs: Get launchpad collections
- info:
name: magic-ticket
type: folder
items:
- info:
name: Construct and return burn txs for given mint addresses
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/magic_ticket/burns
params:
- name: walletAddress
value: ''
type: query
description: Wallet address that owns the tickets
- name: mintAddresses
value: ''
type: query
description: Comma-separated list of mint addresses to burn
auth:
type: bearer
token: '{{bearerToken}}'
docs: Construct and return burn txs for given mint addresses
- info:
name: marketplace
type: folder
items:
- info:
name: Get the top popular collections for a time range
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/marketplace/popular_collections
params:
- name: timeRange
value: ''
type: query
description: The time range to return popular collections for. Default 1d.
docs: Get the top popular collections for a time range
- info:
name: mmm
type: folder
items:
- info:
name: Get instruction to create a pool
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/mmm/create-pool
params:
- name: spotPrice
value: ''
type: query
description: Pool initial spot price in SOL
- name: curveType
value: ''
type: query
description: Type curve, either 'linear' or 'exp'
- name: curveDelta
value: ''
type: query
description: Curve delta used to change price after a fill
- name: reinvestBuy
value: ''
type: query
description: Whether to reinvest bought asset or transfer directly to owner
- name: reinvestSell
value: ''
type: query
description: Whether to reinvest payment from sale or transfer directly to owner
- name: expiry
value: ''
type: query
description: Timestamp in seconds in the future, 0 means no expiry
- name: lpFeeBp
value: ''
type: query
description: Requested liquidity provider fee in basis points
- name: buysideCreatorRoyaltyBp
value: ''
type: query
description: Amount of creator royalty the pool should pay in basis points
- name: paymentMint
value: ''
type: query
description: Mint address of payment (default for SOL)
- name: collectionSymbol
value: ''
type: query
description: Collection symbol for which the pool will be valid
- name: owner
value: ''
type: query
description: Owner of the pool
- name: solDeposit
value: ''
type: query
description: Optional sol amount to deposit with pool creation
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
- name: sharedEscrowCount
value: ''
type: query
description: Number of pools (bids) that will share the escrow account
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to create a pool
- info:
name: Get instruction to close a pool after all assets and payment have been withdrawn
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/mmm/sol-close-pool
params:
- name: pool
value: ''
type: query
description: Public key of pool to close
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to close a pool after all assets and payment have been withdrawn
- info:
name: Get instruction to deposit SOL into a pool for buying
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/mmm/sol-deposit-buy
params:
- name: pool
value: ''
type: query
description: Public key of pool to deposit into
- name: solAmount
value: ''
type: query
description: The amount of SOL to deposit
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to deposit SOL into a pool for buying
- info:
name: Get instruction to have a pool fulfill a buy
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/mmm/sol-fulfill-buy
params:
- name: pool
value: ''
type: query
description: Public key of pool to interact with
- name: assetAmount
value: ''
type: query
description: Amount of asset to transact
- name: minPaymentAmount
value: ''
type: query
description: Minimum payment amount acceptible by the seller, in SOL
- name: seller
value: ''
type: query
description: Public key of seller of asset
- name: assetMint
value: ''
type: query
description: Public key of mint account of asset
- name: assetTokenAccount
value: ''
type: query
description: Public key of token account of asset
- name: allowlistAuxAccount
value: ''
type: query
description: The allowlist aux account used for token authentication
- name: skipDelist
value: ''
type: query
description: Whether to skip trying to delist the NFT if it is detected to be listed
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to have a pool fulfill a buy
- info:
name: Get instruction to have a pool fulfill a sell
type: http
http:
method: GET
url: https://api-mainnet.magiceden.dev/v2/instructions/mmm/sol-fulfill-sell
params:
- name: pool
value: ''
type: query
description: Public key of pool to interact with
- name: assetAmount
value: ''
type: query
description: Amount of asset to transact
- name: maxPaymentAmount
value: ''
type: query
description: Maximum payment amount to be paid by the buyer, in SOL
- name: buysideCreatorRoyaltyBp
value: ''
type: query
description: Amount of royalty to be paid, in basis points of total royalty
- name: buyer
value: ''
type: query
description: Public key of buyer of asset
- name: assetMint
value: ''
type: query
description: Public key of mint account of asset
- name: allowlistAuxAccount
value: ''
type: query
description: The allowlist aux account used for token authentication
- name: priorityFee
value: ''
type: query
description: Priority fee (in microlamports) to reprioritize the transaction against others
auth:
type: bearer
token: '{{bearerToken}}'
docs: Get instruction to have a pool fulfill a sell
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/magic-eden/refs/heads/main/apis.yml