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 #
| Parameter | Type | Required | Description |
|---|---|---|---|
txid | string | yes | The transaction id, 64 hex digits. |
Example request #
curl 'https://raresats.net/api/tx/d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2'const response = await fetch('https://raresats.net/api/tx/d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2');
const data = await response.json();import requests
data = requests.get("https://raresats.net/api/tx/d78f3f29369db39032219ae561732dda47b54b6f6d4d93d72a22c257c3946ac2").json()Response 200 #
| Field | Type | Description |
|---|---|---|
txid | string | |
status | string | pending: 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. |
height | integer | null | The confirming block. |
hash | string | null | |
time | integer | null | That block's time, unix seconds. |
confirmations | integer | null | As of the index's tip. |
tx_index | integer | null | Its position in the block. |
indexed | boolean | The index holds its block. |
first_seen | integer | null | Pending: when bitcoind first saw it, unix seconds. |
removed | object | null | The index's record of its leaving the mempool (status, replaced_by, at). |
version | integer | null | Its version. |
locktime | integer | null | Its locktime. |
size | integer | null | Bytes. |
vsize | integer | null | Virtual bytes. |
weight | integer | null | Weight units. |
coinbase | boolean | |
input_value | integer | null | Sats; null for a coinbase or an input of unknown value. |
output_value | integer | null | Sats. |
fee | integer | null | Sats. |
fee_rate | number | null | sat/vB, one decimal. |
sat_flow | string | complete: 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. |
tracked | boolean | It moved (or minted) tracked sats. |
marker | boolean | It carries the marketplace's OP_RETURN marker. |
raresats | object | null | A raresats.net sale: {kind, count}, kind purchase or offer. |
kinds | array of string | Its address-history kinds: mined, sale, extraction, burn, consolidation, transfer. |
inputs | array of object | |
inputs[].vin | integer | |
inputs[].outpoint | string | null | The spent output, txid:vout; null for a coinbase. |
inputs[].value | integer | null | The spent output's value in sats; null for a coinbase or when unknown. |
inputs[].address | string | null | |
inputs[].script_pubkey | string | null | The spent output's script, hex. |
inputs[].sequence | integer | |
inputs[].created_height | integer | null | The block that created the spent output, when known. |
inputs[].sighash | integer | null | Its first signature's sighash flag (131 is SINGLE|ANYONECANPAY, a listing's). |
inputs[].inscriptions | integer | Inscription envelopes it reveals. |
inputs[].tracked | boolean | It spent a UTXO holding tracked sats. |
inputs[].extracted | boolean | That UTXO was extracted. |
inputs[].pieces | array of object | |
inputs[].pieces[].offset | integer | Its offset in the output (or the fee). |
inputs[].pieces[].start | integer | Its first sat. |
inputs[].pieces[].len | integer | How many sats from start on. |
inputs[].pieces[].types | array of string | |
inputs[].pieces[].height | integer | null | The block that mined it. |
inputs[].pieces[].date | string | null | That block's UTC day, YYYY-MM-DD (its birthday page). |
inputs[].pieces[].luck | integer | null | That block's luck. |
inputs[].inscribed_sats | array of integer | |
outputs | array of object | |
outputs[].vout | integer | |
outputs[].value | integer | Sats. |
outputs[].address | string | null | |
outputs[].script_pubkey | string | |
outputs[].kind | string | One of: spendable, unspendable. |
outputs[].tracked | boolean | |
outputs[].extracted | boolean | |
outputs[].pieces | array of object | |
outputs[].pieces[].offset | integer | Its offset in the output (or the fee). |
outputs[].pieces[].start | integer | Its first sat. |
outputs[].pieces[].len | integer | How many sats from start on. |
outputs[].pieces[].types | array of string | |
outputs[].pieces[].height | integer | null | The block that mined it. |
outputs[].pieces[].date | string | null | That block's UTC day, YYYY-MM-DD (its birthday page). |
outputs[].pieces[].luck | integer | null | That block's luck. |
outputs[].inscribed_sats | array of integer | |
outputs[].marker | boolean | The marketplace's OP_RETURN marker. |
outputs[].runestone | boolean | An OP_RETURN OP_13 runestone. |
outputs[].spent_by_pending | object | The pending transaction spending it (tracked outputs only). |
flow | array of object | |
flow[].source | string | A spent UTXO (vin), newly mined sats (a coinbase's subsidy) or the block's fees (a coinbase). One of: input, subsidy, fees. |
flow[].vin | integer | null | The input it came from (source: input). |
flow[].input_offset | integer | null | Its offset in the spent output (or in the coinbase's input stream). |
flow[].dest | string | An output (vout), the fee (paid to the miner) or lost (a coinbase that did not claim it). One of: output, fee, lost. |
flow[].vout | integer | null | The output it went to (dest: output). |
flow[].offset | integer | null | Its offset in that output (or in the fee). |
flow[].start | integer | |
flow[].len | integer | |
flow[].types | array of string | |
flow[].height | integer | null | The block that mined it. |
flow[].date | string | null | That block's UTC day. |
flow[].luck | integer | null | That block's luck. |
fee_pieces | array of object | |
fee_pieces[].offset | integer | Its offset in the output (or the fee). |
fee_pieces[].start | integer | Its first sat. |
fee_pieces[].len | integer | How many sats from start on. |
fee_pieces[].types | array of string | |
fee_pieces[].height | integer | null | The block that mined it. |
fee_pieces[].date | string | null | That block's UTC day, YYYY-MM-DD (its birthday page). |
fee_pieces[].luck | integer | null | That block's luck. |
mined_pieces | array of object | |
mined_pieces[].offset | integer | Its offset in the output (or the fee). |
mined_pieces[].start | integer | Its first sat. |
mined_pieces[].len | integer | How many sats from start on. |
mined_pieces[].types | array of string | |
mined_pieces[].height | integer | null | The block that mined it. |
mined_pieces[].date | string | null | That block's UTC day, YYYY-MM-DD (its birthday page). |
mined_pieces[].luck | integer | null | That block's luck. |
lost_pieces | array of object | |
lost_pieces[].offset | integer | Its offset in the output (or the fee). |
lost_pieces[].start | integer | Its first sat. |
lost_pieces[].len | integer | How many sats from start on. |
lost_pieces[].types | array of string | |
lost_pieces[].height | integer | null | The block that mined it. |
lost_pieces[].date | string | null | That block's UTC day, YYYY-MM-DD (its birthday page). |
lost_pieces[].luck | integer | null | That block's luck. |
rows | object | Tracked sats it moved, per row. |
sales | array of object | Its sales, each with pending. |
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). |
transfer | object | null | Its notable transfer (the Transfers feed's event, with reasons), else null. |
extractions | array of object | Its notable extractions (the Extractions feed's events). |
entries | array of object | One address-history entry per party it moved tracked sats for. |
depends | array of string | Pending parents whose tracked outputs it spends. |
moves_from | integer | null | The lowest block whose full sat flow the index keeps. |
as_of | object | null | {height, time} of the index. |
explorer | string | null | Block explorer base URL, for a secondary link. |
{
"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):
| Status | When |
|---|---|
| 400 | Not a transaction id. |
| 404 | No such transaction: neither the blockchain nor the mempool holds it. |
| 503 | The 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. flowlists 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 mintdate(a birthday page) andluck(its block's: Sat luck). A coinbase's runs come from the blocksubsidyor the block'sfees.inputsandoutputshold 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_RETURNmarker(a raresats.net sale) orrunestone.sat_flowsays how much is known:complete;outputsfor 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;unknownwhile its block is being indexed.salesare its sales (marketplace, price, unit price, seller and buyer);raresatsis set for a raresats.net purchase or accepted offer.transferandextractionsare the Transfers and Extractions feeds' notable verdicts, with theirreasons.- A pending transaction has
status: pending,first_seenandfee_rate; one that left the mempool unconfirmed, and that bitcoind no longer knows, hasstatusreplaced,conflictedorevictedandremoved(withreplaced_by), and nothing else. GET /api/sales/{seq}/txredirects to/tx/{txid}; withaccept: application/jsonit answers{txid, href}.