raresats.net API
Market data View as Markdown

Transaction

GET/api/tx/{txid}

One transaction, confirmed or in the mempool, as the site's transaction page shows it: status (block, time, confirmations; or first seen and fee rate), fee, sizes, every input and output (address, value, the tracked rare sats each held), the flow of every tracked rare sat from the input that carried it to the output (or fee) it landed in, its sales and the Transfers and Extractions feeds' notable verdicts. A transaction confirmed before the index's moves retention shows only the tracked sats still in its outputs (sat_flow: outputs). Cacheable 15 s (a minute once 6 blocks deep).

Path parameters #

ParameterTypeRequiredDescription
txidstringyesThe transaction id, 64 hex digits.

Example request #

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

data = requests.get("https://raresats.net/api/tx/d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2").json()

Response 200 #

FieldTypeDescription
txidstring
statusstringpending: in the mempool; replaced, conflicted, evicted: it left the mempool unconfirmed and bitcoind no longer knows it (nothing else is known then). One of: confirmed, pending, replaced, conflicted, evicted, unknown.
heightinteger | nullThe confirming block.
hashstring | null
timeinteger | nullThat block's time, unix seconds.
confirmationsinteger | nullAs of the index's tip.
tx_indexinteger | nullIts position in the block.
indexedbooleanThe index holds its block.
first_seeninteger | nullPending: when bitcoind first saw it, unix seconds.
removedobject | nullThe index's record of its leaving the mempool (status, replaced_by, at).
versioninteger | nullIts version.
locktimeinteger | nullIts locktime.
sizeinteger | nullBytes.
vsizeinteger | nullVirtual bytes.
weightinteger | nullWeight units.
coinbaseboolean
input_valueinteger | nullSats; null for a coinbase or an input of unknown value.
output_valueinteger | nullSats.
feeinteger | nullSats.
fee_ratenumber | nullsat/vB, one decimal.
sat_flowstringcomplete: every tracked sat it moved is in flow; outputs: confirmed before the index's moves retention (moves_from), so only the tracked sats still in its unspent outputs are known; unknown: its block is not indexed yet.
trackedbooleanIt moved (or minted) tracked sats.
markerbooleanIt carries the marketplace's OP_RETURN marker.
raresatsobject | nullA raresats.net sale: {kind, count}, kind purchase or offer.
kindsarray of stringIts address-history kinds: mined, sale, extraction, burn, consolidation, transfer.
inputsarray of object
inputs[].vininteger
inputs[].outpointstring | nullThe spent output, txid:vout; null for a coinbase.
inputs[].valueinteger | nullThe spent output's value in sats; null for a coinbase or when unknown.
inputs[].addressstring | null
inputs[].script_pubkeystring | nullThe spent output's script, hex.
inputs[].sequenceinteger
inputs[].created_heightinteger | nullThe block that created the spent output, when known.
inputs[].sighashinteger | nullIts first signature's sighash flag (131 is SINGLE|ANYONECANPAY, a listing's).
inputs[].inscriptionsintegerInscription envelopes it reveals.
inputs[].trackedbooleanIt spent a UTXO holding tracked sats.
inputs[].extractedbooleanThat UTXO was extracted.
inputs[].piecesarray of object
inputs[].pieces[].offsetintegerIts offset in the output (or the fee).
inputs[].pieces[].startintegerIts first sat.
inputs[].pieces[].lenintegerHow many sats from start on.
inputs[].pieces[].typesarray of string
inputs[].pieces[].heightinteger | nullThe block that mined it.
inputs[].pieces[].datestring | nullThat block's UTC day, YYYY-MM-DD (its birthday page).
inputs[].pieces[].luckinteger | nullThat block's luck.
inputs[].inscribed_satsarray of integer
outputsarray of object
outputs[].voutinteger
outputs[].valueintegerSats.
outputs[].addressstring | null
outputs[].script_pubkeystring
outputs[].kindstringOne of: spendable, unspendable.
outputs[].trackedboolean
outputs[].extractedboolean
outputs[].piecesarray of object
outputs[].pieces[].offsetintegerIts offset in the output (or the fee).
outputs[].pieces[].startintegerIts first sat.
outputs[].pieces[].lenintegerHow many sats from start on.
outputs[].pieces[].typesarray of string
outputs[].pieces[].heightinteger | nullThe block that mined it.
outputs[].pieces[].datestring | nullThat block's UTC day, YYYY-MM-DD (its birthday page).
outputs[].pieces[].luckinteger | nullThat block's luck.
outputs[].inscribed_satsarray of integer
outputs[].markerbooleanThe marketplace's OP_RETURN marker.
outputs[].runestonebooleanAn OP_RETURN OP_13 runestone.
outputs[].spent_by_pendingobjectThe pending transaction spending it (tracked outputs only).
flowarray of object
flow[].sourcestringA spent UTXO (vin), newly mined sats (a coinbase's subsidy) or the block's fees (a coinbase). One of: input, subsidy, fees.
flow[].vininteger | nullThe input it came from (source: input).
flow[].input_offsetinteger | nullIts offset in the spent output (or in the coinbase's input stream).
flow[].deststringAn output (vout), the fee (paid to the miner) or lost (a coinbase that did not claim it). One of: output, fee, lost.
flow[].voutinteger | nullThe output it went to (dest: output).
flow[].offsetinteger | nullIts offset in that output (or in the fee).
flow[].startinteger
flow[].leninteger
flow[].typesarray of string
flow[].heightinteger | nullThe block that mined it.
flow[].datestring | nullThat block's UTC day.
flow[].luckinteger | nullThat block's luck.
fee_piecesarray of object
fee_pieces[].offsetintegerIts offset in the output (or the fee).
fee_pieces[].startintegerIts first sat.
fee_pieces[].lenintegerHow many sats from start on.
fee_pieces[].typesarray of string
fee_pieces[].heightinteger | nullThe block that mined it.
fee_pieces[].datestring | nullThat block's UTC day, YYYY-MM-DD (its birthday page).
fee_pieces[].luckinteger | nullThat block's luck.
mined_piecesarray of object
mined_pieces[].offsetintegerIts offset in the output (or the fee).
mined_pieces[].startintegerIts first sat.
mined_pieces[].lenintegerHow many sats from start on.
mined_pieces[].typesarray of string
mined_pieces[].heightinteger | nullThe block that mined it.
mined_pieces[].datestring | nullThat block's UTC day, YYYY-MM-DD (its birthday page).
mined_pieces[].luckinteger | nullThat block's luck.
lost_piecesarray of object
lost_pieces[].offsetintegerIts offset in the output (or the fee).
lost_pieces[].startintegerIts first sat.
lost_pieces[].lenintegerHow many sats from start on.
lost_pieces[].typesarray of string
lost_pieces[].heightinteger | nullThe block that mined it.
lost_pieces[].datestring | nullThat block's UTC day, YYYY-MM-DD (its birthday page).
lost_pieces[].luckinteger | nullThat block's luck.
rowsobjectTracked sats it moved, per row.
salesarray of objectIts sales, each with pending.
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).
transferobject | nullIts notable transfer (the Transfers feed's event, with reasons), else null.
extractionsarray of objectIts notable extractions (the Extractions feed's events).
entriesarray of objectOne address-history entry per party it moved tracked sats for.
dependsarray of stringPending parents whose tracked outputs it spends.
moves_frominteger | nullThe lowest block whose full sat flow the index keeps.
as_ofobject | null{height, time} of the index.
explorerstring | nullBlock explorer base URL, for a secondary link.
Response
{
  "txid": "d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2",
  "status": "confirmed",
  "height": 969717,
  "hash": "00000000000000000001ffc80f14c6109df0c60ae45957f0f22e736914cfb276",
  "time": 1791024538,
  "confirmations": 11,
  "tx_index": 1408,
  "indexed": true,
  "first_seen": null,
  "removed": null,
  "version": 2,
  "locktime": 969671,
  "size": 11675,
  "vsize": 11675,
  "weight": 46700,
  "coinbase": false,
  "input_value": 3649149319,
  "output_value": 3649128183,
  "fee": 21136,
  "fee_rate": 1.8,
  "sat_flow": "complete",
  "tracked": true,
  "marker": false,
  "raresats": null,
  "kinds": ["transfer"],
  "inputs": [
    {
      "vin": 0,
      "outpoint": "00d22e4e66b6e4de2e3f0fb3cb146df30c8d9b40845b103d5574741c1c7c778a:0",
      "value": 50000000,
      "address": "12DeZJEgWyd2ffYU6KekZdevGLqnkpnUU9",
      "script_pubkey": "76a9140d5c77dc25efd254a51e23ba422c4e6e8e2d25f588ac",
      "sequence": 4294967293,
      "created_height": 302976,
      "sighash": 1,
      "inscriptions": 0,
      "tracked": false,
      "extracted": false,
      "pieces": [],
      "inscribed_sats": []
    },
    {
      "vin": 2,
      "outpoint": "14833143ef7ebe658760f03f7533b50b9ebaa1ad87d85c597aaaa6ffe4b0b767:0",
      "value": 210587000,
      "address": "15vSCMDKkR3s7rDLNMnTrL7ivg8bqyRTSs",
      "script_pubkey": "76a91435fb94d60678093dce315bbd73dd4084582c93cb88ac",
      "sequence": 4294967293,
      "created_height": 709400,
      "sighash": 1,
      "inscriptions": 0,
      "tracked": true,
      "extracted": false,
      "pieces": [
        {
          "offset": 97510060,
          "start": 1282092500000000,
          "len": 1,
          "types": ["uncommon", "alpha"],
          "height": 302837,
          "date": "2014-05-27",
          "luck": 1
        }
      ],
      "inscribed_sats": []
    }
  ],
  "outputs": [
    {
      "vout": 0,
      "value": 3649128183,
      "address": "3EBzpPwBe8TBeuVzTGmKuJADQUniLKHSwy",
      "script_pubkey": "a914891ca628ea69a42f89db374f34c7ff4eff6fce9487",
      "kind": "spendable",
      "tracked": true,
      "extracted": false,
      "pieces": [
        {
          "offset": 159380060,
          "start": 1282092500000000,
          "len": 1,
          "types": ["uncommon", "alpha"],
          "height": 302837,
          "date": "2014-05-27",
          "luck": 1
        }
      ],
      "inscribed_sats": [],
      "marker": false,
      "runestone": false
    }
  ],
  "flow": [
    {
      "source": "input",
      "vin": 2,
      "input_offset": 97510060,
      "dest": "output",
      "vout": 0,
      "offset": 159380060,
      "start": 1282092500000000,
      "len": 1,
      "types": ["uncommon", "alpha"],
      "height": 302837,
      "date": "2014-05-27",
      "luck": 1
    }
  ],
  "fee_pieces": [],
  "mined_pieces": [],
  "lost_pieces": [],
  "rows": {"uncommon": 8, "black": 3, "alpha_uncommon": 8, "black_omega": 3},
  "sales": [],
  "transfer": {
    "id": "transfer:969717:d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2",
    "kind": "transfer",
    "height": 969717,
    "time": 1791024538,
    "block_hash": "00000000000000000001ffc80f14c6109df0c60ae45957f0f22e736914cfb276",
    "txid": "d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2",
    "tx_index": 1408,
    "rows": {"uncommon": 8, "black": 3, "alpha_uncommon": 8, "black_omega": 3},
    "moved": [
      {"row": "uncommon", "label": "Uncommon", "count": 8},
      {"row": "black", "label": "Black", "count": 3},
      {"row": "alpha_uncommon", "label": "Alpha uncommon", "count": 8},
      {"row": "black_omega", "label": "Black omega", "count": 3}
    ],
    "from": [
      {
        "outpoint": "14833143ef7ebe658760f03f7533b50b9ebaa1ad87d85c597aaaa6ffe4b0b767:0",
        "address": "15vSCMDKkR3s7rDLNMnTrL7ivg8bqyRTSs",
        "label": "15vSCMDKkR3s7rDLNMnTrL7ivg8bqyRTSs",
        "value": 210587000,
        "sats": 1,
        "created_height": 709400,
        "created_time": 1636736136,
        "extracted": false
      }
    ],
    "from_count": 8,
    "to": [
      {
        "vout": 0,
        "address": "3EBzpPwBe8TBeuVzTGmKuJADQUniLKHSwy",
        "label": "3EBzpPwBe8TBeuVzTGmKuJADQUniLKHSwy",
        "value": 3649128183,
        "sats": 11,
        "kind": "spendable",
        "extracted": false
      }
    ],
    "to_count": 1,
    "fee_sats": 0,
    "dormancy": {
      "seconds": 301043862,
      "outpoint": "f836de28ecaed8eea81acee25931c47e8dc136d2969d21f2ec81ac32375cdd04:1",
      "created_height": 458063,
      "created_time": 1489980676
    },
    "sats": [{"sat": 472424999999999, "height": 94484}],
    "sats_total": 11,
    "reasons": [
      {
        "code": "dormant",
        "category": "dormant",
        "seconds": 301043862,
        "label": "Dormant 9.5 years"
      }
    ]
  },
  "extractions": [],
  "entries": [
    {
      "txid": "d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2",
      "height": 969717,
      "time": 1791024538,
      "tx_index": 1408,
      "direction": "out",
      "kind": "transfer",
      "rows_in": {},
      "rows_out": {"uncommon": 1, "alpha_uncommon": 1},
      "sats_in": 0,
      "sats_out": 1,
      "value_in": 0,
      "value_out": 61700000,
      "outputs_in": 0,
      "inputs_out": 1,
      "extracted_in": false,
      "extracted_out": false,
      "extracted_sats": 0,
      "isolated": 0,
      "burned": 0,
      "roles": [],
      "counterparty": "3EBzpPwBe8TBeuVzTGmKuJADQUniLKHSwy",
      "counterparty_script_pubkey": "a914891ca628ea69a42f89db374f34c7ff4eff6fce9487",
      "counterparties": 1,
      "lead_sat": {"sat": 1739532500000000, "types": ["uncommon", "alpha"]},
      "sales": [],
      "address": "1Hjv1dXPWvcZ2E7un5wv5tkCJ2oa9r4rj",
      "script_pubkey": "76a914032a7a69b345c6770a95be057d54af7c384c34b288ac"
    }
  ],
  "depends": [],
  "moves_from": 965696,
  "as_of": {"height": 969727, "time": 1791028507},
  "explorer": "https://mempool.space"
}

Errors #

{error} (a message, no code):

StatusWhen
400Not a transaction id.
404No such transaction: neither the blockchain nor the mempool holds it.
503The index is unavailable, busy, or does not serve transactions yet.
  • The site's own view of a transaction (the page at /tx/{txid}): what a block explorer shows, plus what the transaction did to the rare sats raresats.net tracks.
  • flow lists every run of tracked sats from the input that carried it (vin, its offset in the spent output) to the output it landed in (vout, its offset there), or the fee, under ordinal theory's first-in-first-out rule. Each run has its mint date (a birthday page) and luck (its block's: Sat luck). A coinbase's runs come from the block subsidy or the block's fees.
  • inputs and outputs hold every input and output, each with the tracked sats it held (pieces), extracted, its inscribed tracked sats; an input's revealed inscriptions and its signature's sighash (131, SINGLE|ANYONECANPAY, is a marketplace listing's); an output's OP_RETURN marker (a raresats.net sale) or runestone.
  • sat_flow says how much is known: complete; outputs for a transaction confirmed before the index's moves retention (moves_from, about four weeks), when only the tracked sats still in its unspent outputs are known; unknown while its block is being indexed.
  • sales are its sales (marketplace, price, unit price, seller and buyer); raresats is set for a raresats.net purchase or accepted offer. transfer and extractions are the Transfers and Extractions feeds' notable verdicts, with their reasons.
  • A pending transaction has status: pending, first_seen and fee_rate; one that left the mempool unconfirmed, and that bitcoind no longer knows, has status replaced, conflicted or evicted and removed (with replaced_by), and nothing else.
  • GET /api/sales/{seq}/tx redirects to /tx/{txid}; with accept: application/json it answers {txid, href}.