Blockstream Esplora HTTP API

Public, no-authentication Bitcoin block explorer REST API behind blockstream.info. Read blocks, transactions, addresses, scripthashes, UTXOs, the mempool, and fee estimates; broadcast raw transactions; and (on Liquid) query issued assets. Network is selected by base-URL prefix.

OpenAPI Specification

blockstream-esplora-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Blockstream Esplora HTTP API
  version: '1.0'
  description: >-
    Esplora is Blockstream's open-source Bitcoin block explorer and its HTTP REST
    API. It provides read access to blocks, transactions, addresses, the mempool,
    fee estimates, and (on Liquid/Elements networks) issued assets. The API is
    public and requires no authentication. The same API backs blockstream.info and
    its testnet, signet, and Liquid networks. Amounts are in satoshis; hashes and
    txids are hex-encoded.
  x-generated: '2026-07-18'
  x-method: generated
  x-source: https://github.com/Blockstream/esplora/blob/master/API.md
  contact:
    name: Blockstream Esplora
    url: https://github.com/Blockstream/esplora
  license:
    name: MIT
    url: https://github.com/Blockstream/esplora/blob/master/LICENSE
servers:
  - url: https://blockstream.info/api
    description: Bitcoin mainnet
  - url: https://blockstream.info/testnet/api
    description: Bitcoin testnet
  - url: https://blockstream.info/signet/api
    description: Bitcoin signet
  - url: https://blockstream.info/liquid/api
    description: Liquid mainnet
  - url: https://blockstream.info/liquidtestnet/api
    description: Liquid testnet
tags:
  - name: Transactions
  - name: Addresses
  - name: Blocks
  - name: Mempool
  - name: Fee Estimates
  - name: Mining
  - name: Assets
paths:
  /tx/{txid}:
    get:
      operationId: getTransaction
      summary: Get transaction
      description: Retrieve transaction information and details.
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Transaction object }
        '404': { description: Transaction not found }
  /tx/{txid}/status:
    get:
      operationId: getTransactionStatus
      summary: Get transaction status
      description: Check the confirmation status of a transaction.
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Transaction status object }
  /tx/{txid}/hex:
    get:
      operationId: getTransactionHex
      summary: Get raw transaction (hex)
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Hex-encoded transaction }
  /tx/{txid}/raw:
    get:
      operationId: getTransactionRaw
      summary: Get raw transaction (binary)
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Binary transaction data }
  /tx/{txid}/merkleblock-proof:
    get:
      operationId: getTransactionMerkleblockProof
      summary: Get merkle inclusion proof (bitcoind format)
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Merkle block proof }
  /tx/{txid}/merkle-proof:
    get:
      operationId: getTransactionMerkleProof
      summary: Get merkle inclusion proof (Electrum format)
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Merkle proof }
  /tx/{txid}/outspend/{vout}:
    get:
      operationId: getTransactionOutspend
      summary: Get spending status of an output
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
        - { name: vout, in: path, required: true, schema: { type: integer } }
      responses:
        '200': { description: Outspend object }
  /tx/{txid}/outspends:
    get:
      operationId: getTransactionOutspends
      summary: Get spending status of all outputs
      tags: [Transactions]
      parameters:
        - { name: txid, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of outspend objects }
  /tx:
    post:
      operationId: broadcastTransaction
      summary: Broadcast raw transaction
      description: Broadcast a hex-encoded raw transaction to the network.
      tags: [Transactions]
      requestBody:
        required: true
        content:
          text/plain:
            schema: { type: string, description: Hex-encoded raw transaction }
      responses:
        '200': { description: Returns the txid of the broadcast transaction }
        '400': { description: Invalid or rejected transaction }
  /txs/package:
    post:
      operationId: broadcastTransactionPackage
      summary: Broadcast a package of related transactions
      tags: [Transactions]
      requestBody:
        required: true
        content:
          application/json:
            schema: { type: array, items: { type: string } }
      responses:
        '200': { description: Package broadcast result }
        '400': { description: Invalid or rejected package }
  /address/{address}:
    get:
      operationId: getAddress
      summary: Get address information
      tags: [Addresses]
      parameters:
        - { name: address, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Address object with chain and mempool stats }
  /scripthash/{hash}:
    get:
      operationId: getScripthash
      summary: Get scripthash information
      tags: [Addresses]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Scripthash object with chain and mempool stats }
  /address/{address}/txs:
    get:
      operationId: getAddressTransactions
      summary: Get address transaction history
      tags: [Addresses]
      parameters:
        - { name: address, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of transaction objects }
  /scripthash/{hash}/txs:
    get:
      operationId: getScripthashTransactions
      summary: Get scripthash transaction history
      tags: [Addresses]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of transaction objects }
  /address/{address}/txs/chain/{last_seen_txid}:
    get:
      operationId: getAddressTransactionsChain
      summary: Paginate confirmed address transactions
      description: >-
        Returns confirmed transactions, 25 per page. Provide the last_seen_txid of
        the previous page to fetch the next page (cursor pagination).
      tags: [Addresses]
      parameters:
        - { name: address, in: path, required: true, schema: { type: string } }
        - { name: last_seen_txid, in: path, required: false, schema: { type: string } }
      responses:
        '200': { description: Array of up to 25 confirmed transaction objects }
  /scripthash/{hash}/txs/chain/{last_seen_txid}:
    get:
      operationId: getScripthashTransactionsChain
      summary: Paginate confirmed scripthash transactions
      tags: [Addresses]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
        - { name: last_seen_txid, in: path, required: false, schema: { type: string } }
      responses:
        '200': { description: Array of up to 25 confirmed transaction objects }
  /address/{address}/txs/mempool:
    get:
      operationId: getAddressMempoolTransactions
      summary: Get unconfirmed address transactions
      tags: [Addresses]
      parameters:
        - { name: address, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of unconfirmed transaction objects }
  /scripthash/{hash}/txs/mempool:
    get:
      operationId: getScripthashMempoolTransactions
      summary: Get unconfirmed scripthash transactions
      tags: [Addresses]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of unconfirmed transaction objects }
  /address/{address}/utxo:
    get:
      operationId: getAddressUtxo
      summary: List unspent outputs for an address
      tags: [Addresses]
      parameters:
        - { name: address, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of UTXO objects }
  /scripthash/{hash}/utxo:
    get:
      operationId: getScripthashUtxo
      summary: List unspent outputs for a scripthash
      tags: [Addresses]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of UTXO objects }
  /address-prefix/{prefix}:
    get:
      operationId: searchAddressPrefix
      summary: Search addresses by prefix
      tags: [Addresses]
      parameters:
        - { name: prefix, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of matching addresses }
  /block/{hash}:
    get:
      operationId: getBlock
      summary: Get block information
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Block object }
        '404': { description: Block not found }
  /block/{hash}/header:
    get:
      operationId: getBlockHeader
      summary: Get hex-encoded block header
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Hex-encoded block header }
  /block/{hash}/status:
    get:
      operationId: getBlockStatus
      summary: Get block confirmation status
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Block status object }
  /block/{hash}/txs/{start_index}:
    get:
      operationId: getBlockTransactions
      summary: List transactions in a block
      description: Returns up to 25 transactions starting at start_index.
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
        - { name: start_index, in: path, required: false, schema: { type: integer } }
      responses:
        '200': { description: Array of up to 25 transaction objects }
  /block/{hash}/txids:
    get:
      operationId: getBlockTxids
      summary: Get all transaction IDs in a block
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of txids }
  /block/{hash}/txid/{index}:
    get:
      operationId: getBlockTxidAtIndex
      summary: Get transaction ID at a specific index in a block
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
        - { name: index, in: path, required: true, schema: { type: integer } }
      responses:
        '200': { description: A single txid }
  /block/{hash}/raw:
    get:
      operationId: getBlockRaw
      summary: Get block in raw binary format
      tags: [Blocks]
      parameters:
        - { name: hash, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Binary block data }
  /block-height/{height}:
    get:
      operationId: getBlockHashAtHeight
      summary: Get block hash at a height
      tags: [Blocks]
      parameters:
        - { name: height, in: path, required: true, schema: { type: integer } }
      responses:
        '200': { description: Block hash }
  /blocks/{start_height}:
    get:
      operationId: getBlocks
      summary: Get the 10 newest blocks
      description: Returns the 10 newest blocks, or the 10 blocks preceding start_height.
      tags: [Blocks]
      parameters:
        - { name: start_height, in: path, required: false, schema: { type: integer } }
      responses:
        '200': { description: Array of up to 10 block objects }
  /blocks/tip/height:
    get:
      operationId: getBlocksTipHeight
      summary: Get current chain tip height
      tags: [Blocks]
      responses:
        '200': { description: The tip height as an integer }
  /blocks/tip/hash:
    get:
      operationId: getBlocksTipHash
      summary: Get current chain tip hash
      tags: [Blocks]
      responses:
        '200': { description: The tip block hash }
  /mempool:
    get:
      operationId: getMempool
      summary: Get mempool statistics and fee histogram
      tags: [Mempool]
      responses:
        '200': { description: Mempool statistics object }
  /mempool/txids:
    get:
      operationId: getMempoolTxids
      summary: Get all transaction IDs in the mempool
      tags: [Mempool]
      responses:
        '200': { description: Array of txids }
  /mempool/recent:
    get:
      operationId: getMempoolRecent
      summary: Get the 10 most recent mempool transactions
      tags: [Mempool]
      responses:
        '200': { description: Array of recent mempool transaction summaries }
  /fee-estimates:
    get:
      operationId: getFeeEstimates
      summary: Get estimated fees by confirmation target
      description: >-
        Returns a map of confirmation target (in blocks) to the estimated fee rate
        in sat/vB.
      tags: [Fee Estimates]
      responses:
        '200': { description: Map of confirmation target to fee rate }
  /block-template:
    get:
      operationId: getBlockTemplate
      summary: Retrieve a block template for mining
      tags: [Mining]
      responses:
        '200': { description: Block template object }
  /asset/{asset_id}:
    get:
      operationId: getAsset
      summary: Get asset information (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Asset object }
  /asset/{asset_id}/txs:
    get:
      operationId: getAssetTransactions
      summary: Get transactions for an asset (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of transaction objects }
  /asset/{asset_id}/txs/mempool:
    get:
      operationId: getAssetMempoolTransactions
      summary: Get mempool transactions for an asset (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Array of unconfirmed transaction objects }
  /asset/{asset_id}/txs/chain/{last_seen}:
    get:
      operationId: getAssetTransactionsChain
      summary: Paginate confirmed asset transactions (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
        - { name: last_seen, in: path, required: false, schema: { type: string } }
      responses:
        '200': { description: Array of confirmed transaction objects }
  /asset/{asset_id}/supply:
    get:
      operationId: getAssetSupply
      summary: Get current total asset supply (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: The current asset supply }
  /asset/{asset_id}/supply/decimal:
    get:
      operationId: getAssetSupplyDecimal
      summary: Get asset supply with decimal formatting (Liquid/Elements only)
      tags: [Assets]
      parameters:
        - { name: asset_id, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: The current asset supply, decimal-formatted }
  /assets/registry:
    get:
      operationId: getAssetsRegistry
      summary: Get the list of issued assets (Liquid/Elements only)
      tags: [Assets]
      responses:
        '200': { description: Array of registered assets with filtering and sorting }