Completed sales, newest first. Includes EXC sales and purchases made through
outside marketplaces — marketplace tells you which.
A short page isn’t the end
The page window is cut first, and rows whose stored price can’t be
interpreted are dropped afterwards. So data.length can be less than
limit — even zero — while hasMore is true.Page on hasMore and nextCursor. Never stop because a page came back empty.
Response
Same shape as listings, with the sale fields filled in:
A 404 has two meanings
Either the id doesn’t resolve, or it resolves to a collection with no stored
contract address — sales are keyed by that address.
So a 404 here doesn’t prove the collection doesn’t exist. Check
/v1/collections/{id} to tell the two apart.
Errors: 400, 404, 429, 502. Unlike most of this API, sales can 502.
Working out volume
Sum price.raw and do the arithmetic in integer base units. decimal loses
precision on large wei values, and usd can be null on any row.
Also worth knowing: rows with prices we couldn’t interpret are dropped before
you see them, so a total from this endpoint is a total of interpretable sales.
- Listings — the active side of the same shape.
- Collections — aggregate volume without paging the whole feed.