Place a collection offer
const url = 'https://api.digirare.com/v1/policy-offers';const options = { method: 'POST', headers: {'x-session-token': '<x-session-token>', 'Content-Type': 'application/json'}, body: '{"bidder_public_key":"example","alternatives":[{"psbt_hex":"example","leaf_hex":"example","policy":{"scope":"asset","asset":"example","collection":"example","max_supply_units":1,"min_supply_units":1,"issued_year":1,"series":1,"artist":"example"}}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.digirare.com/v1/policy-offers \ --header 'Content-Type: application/json' \ --header 'x-session-token: <x-session-token>' \ --data '{ "bidder_public_key": "example", "alternatives": [ { "psbt_hex": "example", "leaf_hex": "example", "policy": { "scope": "asset", "asset": "example", "collection": "example", "max_supply_units": 1, "min_supply_units": 1, "issued_year": 1, "series": 1, "artist": "example" } } ] }'Verifies every bidder-signed parent against chain prevouts and the committed leaf, seals the parents at rest, and stores the funding set, all alternatives, and the anchor commitment atomically (all or none). An identical retry answers 200 with already_placed. Every policy-offer route answers 503 service_unavailable when collection-offer signing is unavailable.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Funded_policy_offer_v1 canonical policy (spec 4.4). Exactly these keys, absent traits null; SHA256 of its canonical JSON is the leaf’s policy hash.
object
Responses
Section titled “Responses”Successful placePolicyOffer response.
object
object
object
“
trait = a collection policy with at least one trait predicate.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
What accepting would pay a seller at fee_rate, from the offer’s real parent size and a P2TR seller/fee child estimate. A quote, not a promise: the accept preflight recomputes from the seller’s actual UTXO.
object
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
A projected net can be negative when fees exceed the offered proceeds.
False when the net falls at or below dust at this rate (grey it out).
object
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
The settling transaction once this alternative filled; absent from an API that predates it.
Example
{ "result": { "protocol_version": "funded_policy_offer_v1", "offers": [ { "scope": "asset", "protocol_version": "funded_policy_offer_v1", "kind": "asset", "status": "active", "funding_status": "active", "delivery": { "mode": "detached" } } ] }}Successful placePolicyOffer response.
object
object
object
“
trait = a collection policy with at least one trait predicate.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
What accepting would pay a seller at fee_rate, from the offer’s real parent size and a P2TR seller/fee child estimate. A quote, not a promise: the accept preflight recomputes from the seller’s actual UTXO.
object
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
A projected net can be negative when fees exceed the offered proceeds.
False when the net falls at or below dust at this rate (grey it out).
object
Integer satoshis, exactly representable as a JSON number. Aggregated historical volume can exceed Bitcoin’s supply, so this is the safe JSON integer ceiling, not a single-transaction spending limit.
The settling transaction once this alternative filled; absent from an API that predates it.
Example
{ "result": { "protocol_version": "funded_policy_offer_v1", "offers": [ { "scope": "asset", "protocol_version": "funded_policy_offer_v1", "kind": "asset", "status": "active", "funding_status": "active", "delivery": { "mode": "detached" } } ] }}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"}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"}