Market activity
const url = 'https://api.digirare.com/v1/events?kind=sales&limit=50';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://api.digirare.com/v1/events?kind=sales&limit=50'Public feed of the whole market, newest first: sales (the /fills tape, with its exclusions), listings placed and delisted/expired/invalidated, and asset and collection offers placed and ended. A filled listing or offer has no separate ended event; its sale is the event. Merged from several sources under one opaque keyset cursor; follow next_cursor. Public book facts only: never a PSBT, a signature, a private counter, or a raw transaction.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Narrow the feed to one family: sales, listings (listed and delisted), or offers (asset and collection offers placed and ended).
Opaque (created_at,id) continuation token returned as next_cursor.
Responses
Section titled “Responses”One page of the public market event feed, newest first
object
object
Stable per (kind, subject).
Unix seconds: a sale’s broadcast, a placement’s creation, an ending’s retirement (a derived expiry carries its expires_at).
Why a delisted or *_ended event ended; null on every other kind.
Null for a collection-scoped offer.
A collection offer’s collection slug.
A sale’s buyer (its delivery address).
Example
{ "result": [ { "kind": "sale", "reason": "owner", "fill_kind": "listing" } ]}Stable machine-readable failure
object
On 422 mempool_rejected from a broadcast: which deterministic node policy refused the bytes. Retrying the same bytes fails the same way. fee_floor: re-quote at a higher fee_rate. chain_too_long: too many unconfirmed ancestors; wait for a confirmation, then retry. truc: a version-3 (TRUC) package rule, such as spending an unconfirmed version-3 output; wait for a confirmation, then retry.
The node’s own reject reason, on mempool_rejected (422) and on state_changed (409) when a broadcast lost to a conflicting or replacing spend.
Present and true when mempool_policy is chain_too_long or truc.
On a checkout or accept completion refused as mempool_rejected: the journaled settlement ended and every listing, bid, and asset claim it held was released (its inputs were proven unspent). The quote or accept is replaced; request a new one.
Batch listing routes only: every refused item. The first sets the status and code.
One refused item in a batch refusal’s refused_listings array. Nothing in the batch was changed.
object
On 429 rate_limited: the exact seconds until the oldest counted request leaves the window; a retry then is admitted (also sent as Retry-After). Limited writes are bucketed per route scope in exact sliding 60-second windows: by session address when a valid x-session-token is present, otherwise by IP, with a per-IP ceiling across sessions. Expensive writes: 20, ceiling 120. Signed completions: 120, ceiling 600. Session minting (/auth/*): 60 per IP. A request refused by any bucket is counted by none.
Example
{ "code": "invalid_request", "mempool_policy": "fee_floor"}