raresats.net API
Market data View as Markdown

UTXO

GET/api/utxo/{outpoint}

One output and every rare sat in it: the sats raresats.net tracks, each with its offset in the output; the rare and exotic sats it does not track, found in the output's sat ranges; inscriptions and runes; for a spent output, where it was spent and where its tracked sats are now; its sales and the marketplace's live listing of it. Cacheable 15 s. A spend still in the mempool is one spent_in with pending: true (the index's word preferred to bitcoind's); an output a pending transaction makes has pending.

Path parameters #

ParameterTypeRequiredDescription
outpointstringyesThe output as txid:vout.

Example request #

cURL
curl 'https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1'
JavaScript
const response = await fetch('https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1');
const data = await response.json();
Python
import requests

data = requests.get("https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1").json()

Response 200 #

FieldTypeDescription
outpointstringtxid:vout.
txidstring
voutinteger
statusstringunknown when this server has no way to tell (no bitcoind or ord index configured, or both unreachable). One of: unspent, spent, unknown.
spentboolean | nullWhether it is spent (a spend in the mempool counts), null when unknown.
valueinteger | nullIts value in sats.
addressstring | nullIts address (null for a script without one).
scriptstring | nullIts scriptPubKey, hex.
kindstring | nullspendable or unspendable.
created_heightinteger | nullThe block that created it.
created_timeinteger | nullThat block's time, unix seconds.
confirmationsinteger | nullConfirmations of the transaction that created it.
extractedboolean | nullThe index's extracted verdict (rare sats isolated in a small UTXO), when it tracks the output.
as_ofobject | null{height, time} of the index.
chainstring | nullThe chain (mainnet).
explorerstring | nullBlock explorer base URL.
sourcesobject{fork, oracle, bitcoind, history}, each ok, off (not configured) or unavailable: what this answer could ask.
contentsstringcomplete: every sat range was typed; tracked: the tracked sats only; recovered: a spent output's tracked sats, from the moves the index keeps; unknown: nothing could be recovered.
trackedobject | null
otherobject | nullnull without the ord index, or for a spent output.
inscriptionsarray of object | null{id, sat, offset}, sat and offset where known (id null when only the tracked sat is known to be inscribed).
inscriptions_totalinteger
runesarray of object | null{name, amount, divisibility, symbol}; amount a decimal string.
spent_inobject | null{txid, height, time, pending, source}: the spending transaction (pending while in the mempool, then with first_seen, fee_rate, vin, sale); source says how it was found: fork_mempool (the index's mempool overlay, preferred), mempool (bitcoind's), sale, moves or history. One spender, whichever said so.
nowarray of object | nullA spent output: where its tracked sats are now, up to 12: {sat, len, types, kind, outpoint, offset, address, created_height, created_time}.
now_totalinteger
salesarray of objectSales out of the output (direction: sold) and into it (bought), newest first.
sales[].seqinteger | nullThe sales store's sequence number, else null.
sales[].txidstringThe sale transaction.
sales[].vininteger | nullThe seller input.
sales[].heightinteger | nullBlock height (null while pending).
sales[].timeintegerUnix seconds.
sales[].marketplacestringMarketplace id.
sales[].priceinteger | nullPrice in sats.
sales[].rowstring | nullThe sale's own row.
sales[].unit_pricenumber | nullUnit price per sat of that row.
sales[].countinteger | nullSats of that row sold.
sales[].sats_soldinteger | nullTracked sats the sale sold.
sales[].sellerobject | null{address, outpoint}.
sales[].buyerobject | null{address, outpoint}.
sales[].inscribedbooleanAn inscription was on a sold sat.
sales[].outlierboolean | nullA statistical outlier (null when unknown).
sales[].secondarymap of integerA sale's secondary rows: the market rows of the other sats it sold (not its own row, a row it is a sub-category of, or a label row), each with its sats, primary-first: {"black_omega": 1} for a black omega sold with an alpha uncommon; {} for none. A sale never counts in its secondary rows' markets (the primary-sat rule, in Concepts).
sales[].asarray of stringThe sat's rows (rows, in its order) the sale sold sats of: why a sale another row led is listed on this sat (a Block 9 chunk on its palindrome's page names block9, block9_palindrome, nakamoto_palindrome).
sales[].pendingbooleanStill in the mempool: listed first, with first_seen and fee_rate; time is first_seen.
sales[].first_seeninteger | nullWhen the transaction was first seen in the mempool (bitcoind's entry time), unix seconds.
sales[].fee_ratenumber | nullIts fee rate, sat/vB (one decimal).
notesarray of stringWhat could not be shown, and why.
listingListing | nullThe marketplace's live listing of the output, else null.
pendingobject | nullAn output a transaction still in the mempool makes: {txid, first_seen, fee_rate}. Absent otherwise.

Errors #

{error} (a message, no code):

StatusWhen
400Not an outpoint.
404No such output: its transaction is unknown, or has no output of that index.
503The index is unavailable or busy.
  • tracked lists the sats raresats.net tracks, each sat (or run of a whole range such as block 9) with its offset in the output, so a wallet can split them out, and its luck (its block's: Sat luck).
  • other lists the rare and exotic sats raresats.net does not track (vintage, pizza, Nakamoto, block 78/286/666, jpeg, hitman, Silk Road, plain alphas and omegas, palindromes, …), grouped by exact type combination with counts and a few sample sats. It needs the ord index; a huge output is scanned only up to a budget (truncated).
  • A spent output has spent_in (the spending transaction, found in the mempool, a sale, the block moves the index keeps or the holder's history) and now: where each of its tracked sats is today. What a spent output held is recovered from the block moves the index keeps (the last 4,032 blocks); older ones answer contents: "unknown", and notes says so.
  • sources and notes say what the answer could not ask: a server without bitcoind or the ord index shows only the tracked sats, and may answer status: "unknown" for an output it tracks nothing in.
  • sales are the sales out of and into the output, each with its own row and its secondary rows (the other sats sold with it).
  • listing is the marketplace's live listing of the output (a Listing), or null.
  • A spend still in the mempool is one spent_in with pending: true: the index's mempool overlay names it (source: "fork_mempool", with first_seen, fee_rate, vin and sale), else bitcoind's mempool (source: "mempool"). An output a pending transaction makes has pending: {txid, first_seen, fee_rate}.