Place funded offers
const url = 'https://api.digirare.com/v1/funded-offers';const options = { method: 'POST', headers: {'x-session-token': '<x-session-token>', 'Content-Type': 'application/json'}, body: '{"funding_tx_hex":"example","bids":[{"txid":"example","vout":1}],"targets":[{"scope":"asset","asset":"example","collection":"example","max_supply_units":1,"min_supply_units":1,"issued_year":1,"series":1,"artist":"example","target_outpoint":{"txid":"example","vout":1}}],"expires_at":1,"receive_address":"example","delivery_mode":"detached"}'};
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/funded-offers \ --header 'Content-Type: application/json' \ --header 'x-session-token: <x-session-token>' \ --data '{ "funding_tx_hex": "example", "bids": [ { "txid": "example", "vout": 1 } ], "targets": [ { "scope": "asset", "asset": "example", "collection": "example", "max_supply_units": 1, "min_supply_units": 1, "issued_year": 1, "series": 1, "artist": "example", "target_outpoint": { "txid": "example", "vout": 1 } } ], "expires_at": 1, "receive_address": "example", "delivery_mode": "detached" }'Places offers on bid outputs the signed funding transaction itself proves. Each named output must pay the session’s own address and hold exactly the offer price (plus the 330-sat asset UTXO for attached delivery); the accepting seller pays the marketplace fee. The placement is rehearsed first so a bad target fails before the network sees anything; the bytes are then relayed (a transaction the network already knows is a success) and the cross-product of the outputs and targets is placed. A relay failure places nothing and journals nothing; the client submits the same bytes again.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
The fully signed, finalized funding transaction. Its outputs are the only authority for each bid’s value.
Which outputs of the funding transaction are bid slots; txid, when given, must be the transaction’s own.
object
One alternative eligibility policy. Multiple targets sharing one bid outpoint are mutually exclusive choices, not additional capacity.
object
Canonical compact Counterparty key. A subasset uses its A
Optional exact asset outpoint. Never substitutes another unit. Cart quantity must be 1; offers must have asset scope.
object
Destination for a detached Counterparty balance. ANY address family Core accepts, legacy P2PKH included: a delivery address is a UTF-8 string inside the detach OP_RETURN, never a signer and never an output script. Deliberately wider than BitcoinAddress.
Responses
Section titled “Responses”Successful placeFundedOffers response.
object
A placement whose slots were minted by the relayed funding transaction.
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.
object
object
object
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.
object
Example
{ "result": { "targets": [ { "scope": "asset" } ], "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"}