Skip to content
⌘K
Marketplace API

Marketplace data

Minters, traders and deals

Read a collection's traders and minters, find listings priced as deals and how deals are scored, and read the order book and sales.

These endpoints answer market questions about a collection: who traded and minted it, which listings are priced well under their reference prices, where the bids and asks sit, and what sold recently.

EndpointWhat it returns
GET /collections/{slug}/tradersTraders with P&L, roles and mint data
GET /collections/{slug}/aboutCollection facts, including the mint summary
GET /dealsCurrent deals across every collection
GET /collections/{slug}/items?sort=dealsOne collection's listings, deals first
GET /collections/{slug}/order-bookAsks and bids by price level
GET /collections/{slug}/salesRecent sale points for a price chart
GET /collections/{slug}/series/{floor or volume}Floor or volume over time

Every {slug} endpoint also accepts ?type=<Move type> in place of the slug.

Traders, mint data and deals are computed by a background analytics job, not on the request. Responses carry asOf, the time of the newest data the results include. An analytics group that is switched off answers 404 not_found.

Traders

GET/collections/{slug}/traders

Every wallet that minted, bought, sold or holds the collection, with realised and unrealised profit. Pass at least one of sort, role or wash to get this form (see Top traders by volume for the short form).

ParameterValuesNotes
sorttotal (default), realised, unrealised, bought, sold, minted, holding, volume, first, last, addressUnknown values fall back to total.
dirdesc (default) or ascUnknown values (null) sort last in either direction.
roleall (default), minters, flippers, holders
washexclude (default) or includeWhether wash trades count in the trade figures.
limit1 to 200Default 50.
cursorthe previous page's nextCursorOpaque.
curl "https://rare.market/api/v1/collections/popkins/traders?sort=realised&limit=20"
Response
{
  "asOf": "2026-10-26T02:04:16.141Z",
  "data": [
    {
      "address": "0x021fb83a2231d7716574f527d80f6ed375ac9d475e2801714decee8775873f1d",
      "name": null,
      "minted": 99,
      "mintCostMist": null,
      "mintKnown": 0,
      "mintKind": "airdrop",
      "mintKinds": { "paid": 0, "free": 0, "airdrop": 99, "unknown": 0 },
      "bought": 199,
      "boughtMist": "9743498000000",
      "sold": 295,
      "soldMist": "29459790000000",
      "holding": 2,
      "holdingValueMist": "126000000000",
      "trips": 193,
      "realisedMist": "6095992000000",
      "realisedUsd": 3206.84,
      "unrealisedMist": "31500000000",
      "unrealisedUsd": -181.46,
      "heldKnown": 2,
      "totalMist": "6127492000000",
      "totalUsd": 3025.38,
      "firstTradeAt": "2025-06-05T20:24:43.260Z",
      "lastTradeAt": "2026-07-18T03:10:08.974Z",
      "roles": ["minter", "flipper"],
      "creator": false
    }
  ],
  "nextCursor": "MQ",
  "total": 4598,
  "header": {
    "floorMist": "63000000000",
    "suiUsd": 0.91135,
    "washExcluded": true,
    "mintCoverage": "partial",
    "mintStatus": "ok",
    "counts": { "all": 6790, "minters": 4598, "flippers": 4941, "holders": 517 }
  }
}

Trader fields

FieldNotes
bought, boughtMist, sold, soldMistTrade counts and volume.
holding, holdingValueMistItems held now, valued at the floor.
tripsCompleted round trips (an item acquired, then sold).
realisedMist, realisedUsdRealised profit on round trips, in MIST and USD.
unrealisedMist, unrealisedUsdHeld items with a known cost, at today's floor, minus that cost. null when no held item has a known cost or the collection has no floor.
heldKnownHeld items whose cost is known.
totalMist, totalUsdRealised plus unrealised.
firstTradeAt, lastTradeAtISO 8601, or null.
rolesAny of minter, flipper (sold something it bought or minted), holder (holds and never sold).
creatortrue for creator-side wallets: the publisher, the creator and the creatorWallets of the mint summary.

The header gives the floor and SUI price used for unrealised figures, whether wash trades were excluded, mint coverage and the count of traders per role.

Minters

Minters are the first owners of items coming off the creator side. Creator-side wallets (creator: true) never count as minters. List them with role=minters:

curl "https://rare.market/api/v1/collections/popkins/traders?role=minters&sort=minted&limit=50"

Mint fields on each row:

FieldNotes
mintedItems this wallet minted. 0 for creator wallets and whenever mintStatus is unavailable.
mintKindpaid, free, airdrop, unknown, or mixed when the wallet minted more than one way. null for non-minters.
mintKinds{ paid, free, airdrop, unknown } counts, or null.
mintCostMist, mintKnownWhat the wallet paid to mint, over the mintKnown mints whose cost is known.

header.mintStatus is ok or unavailable. With unavailable, no wallet has minted and role=minters returns nothing. header.mintCoverage is full, partial or none: how much of the collection's mint history was resolved.

Mint summary

GET /collections/{slug}/about returns collection facts, including a mint block:

Response (mint block)
{
  "mint": {
    "firstAt": "2025-06-05T07:32:33.569Z",
    "count": 14601,
    "coverage": "partial",
    "status": "ok",
    "minters": 4598,
    "kinds": { "free": 0, "paid": 0, "airdrop": 14601, "unknown": 0 },
    "creatorWallets": [
      { "role": "created_into", "items": 25000, "address": "0x16386f6d07a85631e419e8f83b1d99a13949515a6af7ba3f81f3cfb0ec7e5543" },
      { "role": "creating_sender,publisher,royalty", "items": 0, "address": "0xe23a220a6d66059cfd14cbab7041261daf20a87e56eaeba629d639d7e4021eeb" }
    ],
    "createdToCreator": 25000,
    "creatorMint": true,
    "supply": 25000,
    "burned": 0
  }
}

count is the number of items minted by users and minters the number of distinct minting wallets. kinds splits count by how items were minted. creatorWallets lists the creator-side wallets, their roles and the items created into each. status and coverage mean the same as mintStatus and mintCoverage above.

Top traders by volume

Without sort, role or wash, the endpoint returns the short form: the top 25 wallets by sale volume over range (1h, 6h, 24h, 7d default, 30d, all).

Response
{
  "data": [
    {
      "address": "0x72699527d22f097dab01dc7d3d9de226d39e1efa24bfdb94b8267b4898a1b801",
      "name": null,
      "bought": 49,
      "sold": 0,
      "volumeMist": "3258792000000"
    }
  ]
}

Deals

A deal is a live listing priced well under a reference price. Each deal carries the reasons it qualifies, strongest first, and a score.

GET/deals
ParameterNotes
collectionSlug or Move type.
kindOnly deals with a reason of this kind: trait_floor, last_sale, rarity, comps.
minScoreMinimum score. Default 0.
maxMistMaximum all-in price, MIST.
limit, cursorHighest score first. Default limit 50.
curl "https://rare.market/api/v1/deals?minScore=30&limit=10"
Response
{
  "asOf": "2026-10-26T02:04:16.141Z",
  "data": [
    {
      "id": "0xf9307ced1097083c1b0e2d7b1b8683167bdc745370d0fa992d97dd4ccd3fe369",
      "name": "Pumplienz #1382",
      "type": "0xc813dd750cff7592251334cd65e5d34a368cd6fbe3207103978415fbff877057::collection::Pumplienz",
      "kioskId": "0x40c069e09c5350c62b9ba9f877f1947766efbd2b3490ba36b2204e7157edebff",
      "imageUrl": "https://assets.alienz.tech/collections/6a144715bb27a402f898fca7618f8b47918ce311a0fad3ed638cb040725ed0f6/tokens/1382.webp",
      "collection": {
        "slug": "pumplienz",
        "name": "Pumplienz",
        "imageUrl": "https://assets.alienz.tech/collections/6a144715bb27a402f898fca7618f8b47918ce311a0fad3ed638cb040725ed0f6/tokens/56.webp",
        "verified": true
      },
      "rarity": { "rank": 1030, "tier": "uncommon" },
      "listing": {
        "venue": "tradeport",
        "source": "tradeport/simple",
        "orderKey": "0xf9307ced1097083c1b0e2d7b1b8683167bdc745370d0fa992d97dd4ccd3fe369",
        "objectId": "0x7628d7d4ab82abe948dbb7ee256af99868d140c67f373de695c55f6ff95e3f34",
        "priceMist": "9699900000",
        "allInMist": "10475892000",
        "feeMist": "290997000",
        "commissionMist": "0",
        "seller": "0xa7b32af76de025a0080904a498071d64548581f15b20be3e1ec052dc4908cc13",
        "listedAt": "2026-10-06T17:44:07.513Z",
        "kioskId": "0x40c069e09c5350c62b9ba9f877f1947766efbd2b3490ba36b2204e7157edebff",
        "nftType": "0xc813dd750cff7592251334cd65e5d34a368cd6fbe3207103978415fbff877057::collection::Pumplienz",
        "extra": { "feeBps": 300, "royaltyMist": "484995000" }
      },
      "lastSaleMist": "7250100000",
      "lastSaleAt": "2026-10-06T02:49:12.791Z",
      "topOfferMist": "5100000000",
      "owner": "0xa7b32af76de025a0080904a498071d64548581f15b20be3e1ec052dc4908cc13",
      "deal": {
        "reasons": [
          {
            "kind": "trait_floor",
            "text": "Cheapest Letterman Royal Blue Clothes by 68%, next 32.4 SUI",
            "strengthPct": 67.7
          }
        ],
        "score": 67.7
      }
    }
  ],
  "nextCursor": "WzY3LjcsIjB4ZjkzMDdjZWQxMDk3MDgzYzFiMGUyZDdiMWI4NjgzMTY3YmRjNzQ1MzcwZDBmYTk5MmQ5N2RkNGNjZDNmZTM2OSJd",
  "total": 70
}

Every ItemCard in the API also carries deal: the same object for a listing that is a deal, null otherwise (including unlisted items). In a collection grid, GET /collections/{slug}/items?sort=deals puts deals first by score, then the rest by price.

How a deal is computed

Deals are recomputed in the background every few minutes from every collection's current listings and its clean sales of the last 90 days. Wash trades are excluded from all sales used. A listing is a deal when at least one of four signals passes:

SignalPasses whenExample text
trait_floorThe item is the cheapest listing (all-in, across venues) of a trait value at most 15% of the collection carries, with at least 3 listings of that trait value, and is at least 20% under the next one. The trait must also trade: at least 5 clean sales in 90 days, at a median at or above the next listing's price. Without that, the gap is only between asking prices.Cheapest Gold Background by 38%, next 9.2 SUI
last_saleThe price is at least 20% under the item's own last clean sale of the last 30 days, and no newer sale of the item (of any kind) happened since.30% under its last sale, 12 SUI 3 days ago
rarityThe item is in the collection's top N% by rarity and priced within 2% of the floor, where top-N% items sold at a median of at least 1.15 times the floor they met over the last 90 days (5 sales or more). N is the widest of 1, 3, 5 and 10% that qualifies.Top 3% rarity at floor price
compsThe price is at least 20% under the median of the last 30 days' clean sales of other items sharing its rarest trait (a trait at most 10% of the collection carries, with at least 6 sales). When enough of those sales recorded the floor they met, the listing must also be 20% under that median scaled to today's floor.22% under recent sales of Gold Background (median 11.4 SUI, 6 sales)

Rules that apply to every signal:

  • Trait values that mean "absent" (None, Nothing, No, 0 and similar) never count as a trait.
  • A floor-priced common (price at most 1.05 times the cheapest other listing, no trait held by 15% or less of the collection, not in a top-N% rarity cut) is a deal only through trait_floor or last_sale.
  • The floor used is the cheapest other listing in the collection.
  • Only SUI listings are considered, and only collections with clean sales in the last 90 days.

Each passing signal becomes a reason. strengthPct is how far under its reference price the listing sits, in percent (for rarity it is the premium the top-N% sold at, expressed as a discount). Reasons are sorted strongest first, and:

Text
score = strongest strengthPct + 0.5 x (sum of the other reasons' strengthPct)

Both are rounded to one decimal. A deal is tied to the exact all-in price it was computed for. When the listing sells, is repriced or is undercut by another listing of the same item, the deal drops out at once rather than waiting for the next recompute.

Order book

GET/collections/{slug}/order-book

Listings (asks) and collection offers (bids) grouped into price levels.

ParameterNotes
bucketMistWidth of an ask level in MIST. Default: about 2% of the floor, rounded to two significant digits, at least 0.001 SUI (0.1 SUI when there is no floor).
curl "https://rare.market/api/v1/collections/popkins/order-book"
Response
{
  "bucketMist": "1400000000",
  "asks": [
    { "priceMist": "74200000000", "qty": 1, "cumMist": "278600000000" },
    { "priceMist": "68600000000", "qty": 2, "cumMist": "204400000000" },
    { "priceMist": "67200000000", "qty": 1, "cumMist": "67200000000" }
  ],
  "bids": [
    { "priceMist": "48000000000", "qty": 1, "cumMist": "48000000000" },
    { "priceMist": "47000000000", "qty": 1, "cumMist": "95000000000" },
    { "priceMist": "46620000000", "qty": 1, "cumMist": "141620000000" }
  ],
  "spreadMist": "20040000000",
  "spreadPct": 29.45
}
  • asks: the 14 lowest levels of all-in listing prices. Each priceMist is the bottom of its bucket. Listed highest first, so the best ask is last. cumMist accumulates from the best ask outward.
  • bids: the 14 highest collection offer prices, best first, with the number of offers at each price and the cumulative offer value.
  • spreadMist: the floor (lowest all-in listing) minus the best collection offer. spreadPct is that as a percent of the floor. Both are null when either side is empty.

The example is shortened to three levels a side. For offers grouped by price with what a seller receives, see GET /collections/{slug}/offer-book in Offers.

Sales

GET/collections/{slug}/sales

Sale points for a price chart: the newest 1,000 SUI sales (including accepted offers) in range, oldest first. range is 1h, 6h, 24h, 7d (default), 30d or all (the last two years). Other values fall back to 7d.

curl "https://rare.market/api/v1/collections/popkins/sales?range=24h"
Response
{
  "data": [
    { "t": "2026-10-26T09:36:54.868Z", "priceMist": "75000000000" },
    { "t": "2026-10-26T09:37:36.411Z", "priceMist": "74990000000" },
    { "t": "2026-10-26T19:17:47.652Z", "priceMist": "53990000000" }
  ]
}

For individual sales with item, buyer, seller and transaction, use GET /events?collection={slug}&kind=sale.

Floor and volume series

GET/collections/{slug}/series/{metric}

metric is floor or volume; range as above. The range is cut into about 48 equal buckets (at least one minute each), each point { t, valueMist }:

  • volume: the sum of sale prices in the bucket, "0" for buckets with no sales.
  • floor: the lowest sale price in the bucket, carried forward through buckets with no sales; the last point is the current floor (lowest all-in listing). Buckets before the first sale are left out.
Response
{
  "data": [
    { "t": "2026-10-26T09:30:00.000Z", "valueMist": "74990000000" },
    { "t": "2026-10-26T10:00:00.000Z", "valueMist": "74990000000" }
  ]
}
--
TPS:--