raresats.net API
Offers API View as Markdown

The Offer object

An offer is a bid of a fixed price on one UTXO, listed or not. Every offer endpoint returns this object. The bidder's signatures are never part of it.

FieldTypeRequiredDescription
idstringyesThe offer id: 16 lowercase hex characters.
kindstringyesWhat the offer is on: item, one UTXO (the only kind so far).
outpointstringyesThe UTXO bid on, txid:vout.
valueintegeryesThe UTXO's own value in sats (it moves to the bidder whole).
seller_addressstringyesThe address that held the UTXO when the offer was made: it receives price, and only it can accept.
priceintegeryesThe offer price in sats: exactly what the seller receives (output 1).
platform_feeintegeryesThe bidder's platform fee: 2.5% of price, at least 546 sats.
fee_ratenumberyesThe network fee rate in sat/vB, fixed by the bidder's signature.
network_feeintegeryesThe network fee in sats.
totalintegeryesWhat the bidder pays: price + platform_fee + network_fee.
vsizeintegeryesThe transaction's estimated virtual size.
unit_pricenumberyes(price - value) / count, to the hundredth of a sat, as listings.
rowstringyesThe listing's own row (collection): the rarest market row holding every tracked sat of the UTXO, else the rarest market row present. Never a label row.
countintegeryesHow many sats of row the UTXO holds (the "×N" of a bulk listing).
rowsmap of integeryesEvery row the UTXO's tracked sats count toward, with their counts (label rows included).
typesarray of TypeGroup | nullyesThe UTXO's sats grouped by exact type combination, rarest first.
satsinteger | nullyesTracked sats in the UTXO (all rows).
rangesarray of array of integer | nullyesThe tracked sats as inclusive [first, last] ranges, ascending.
yearsmap of integer | nullyesTracked sats per mint year (UTC year of the block that mined them).
bidder_payment_addressstringyesThe bidder's payment address: it funds the offer and gets the change.
bidder_ordinals_addressstringyesWhere the bidder receives the UTXO (output 0).
statusstringyesactive (can be accepted), pending (accepted, in the mempool), accepted (confirmed), cancelled (by the bidder), expired, invalid (the UTXO moved or the bidder's funds were spent).
created_atintegeryesUnix seconds.
updated_atintegeryesUnix seconds of the last status change.
expires_atinteger | nullyesUnix seconds after which it can no longer be accepted; null: no expiry (until cancelled, accepted or invalid).
reasonstring | nullyesWhy an invalid offer is: utxo_spent (the UTXO was sold here otherwise: its listing bought, or another offer accepted), utxo_moved (spent elsewhere), funding_spent (a UTXO funding it was spent), config_changed (the marketplace's fee settings changed since it was made). null in every other status.
txidstring | nullyesThe accepting transaction, while pending and once accepted; otherwise null.
listing_idstring | nullyesThe UTXO's live listing, if it is listed.
acceptance_publicbooleanyestrue once an acceptance the server broadcast left the mempool unconfirmed: that fully signed transaction is public and can still confirm, even after a cancel or expiry here (the offer then ends accepted), until the bidder spends a funding UTXO or the UTXO moves. Back to false once it no longer can.
subbooleannoOnly on an offer read for a row (row=) that is not its own row but holds every tracked sat of the item (a sub-category or a label row): true.
in_bundlebooleannoOnly on an offer read for a row (row=) whose UTXO holds some sats of that row among others (in bundle): true. Its unit price is its own row's.
contains_countinteger | nullnoWith in_bundle: how many sats of the row asked for the item holds.

Example #

Offer
{
  "id": "dbf866a1e7e209e7",
  "kind": "item",
  "outpoint": "24b3eedfdc210f4a5baa96a6c99db5a51d3b1286ab2f58cb0b16fc607e54107f:0",
  "value": 10000,
  "seller_address": "bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr",
  "price": 110000,
  "platform_fee": 2750,
  "fee_rate": 3,
  "network_fee": 963,
  "total": 113713,
  "vsize": 321,
  "unit_price": 100000,
  "row": "decasat_alpha",
  "count": 1,
  "rows": {"uncommon": 1, "alpha_uncommon": 1, "decasat_alpha": 1},
  "types": [
    {
      "types": ["uncommon", "decasat_alpha", "alpha"],
      "count": 1,
      "sats": [441000000000000]
    }
  ],
  "sats": 1,
  "ranges": [[441000000000000, 441000000000000]],
  "years": {"2010": 1},
  "bidder_payment_address": "bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh",
  "bidder_ordinals_address": "bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh",
  "status": "active",
  "created_at": 1790967012,
  "updated_at": 1790967012,
  "expires_at": 1791571812,
  "reason": null,
  "txid": null,
  "listing_id": "5e1cb930f43354c3",
  "acceptance_public": false
}

The bidder offers 110,000 sats for a 10,000-sat UTXO holding one sat of its row: unit_price = (110,000 − 10,000) / 1 = 100,000 sats per sat. If the holder accepts, they receive 110,000 sats; the bidder pays 110,000 + 2,750 (2.5%) + the network fee.

Statuses #

active → pending (accepted, in the mempool) → accepted (confirmed); or cancelled (by the bidder), expired (past expires_at; never when it is null), invalid. Leaving active or pending deletes the bidder's signatures from the server.

An invalid offer says why in reason:

reason
utxo_spentThe UTXO was sold here otherwise: its listing was bought, or another offer on it accepted.
utxo_movedThe UTXO was spent elsewhere (its holder moved it).
funding_spentA UTXO funding the offer was spent: by the bidder, or by another of their offers sharing it that was accepted.
config_changedThe marketplace's fee settings changed since the offer was made: the signed fee no longer matches.

A public acceptance: acceptance_public #

Once accepted, the transaction carries every signature it needs. If it leaves the mempool unconfirmed, the offer goes back to active with acceptance_public: true: anyone holding that transaction can broadcast it again, as long as everything it spends is unspent. Cancelling or expiry here then ends the offer here but cannot recall it; should it confirm, the offer ends accepted all the same. Spend a funding UTXO to be certain. acceptance_public goes back to false once the transaction can no longer confirm.

The best offer of a listing #

A Listing shows the best active offer on its UTXO as best_offer:

FieldTypeRequiredDescription
idstringyesThe offer id.
priceintegeryesWhat the seller would receive, in sats.
unit_pricenumberyes(price - value) / count of the UTXO's own row, to the hundredth of a sat.
bidder_payment_addressstringyesThe bidder's payment address.
bidder_ordinals_addressstringyesWhere the bidder receives the UTXO.
created_atintegeryesUnix seconds.
expires_atinteger | nullyesUnix seconds; null: no expiry.