Market data
All routes on this page are public. Set $API as in the
quickstart. No session or signing key is required.
Browse the catalog
Section titled “Browse the catalog”| Route | Use |
|---|---|
GET /v1/collections |
Discover collections |
GET /v1/collections/{slug}/assets |
Browse a collection’s assets |
GET /v1/artists |
Discover artists |
GET /v1/assets/{asset} |
Read an asset’s metadata |
GET /v1/assets/{asset}/book |
Read listings, price levels, offers, and trades |
Use the returned collection slug and canonical asset ID in later requests. Asset IDs and subasset display names are not interchangeable.
curl -sS "$API/v1/collections/rare-pepe/assets?limit=20"curl -sS "$API/v1/assets/RAREPEPE/book"Read prices and available quantity
Section titled “Read prices and available quantity”An asking price is a seller’s requested price, not a completed sale. A floor price is the cheapest available listing. Use the book for current asking prices, and fills for trading activity.
Offers sharing funding_slot_id can fund only one purchase. Deduplicate by
that ID when calculating liquidity; eligible targets are not independent
buying capacity. See Offers.
Activity and analytics
Section titled “Activity and analytics”curl -sS "$API/v1/events?kind=sales&limit=20"curl -sS "$API/v1/fills?collection=rare-pepe&limit=20"curl -sS "$API/v1/analytics"GET /v1/events covers listings, offers, and sales. GET /v1/fills is the trade
history. GET /v1/analytics provides aggregate market metrics, daily sales, and
sampled market depth. Check each response’s status and time fields when deciding
what to count as settled volume.
Read Events for feed semantics and deduplication. Your private account feed is separate and requires your address’s session.
Pagination
Section titled “Pagination”Paged routes return result, result_count, and next_cursor. Follow the
cursor until it is null; the first page is not necessarily the full result.
Keep filters unchanged while paging. Start without a cursor when you change
them. Limits and available filters are listed per endpoint in the
reference.
Using standard JavaScript fetch:
let cursor;do { const url = new URL("https://api.digirare.com/v1/fills"); url.searchParams.set("limit", "50"); if (cursor) url.searchParams.set("cursor", cursor); const response = await fetch(url); if (!response.ok) throw new Error(`HTTP ${response.status}: stop and check the response before retrying`); const page = await response.json(); for (const fill of page.result) { // Store or display the fill. Deduplicate when polling overlapping pages. } cursor = page.next_cursor;} while (cursor);Freshness
Section titled “Freshness”Public reads can be cached, and confirmed Bitcoin transactions take time to appear in Counterparty’s indexed balances. A book snapshot does not guarantee that a listing is still available. Request a fresh quote before signing; the API verifies availability again at submission.
Reuse results while rendering a page, avoid polling each card separately, and
honor Retry-After on 429. See Limits and errors
for request budgets and indexing delays.