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 #
| Parameter | Type | Required | Description |
|---|---|---|---|
outpoint | string | yes | The output as txid:vout. |
Example request #
curl 'https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1'const response = await fetch('https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1');
const data = await response.json();import requests
data = requests.get("https://raresats.net/api/utxo/f1c500f81c331d31415902755278e2a599311d8121ac9582bc63ad981efa48fb:1").json()Response 200 #
| Field | Type | Description |
|---|---|---|
outpoint | string | txid:vout. |
txid | string | |
vout | integer | |
status | string | unknown when this server has no way to tell (no bitcoind or ord index configured, or both unreachable). One of: unspent, spent, unknown. |
spent | boolean | null | Whether it is spent (a spend in the mempool counts), null when unknown. |
value | integer | null | Its value in sats. |
address | string | null | Its address (null for a script without one). |
script | string | null | Its scriptPubKey, hex. |
kind | string | null | spendable or unspendable. |
created_height | integer | null | The block that created it. |
created_time | integer | null | That block's time, unix seconds. |
confirmations | integer | null | Confirmations of the transaction that created it. |
extracted | boolean | null | The index's extracted verdict (rare sats isolated in a small UTXO), when it tracks the output. |
as_of | object | null | {height, time} of the index. |
chain | string | null | The chain (mainnet). |
explorer | string | null | Block explorer base URL. |
sources | object | {fork, oracle, bitcoind, history}, each ok, off (not configured) or unavailable: what this answer could ask. |
contents | string | complete: 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. |
tracked | object | null | |
other | object | null | null without the ord index, or for a spent output. |
inscriptions | array of object | null | {id, sat, offset}, sat and offset where known (id null when only the tracked sat is known to be inscribed). |
inscriptions_total | integer | |
runes | array of object | null | {name, amount, divisibility, symbol}; amount a decimal string. |
spent_in | object | 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. |
now | array of object | null | A spent output: where its tracked sats are now, up to 12: {sat, len, types, kind, outpoint, offset, address, created_height, created_time}. |
now_total | integer | |
sales | array of object | Sales out of the output (direction: sold) and into it (bought), newest first. |
sales[].seq | integer | null | The sales store's sequence number, else null. |
sales[].txid | string | The sale transaction. |
sales[].vin | integer | null | The seller input. |
sales[].height | integer | null | Block height (null while pending). |
sales[].time | integer | Unix seconds. |
sales[].marketplace | string | Marketplace id. |
sales[].price | integer | null | Price in sats. |
sales[].row | string | null | The sale's own row. |
sales[].unit_price | number | null | Unit price per sat of that row. |
sales[].count | integer | null | Sats of that row sold. |
sales[].sats_sold | integer | null | Tracked sats the sale sold. |
sales[].seller | object | null | {address, outpoint}. |
sales[].buyer | object | null | {address, outpoint}. |
sales[].inscribed | boolean | An inscription was on a sold sat. |
sales[].outlier | boolean | null | A statistical outlier (null when unknown). |
sales[].secondary | map of integer | A 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[].as | array of string | The 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[].pending | boolean | Still in the mempool: listed first, with first_seen and fee_rate; time is first_seen. |
sales[].first_seen | integer | null | When the transaction was first seen in the mempool (bitcoind's entry time), unix seconds. |
sales[].fee_rate | number | null | Its fee rate, sat/vB (one decimal). |
notes | array of string | What could not be shown, and why. |
listing | Listing | null | The marketplace's live listing of the output, else null. |
pending | object | null | An output a transaction still in the mempool makes: {txid, first_seen, fee_rate}. Absent otherwise. |
Errors #
{error} (a message, no code):
| Status | When |
|---|---|
| 400 | Not an outpoint. |
| 404 | No such output: its transaction is unknown, or has no output of that index. |
| 503 | The index is unavailable or busy. |
trackedlists the sats raresats.net tracks, each sat (or run of a whole range such as block 9) with itsoffsetin the output, so a wallet can split them out, and itsluck(its block's: Sat luck).otherlists 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) andnow: 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 answercontents: "unknown", andnotessays so. sourcesandnotessay what the answer could not ask: a server without bitcoind or the ord index shows only the tracked sats, and may answerstatus: "unknown"for an output it tracks nothing in.salesare the sales out of and into the output, each with its ownrowand itssecondaryrows (the other sats sold with it).listingis the marketplace's live listing of the output (a Listing), ornull.- A spend still in the mempool is one
spent_inwithpending: true: the index's mempool overlay names it (source: "fork_mempool", withfirst_seen,fee_rate,vinandsale), else bitcoind's mempool (source: "mempool"). An output a pending transaction makes haspending: {txid, first_seen, fee_rate}.