API Documentation

120 methods

Root JSON-RPC

Built-in methods available without a module prefix.

get_espo_heightJSON-RPC

Returns the latest Espo indexed height. Use this as the health and freshness check for clients.

Clients commonly call this before pagination or historical reads so they can tell whether the explorer is caught up to the chain tip they expect.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "get_espo_height",
  "params": {}
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000
  }
}
get_method_line_chartJSON-RPC

Samples a numeric value from another RPC method across indexed heights and returns chart-ready points.

The chart method calls another numeric RPC repeatedly over a height range, so choose a narrow interval when you need quick responses.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "get_method_line_chart",
  "params": {
    "body": {
      "alkane": "2:0"
    },
    "key": "count",
    "method": "essentials.get_holders_count",
    "range_interval": 25,
    "range_max": 946000,
    "range_min": 945900
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "key": "count",
    "method": "essentials.get_holders_count",
    "points": [
      {
        "height": 945900,
        "value": 6409
      },
      {
        "height": 945925,
        "value": 6407
      }
    ],
    "range_interval": 25,
    "range_max": 946000,
    "range_min": 945900
  }
}

Essentials JSON-RPC

Core Alkane, address, outpoint, trace, holder, and mempool reads.

essentials.get_mempool_tracesJSON-RPC

Returns paged Alkane traces currently observed in the mempool, optionally filtered by address.

Use this for unconfirmed Alkane activity previews; results can disappear or change when transactions are replaced, evicted, or mined.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_mempool_traces",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "has_more": false,
    "items": [
      {
        "fee": 1540,
        "traces": [
          {
            "events": [
              {
                "data": {
                  "context": {
                    "myself": {
                      "block": "0x2",
                      "tx": "0x0"
                    }
                  }
                },
                "event": "invoke"
              }
            ],
            "outpoint": "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90:0"
          }
        ],
        "txid": "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90",
        "vsize": 154
      }
    ],
    "limit": 10,
    "ok": true,
    "page": 1,
    "total": 1
  }
}
essentials.get_mempool_memory_statsJSON-RPC

Returns in-memory mempool service counters when the mempool service is active.

This is an operational endpoint intended for monitoring and debugging a running Espo node rather than user-facing portfolio state.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_mempool_memory_stats",
  "params": {}
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "stats": {
      "projected_blocks": 8,
      "txs": 1200
    }
  }
}
essentials.get_keysJSON-RPC

Reads contract storage keys for an Alkane. Provide explicit keys or page through the key directory.

Storage keys are low-level contract state. Values may be binary, encoded integers, or UTF-8 text depending on the contract convention.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_keys",
  "params": {
    "alkane": "2:0",
    "keys": [
      "name"
    ],
    "try_decode_utf8": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "items": {
      "name": {
        "key_hex": "0x6e616d65",
        "key_str": "name",
        "value_hex": "0x",
        "value_str": null
      }
    },
    "ok": true,
    "total": 1
  }
}
essentials.get_all_alkanesJSON-RPC

Lists Alkane creation records with basic metadata.

These list and search methods are designed for discovery screens. They return indexed metadata, not live contract execution results.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_all_alkanes",
  "params": {
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "alkane": "2:77579",
        "holder_count": 1,
        "name": "Beep Boop Orbited #1376"
      }
    ],
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 77735
  }
}
essentials.get_alkane_infoJSON-RPC

Returns the creation metadata, names, icon, and indexed details for one Alkane.

Use this when you already know the Alkane id and need the explorer's normalized metadata, display fields, and indexed creation context.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_info",
  "params": {
    "alkane": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "creation_height": 880000,
    "holder_count": 6409,
    "name": "DIESEL",
    "ok": true,
    "symbol": "diesel"
  }
}
essentials.get_block_summaryJSON-RPC

Returns the indexed Alkane summary for a block height.

区块 summaries are aggregated during indexing and are useful for block pages, progress checks, and quickly finding Alkane-heavy blocks.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_block_summary",
  "params": {
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "interaction_count": 60,
    "ok": true,
    "pool": {
      "name": "AntPool",
      "slug": "antpool"
    },
    "trace_count": 38,
    "tx_count": 2864
  }
}
essentials.get_holdersJSON-RPC

Returns holders and balances for an Alkane.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_holders",
  "params": {
    "alkane": "2:0",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "items": [
      {
        "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
        "amount": "30950001348973"
      }
    ],
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 6409
  }
}
essentials.get_transfer_volumeJSON-RPC

Ranks addresses by cumulative transfer volume for an Alkane.

These ranking endpoints are useful for leaderboards and analytics, but they should not be treated as spendable balance calculations.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_transfer_volume",
  "params": {
    "alkane": "2:0",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "items": [
      {
        "address": "bc1qnlaz6rt6734pfd23ehx68nyczs5pfjdp6ct0aa",
        "amount": "3864636702544018"
      }
    ],
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 23936
  }
}
essentials.get_total_receivedJSON-RPC

Ranks addresses by total received amount for an Alkane.

These ranking endpoints are useful for leaderboards and analytics, but they should not be treated as spendable balance calculations.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_total_received",
  "params": {
    "alkane": "2:0",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "items": [
      {
        "address": "bc1qnlaz6rt6734pfd23ehx68nyczs5pfjdp6ct0aa",
        "amount": "3863765984261495"
      }
    ],
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 23936
  }
}
essentials.get_circulating_supplyJSON-RPC

Returns the circulating supply for an Alkane at latest or at a requested height.

Supply is reported as the raw indexed token amount. Apply token decimals or display scaling in the client when presenting it to users.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_circulating_supply",
  "params": {
    "alkane": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "height": "latest",
    "ok": true,
    "supply": "62907254954708"
  }
}
essentials.get_address_activityJSON-RPC

Returns Alkane activity detected for a 比特币 address.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_address_activity",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "ok": true,
    "total_received": {
      "2:0": "357260014838703"
    },
    "transfer_volume": {
      "2:0": "357810014838703"
    }
  }
}
essentials.get_address_balancesJSON-RPC

Returns all Alkane balances held by an address. Set include_outpoints to include UTXO-level entries.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
  • Including outpoints returns larger payloads and is intended for wallet or account-detail views.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_address_balances",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "include_outpoints": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "balances": {
      "2:0": "30950001348973",
      "2:68441": "31612184088"
    },
    "ok": true,
    "outpoints": [
      {
        "outpoint": "ee46dd269ba0f826b0dc9f78de1875fab3ab80983e51e741ffdfa6f3b7d4aef7:0"
      }
    ]
  }
}
essentials.get_alkane_balancesJSON-RPC

Returns holders and balances for a specific Alkane, optionally at a historical height.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_balances",
  "params": {
    "alkane": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "balances": {},
    "ok": true
  }
}
essentials.get_alkane_balance_metashrewJSON-RPC

Reads a single owner/token balance using the metashrew-compatible balance path.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_balance_metashrew",
  "params": {
    "alkane": "2:0",
    "owner": "2:53014"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "balance": "37604481010",
    "ok": true,
    "owner": "2:53014"
  }
}
essentials.get_alkane_balance_txsJSON-RPC

Lists balance-changing transactions for an Alkane with cursor pagination.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_balance_txs",
  "params": {
    "alkane": "2:0",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane": "2:0",
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 61235,
    "txids": [
      {
        "height": 946000,
        "outflow": {
          "2:0": "-8128760"
        },
        "txid": "d39685c77b1af6b1734c07990f116cc71f301c33a7f8448c5db90720765d8902"
      }
    ]
  }
}
essentials.get_alkane_balance_txs_by_tokenJSON-RPC

Lists balance-changing transactions for one owner and token.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_balance_txs_by_token",
  "params": {
    "limit": 1,
    "owner": "2:53014",
    "page": 1,
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "limit": 1,
    "ok": true,
    "owner": "2:53014",
    "page": 1,
    "token": "2:0",
    "total": 2918,
    "txids": [
      {
        "height": 945956,
        "outflow": {
          "2:0": "1000000",
          "2:16": "-14061191674"
        },
        "txid": "9f825c8e8b83828b499d4754d5ad5cdfe9d6086fa67c1bb1489b56d354241e15"
      }
    ]
  }
}
essentials.get_outpoint_balancesJSON-RPC

Returns Alkane balances assigned to a specific outpoint.

Outpoint-level responses are the most precise way to understand which UTXOs carry token state before constructing a transaction.

What to know
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_outpoint_balances",
  "params": {
    "outpoint": "ee46dd269ba0f826b0dc9f78de1875fab3ab80983e51e741ffdfa6f3b7d4aef7:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "alkane": "2:0",
        "amount": "30950001348973"
      }
    ],
    "ok": true,
    "outpoint": "ee46dd269ba0f826b0dc9f78de1875fab3ab80983e51e741ffdfa6f3b7d4aef7:0"
  }
}
essentials.get_block_tracesJSON-RPC

Returns Alkane traces indexed for a block height.

Trace data explains contract execution, emitted events, and state changes. It is heavier than summary data and should be paged or scoped where possible.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_block_traces",
  "params": {
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "traces": [
      {
        "events": [
          {
            "data": {
              "context": {
                "caller": {
                  "block": "0x0",
                  "tx": "0x0"
                },
                "inputs": [
                  "0x4d",
                  "0x0"
                ],
                "myself": {
                  "block": "0x2",
                  "tx": "0x0"
                },
                "vout": 3
              },
              "fuel": 25382538,
              "type": "call"
            },
            "event": "invoke"
          },
          {
            "data": {
              "response": {
                "alkanes": [
                  {
                    "id": {
                      "block": "0x2",
                      "tx": "0x0"
                    },
                    "value": "0x2330ba25"
                  }
                ],
                "data": "0x",
                "storage": [
                  {
                    "key": "/fees",
                    "value": "0x9f478513110000000000000000000000"
                  }
                ]
              },
              "status": "success"
            },
            "event": "return"
          }
        ],
        "outpoint": "a44d1f42e1eb15b779f75089cd496f61b73ef68d411d09701ebd9ea51ade7cf8:3"
      }
    ]
  }
}
essentials.get_holders_countJSON-RPC

Returns the holder count for one Alkane.

This returns the aggregate count only; use the holder list endpoints when you need balances, address rows, or pagination.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_holders_count",
  "params": {
    "alkane": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "count": 6409,
    "ok": true
  }
}
essentials.get_address_outpointsJSON-RPC

Lists Alkane-bearing outpoints for an address.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_address_outpoints",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "ok": true,
    "outpoints": [
      {
        "entries": [
          {
            "alkane": "2:0",
            "amount": "30950001348973"
          }
        ],
        "outpoint": "ee46dd269ba0f826b0dc9f78de1875fab3ab80983e51e741ffdfa6f3b7d4aef7:0"
      }
    ]
  }
}
essentials.get_address_spendable_outpointsJSON-RPC

Returns address UTXOs that are spendable for Alkane-aware wallet flows.

These endpoints are for wallet construction flows and may include enough transaction context to build or simulate spends.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_address_spendable_outpoints",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "omit_raw_tx": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "height": 951279,
    "length": 9,
    "ok": true,
    "outpoints": [
      {
        "alkanes": {
          "2:77183": "1"
        },
        "confirmations": 11735,
        "outpoint": "b8cb5e85a7d024fb26c85e29678a377e257dd04c0a19905de6b1d7e3cd772c14:0",
        "runes": {},
        "script_pubkey_hex": "5120b819f74e24970413521ae6dcf8ec58ed4b65db6c36cbed4c8c7d95e56d4cfd4f",
        "value": 546
      }
    ]
  }
}
essentials.get_alkane_tx_summaryJSON-RPC

Returns the indexed Alkane summary for a transaction.

Trace data explains contract execution, emitted events, and state changes. It is heavier than summary data and should be paged or scoped where possible.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_tx_summary",
  "params": {
    "txid": "a44d1f42e1eb15b779f75089cd496f61b73ef68d411d09701ebd9ea51ade7cf8"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "traces": [
      {
        "outpoint": "a44d1f42e1eb15b779f75089cd496f61b73ef68d411d09701ebd9ea51ade7cf8:3"
      }
    ],
    "txid": "a44d1f42e1eb15b779f75089cd496f61b73ef68d411d09701ebd9ea51ade7cf8"
  }
}
essentials.get_alkane_block_txsJSON-RPC

Returns Alkane transactions for a block height with paging.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_block_txs",
  "params": {
    "height": 946000,
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 39,
    "txids": [
      "5f989ae22dc2d2d178a16d88dcca3e7b92ecea6231a13b56e93b82fe3df56e4d"
    ]
  }
}
essentials.get_alkane_address_txsJSON-RPC

Returns Alkane transactions involving an address.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_address_txs",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 19,
    "txids": [
      "e212e704173d61d19a280de3af2f6a5166ecf95e9a2a98f74ceeeb3de323ea1c"
    ]
  }
}
essentials.get_address_transactionsJSON-RPC

Returns 比特币 transactions for an address and can be narrowed to Alkane transactions.

This RPC reads Espo's indexed state and returns a normalized JSON shape intended for explorers, wallets, analytics jobs, or integration tests.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_address_transactions",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "limit": 1,
    "only_alkane_txs": true,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "limit": 1,
    "ok": true,
    "page": 1,
    "total": 19,
    "transactions": [
      {
        "blockHeight": 939827,
        "confirmed": true,
        "txid": "e212e704173d61d19a280de3af2f6a5166ecf95e9a2a98f74ceeeb3de323ea1c"
      }
    ]
  }
}
essentials.get_alkane_latest_tracesJSON-RPC

Returns the recent Alkane trace feed used by the explorer.

Trace data explains contract execution, emitted events, and state changes. It is heavier than summary data and should be paged or scoped where possible.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_alkane_latest_traces",
  "params": {}
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "txids": [
      "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90",
      "4778e266cd2db0be03ebe96bb2713a2fe27d1587e4f10085f64b542f2bfd3617"
    ]
  }
}
essentials.get_debug_timer_totalsJSON-RPC

Returns optional debug timer totals and can reset them when reset is true.

This is an operational endpoint intended for monitoring and debugging a running Espo node rather than user-facing portfolio state.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.get_debug_timer_totals",
  "params": {
    "limit": 20,
    "reset": false
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "reset": false,
    "reset_deleted": null,
    "returned": 1,
    "timers": [
      {
        "avg_ms": 2012.19,
        "count": 42,
        "kind": "section",
        "label": "update_balances",
        "last_ms": 1915,
        "max_ms": 4110,
        "min_ms": 881,
        "module": "essentials",
        "title": "module=essentials section=update_balances",
        "total_ms": 84512
      }
    ],
    "total_calls": 42,
    "total_entries": 1,
    "total_ms": 84512
  }
}
essentials.pingJSON-RPC

Checks that the essentials module can answer RPC calls.

A successful response only proves the module handler is reachable; it does not guarantee every optional backing service is enabled.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "essentials.ping",
  "params": {}
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "pong": true
  }
}

AMM Data JSON-RPC

Pool, candle, activity, price, swap routing, and AMM analytics methods.

ammdata.get_candlesJSON-RPC

Returns OHLCV candles for a pool or token pair over a supported timeframe.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_candles",
  "params": {
    "limit": 10,
    "page": 1,
    "pool": "2:53014",
    "side": "base",
    "timeframe": "1h"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "candles": [
      {
        "close": "2",
        "high": "2",
        "low": "1",
        "open": "1",
        "ts": 1710000000,
        "volume": "100"
      }
    ],
    "ok": true
  }
}
ammdata.get_token_volumeJSON-RPC

Returns raw token-side AMM volume buckets for a token. A swap contributes the amount of that token traded whether the token is the pool base asset or the quote asset.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_token_volume",
  "params": {
    "limit": 10,
    "page": 1,
    "timeframe": "1h",
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "has_more": true,
    "limit": 10,
    "newest_ts": 1779886800,
    "ok": true,
    "page": 1,
    "points": [
      {
        "ts": 1779886800,
        "volume": "11486258"
      },
      {
        "ts": 1779883200,
        "volume": "875000000"
      }
    ],
    "timeframe": "1h",
    "token": "2:0",
    "total": 128
  }
}
ammdata.get_chart_change_blockJSON-RPC

Returns one chart change point for a named chart at a height.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_chart_change_block",
  "params": {
    "chart": "btc_usd",
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "value": "65000"
  }
}
ammdata.get_chart_changes_blockJSON-RPC

Returns all chart change points available at a height.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_chart_changes_block",
  "params": {
    "height": 951270
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "available": true,
    "charts": {
      "2:0-usd": {
        "10m": {
          "close": "760876.3864547",
          "high": "760876.3864547",
          "low": "760876.3864547",
          "open": "760876.3864547",
          "volume": "1287761936316"
        },
        "1h": {
          "close": "760876.3864547",
          "high": "760876.3864547",
          "low": "760876.3864547",
          "open": "760876.3864547",
          "volume": "1287761936316"
        }
      }
    },
    "height": 951270,
    "ok": true
  }
}
ammdata.get_activityJSON-RPC

Returns AMM activity for a pool with side, type, sort, and paging filters.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Sort fields are route-specific. Unsupported values fall back to the handler default or return a validation error, depending on the route.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_activity",
  "params": {
    "dir": "desc",
    "limit": 10,
    "page": 1,
    "pool": "2:53014",
    "sort": "timestamp",
    "type": "trade"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "activity": [
      {
        "amount": "11486258",
        "base_delta": "-11486258",
        "direction": "sell",
        "kind": "swap",
        "quote_delta": "1061552883247",
        "side": "base",
        "timestamp": 1779888869,
        "txid": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
      }
    ],
    "activity_type": "trades",
    "dir": "desc",
    "filter_side": "all",
    "has_more": true,
    "limit": 10,
    "ok": true,
    "page": 1
  }
}
ammdata.get_token_activityJSON-RPC

Returns AMM and token-market activity for a token.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • Sort fields are route-specific. Unsupported values fall back to the handler default or return a validation error, depending on the route.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_token_activity",
  "params": {
    "kind": "trade",
    "limit": 10,
    "page": 1,
    "sort_by": "timestamp",
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "activity": [
      {
        "amount": "11486258",
        "base": "2:0",
        "base_delta": "-11486258",
        "direction": "sell",
        "index_kind": "swap",
        "kind": "swap",
        "pool": "DIESEL / CH4",
        "pool_id": "2:53014",
        "quote": "2:16",
        "quote_delta": "1061552883247",
        "timestamp": 1779888869,
        "txid": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
      }
    ],
    "activity_type": "all",
    "has_more": true,
    "kind": null,
    "limit": 10,
    "ok": true,
    "page": 1
  }
}
ammdata.get_poolsJSON-RPC

Lists indexed AMM pools.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_pools",
  "params": {
    "limit": 20,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "has_more": true,
    "limit": 20,
    "ok": true,
    "page": 1,
    "pools": {
      "2:53014": {
        "base": "2:0",
        "base_reserve": "21486066722",
        "quote": "2:16",
        "quote_reserve": "1624687948631013",
        "source": "live"
      }
    },
    "total": 149
  }
}
ammdata.get_amm_factoriesJSON-RPC

Lists AMM factory contracts known to the indexer.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_amm_factories",
  "params": {
    "limit": 20,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "factories": [
      "2:50187",
      "2:50193"
    ],
    "has_more": true,
    "limit": 20,
    "ok": true,
    "page": 1,
    "total": 172
  }
}
ammdata.find_best_swap_pathJSON-RPC

Computes the best known swap route between two Alkanes for exact-in or exact-out flows.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.find_best_swap_path",
  "params": {
    "amount_in": "100000000",
    "fee_bps": 30,
    "max_hops": 3,
    "mode": "exact_in",
    "token_in": "2:0",
    "token_out": "2:16"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "amount_in": "1000000",
    "amount_out": "89019369508",
    "fee_bps": 30,
    "hops": [
      {
        "amount_in": "1000000",
        "amount_out": "75445130234",
        "pool": "2:53014",
        "token_in": "2:0",
        "token_out": "2:16"
      }
    ],
    "max_hops": 3,
    "mode": "exact_in",
    "ok": true,
    "token_in": "2:0",
    "token_out": "2:16"
  }
}
ammdata.get_best_mev_swapJSON-RPC

Returns the best detected MEV-style swap opportunity for a token under the routing constraints.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_best_mev_swap",
  "params": {
    "fee_bps": 30,
    "max_hops": 3,
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "swap": null
  }
}
ammdata.get_btc_usd_priceJSON-RPC

Returns the BTC/USD price at latest or at a requested height.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_btc_usd_price",
  "params": {
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "price_usd": "65000"
  }
}
ammdata.get_total_volume_ammJSON-RPC

Returns total AMM volume over a height range or preset range.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_total_volume_amm",
  "params": {
    "from_height": 945900,
    "limit": 10,
    "page": 1,
    "to_height": 946000,
    "unit": "usd"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "latest": {
      "height": 951279,
      "value": "64040138676553303341511"
    },
    "limit": 10,
    "ok": true,
    "page": 1,
    "points": [
      {
        "height": 951000,
        "value": "64024572352483080490211"
      }
    ],
    "range_max": 951279,
    "range_min": 951000,
    "scale": "10000000000000000"
  }
}
ammdata.get_token_total_volumeJSON-RPC

Returns the cumulative raw AMM amount traded for one token, keyed by block height. The latest value is the all-time token-side AMM volume recorded by the index.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.get_token_total_volume",
  "params": {
    "from_height": 951000,
    "limit": 10,
    "page": 1,
    "to_height": 951279,
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "latest": {
      "height": 951279,
      "value": "2381492765411"
    },
    "limit": 10,
    "ok": true,
    "page": 1,
    "points": [
      {
        "height": 951000,
        "value": "2367000000000"
      },
      {
        "height": 951001,
        "value": "2368123456789"
      }
    ],
    "range_max": 951279,
    "range_min": 951000,
    "token": "2:0"
  }
}
ammdata.pingJSON-RPC

Checks that the AMM data module can answer RPC calls.

A successful response only proves the module handler is reachable; it does not guarantee every optional backing service is enabled.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "ammdata.ping",
  "params": {}
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ok": true,
    "pong": true
  }
}

Runes JSON-RPC

Runes metadata, balances, outpoints, transaction IO, activity, and transaction index methods. These are available when the runes module is enabled.

runes.get_runeJSON-RPC

Looks up a Rune by id, spaced name, or accepted query alias.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_rune",
  "params": {
    "rune": "1:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "rune": {
      "id": "1:0",
      "spaced_name": "UNCOMMON GOODS"
    }
  }
}
runes.get_top_runesJSON-RPC

Lists top Runes by holder count.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_top_runes",
  "params": {
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "runes": [
      {
        "divisibility": 0,
        "holders": 249173,
        "id": "1:0",
        "mints": "105594793",
        "number": 0,
        "rune": "UNCOMMONGOODS",
        "spaced_rune": "UNCOMMON GOODS",
        "supply": "105594793",
        "symbol": "G",
        "turbo": true
      }
    ]
  }
}
runes.get_holdersJSON-RPC

Returns holders for one Rune.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_holders",
  "params": {
    "id": "1:0",
    "limit": 1,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "holders": [
      {
        "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "amount": "2079397"
      }
    ]
  }
}
runes.get_address_balancesJSON-RPC

Returns Rune balances held by an address, optionally including outpoint rows.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
  • Including outpoints returns larger payloads and is intended for wallet or account-detail views.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_address_balances",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "include_outpoints": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "balances": {
      "1:0": "2079397",
      "840000:2": "91000000"
    },
    "items": [
      {
        "amount": "2079397",
        "id": "1:0",
        "rune": "UNCOMMON GOODS"
      }
    ],
    "ok": true,
    "outpoints": [
      {
        "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "entries": [
          {
            "amount": "2079397",
            "id": "1:0",
            "rune": "UNCOMMON GOODS"
          }
        ],
        "outpoint": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2:1"
      }
    ]
  }
}
runes.get_address_outpointsJSON-RPC

Lists Rune-bearing outpoints for an address.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_address_outpoints",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "ok": true,
    "outpoints": [
      {
        "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "entries": [
          {
            "amount": "2079397",
            "id": "1:0",
            "rune": "UNCOMMON GOODS"
          }
        ],
        "outpoint": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2:1"
      }
    ]
  }
}
runes.get_outpoint_balancesJSON-RPC

Returns Rune balances assigned to a specific outpoint.

Outpoint-level responses are the most precise way to understand which UTXOs carry token state before constructing a transaction.

What to know
  • Outpoints use `<txid>:<vout>`, where `vout` is the zero-based output index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_outpoint_balances",
  "params": {
    "outpoint": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2:1"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "entries": [
          {
            "amount": "2079397",
            "id": "1:0",
            "rune": "UNCOMMON GOODS"
          }
        ],
        "outpoint": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2:1"
      }
    ],
    "ok": true,
    "outpoint": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2:1"
  }
}
runes.get_tx_ioJSON-RPC

Returns Rune inputs, outputs, burns, mints, and etched Rune data for a transaction.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_tx_io",
  "params": {
    "txid": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "io": {
      "etched": null,
      "inputs": {},
      "minted": [
        {
          "amount": "1",
          "id": "1:0"
        }
      ],
      "outputs": {
        "1": {
          "1:0": "1"
        }
      }
    },
    "ok": true,
    "txid": "d11e7d18e03850c08bebaf0a9926288a4963d91b6ebcc40f8615a16ed81d40c2"
  }
}
runes.get_mint_activityJSON-RPC

Returns mint activity for one Rune.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_mint_activity",
  "params": {
    "id": "1:0",
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "activity": [
      {
        "amount": "1",
        "destination": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "fee_paid_sats": 192,
        "height": 840113,
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ]
  }
}
runes.get_activityJSON-RPC

Returns paged Rune activity with kind, scope, sort, address, and time filters.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_activity",
  "params": {
    "id": "1:0",
    "kind": "mint",
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "entries": [
      {
        "amount": "1",
        "destination": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
        "height": 840113,
        "id": "1:0",
        "kind": "mint",
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ],
    "ok": true,
    "total": 105594794
  }
}
runes.get_rune_activityJSON-RPC

Alias-style Rune activity endpoint with the same filters as runes.get_activity.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_rune_activity",
  "params": {
    "limit": 10,
    "page": 1,
    "rune": "1:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "activity": [
      {
        "amount": "1",
        "height": 840113,
        "kind": "mint",
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ],
    "entries": [
      {
        "amount": "1",
        "height": 840113,
        "kind": "mint",
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ],
    "ok": true,
    "total": 105594794
  }
}
runes.get_address_activityJSON-RPC

Returns Rune activity for an address and optionally for a single Rune.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_address_activity",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "id": "all",
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "activity": [
      {
        "amount": "1",
        "height": 840113,
        "id": "1:0",
        "kind": "mint",
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ],
    "entries": [
      {
        "amount": "1",
        "height": 840113,
        "id": "1:0",
        "kind": "mint",
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ],
    "ok": true,
    "total": 1
  }
}
runes.get_block_tx_countJSON-RPC

Returns the number of Rune transactions indexed for a block.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_block_tx_count",
  "params": {
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "count": 12,
    "height": 946000,
    "ok": true
  }
}
runes.get_block_txsJSON-RPC

Returns a range of Rune transaction pointers for a block.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_block_txs",
  "params": {
    "height": 946000,
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "txs": [
      {
        "height": 946000,
        "io": {
          "outputs": {
            "1": {
              "1:0": "1"
            }
          }
        },
        "tx_index": 235,
        "txid": "2d70c5d4d4d7a77551cbbd3225542ea167984a28e7bb13bc143546705ac76da6"
      }
    ]
  }
}
runes.get_address_tx_countJSON-RPC

Returns the number of Rune transactions indexed for an address.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_address_tx_count",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "count": 48,
    "ok": true
  }
}
runes.get_address_txsJSON-RPC

Returns a range of Rune transaction pointers for an address.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_address_txs",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "limit": 10,
    "page": 1
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "ok": true,
    "txs": [
      {
        "height": 840113,
        "tx_index": 465,
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ]
  }
}
runes.get_action_block_tx_countJSON-RPC

Returns the number of Rune action transactions indexed for a block.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_action_block_tx_count",
  "params": {
    "height": 946000
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "count": 3,
    "height": 946000,
    "ok": true
  }
}
runes.get_action_block_txsJSON-RPC

Returns Rune action transaction pointers for a block.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_action_block_txs",
  "params": {
    "end": 10,
    "height": 946000,
    "start": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "height": 946000,
    "ok": true,
    "txs": [
      {
        "has_alkane": false,
        "has_rune": true,
        "height": 946000,
        "tx_index": 235,
        "txid": "2d70c5d4d4d7a77551cbbd3225542ea167984a28e7bb13bc143546705ac76da6"
      }
    ]
  }
}
runes.get_action_address_tx_countJSON-RPC

Returns the number of Rune action transactions indexed for an address.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_action_address_tx_count",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "count": 65,
    "ok": true
  }
}
runes.get_action_address_txsJSON-RPC

Returns Rune action transaction pointers for an address.

Rune endpoints are available only when the runes module is enabled and follow the Rune id and spaced-name conventions used by the indexer.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "runes.get_action_address_txs",
  "params": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "end": 10,
    "start": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "address": "bc1pc8sn4zzfessnglpvy8mj27z0jkgp3j6ra2l7w3rpjcatf84mhdeqtlveta",
    "ok": true,
    "txs": [
      {
        "has_rune": true,
        "height": 840113,
        "tx_index": 465,
        "txid": "c0ace2bc013a2ea764143aabd41333590cb2ce3db8885c6467e50868143c5cc2"
      }
    ]
  }
}

Token Data JSON-RPC

Token activity views combining mint and AMM sources with time and sort filters.

tokendata.get_token_activityJSON-RPC

Returns token activity for one Alkane across market and mint sources.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • Time filters are Unix timestamps in seconds.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tokendata.get_token_activity",
  "params": {
    "from": 1700000000,
    "limit": 10,
    "page": 1,
    "scope": "all",
    "to": 1800000000,
    "token": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "entries": [
      {
        "amount": "1000000",
        "chain_txids": [
          "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90"
        ],
        "height": 951279,
        "kind": "mint",
        "mint_price_paid_sats": 1540,
        "token": "2:0",
        "txid": "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90"
      }
    ],
    "ok": true,
    "total": 3824968
  }
}
tokendata.get_address_activityJSON-RPC

Returns token activity for one address, optionally filtered to a token.

Activity rows are normalized event views intended for timelines. For exact wallet spendability, combine them with balance or outpoint endpoints.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • Time filters are Unix timestamps in seconds.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tokendata.get_address_activity",
  "params": {
    "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
    "from": 1700000000,
    "limit": 10,
    "page": 1,
    "to": 1800000000,
    "token": "all"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "entries": [
      {
        "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
        "amount": "1000000",
        "height": 951279,
        "kind": "mint",
        "token": "2:0",
        "txid": "f390179d0a4586016c834a972abde346f1f0f095e3876513a5c96b8a93194f90"
      }
    ],
    "ok": true,
    "total": 1
  }
}

Pizza.fun JSON-RPC

Pizza.fun series id to Alkane id lookup methods.

pizzafun.get_series_id_from_alkane_idJSON-RPC

Resolves a Pizza.fun series id from a single Alkane id.

Pizza.fun mapping methods bridge off-explorer series identifiers with Alkane ids; null batch entries mean no confirmed mapping was found.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "pizzafun.get_series_id_from_alkane_id",
  "params": {
    "alkane_id": "2:0"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane_id": "2:0",
    "confirmations": 100,
    "ok": true,
    "series_id": "diesel"
  }
}
pizzafun.get_series_ids_from_alkane_idsJSON-RPC

Batch resolves Pizza.fun series ids from Alkane ids.

Pizza.fun mapping methods bridge off-explorer series identifiers with Alkane ids; null batch entries mean no confirmed mapping was found.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "pizzafun.get_series_ids_from_alkane_ids",
  "params": {
    "alkane_ids": [
      "2:0",
      "2:77578"
    ]
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "alkane_id": "2:0",
        "series_id": "diesel"
      },
      {
        "alkane_id": "2:77578",
        "series_id": "wai"
      }
    ],
    "ok": true
  }
}
pizzafun.get_alkane_id_from_series_idJSON-RPC

Resolves an Alkane id from a single Pizza.fun series id.

Pizza.fun mapping methods bridge off-explorer series identifiers with Alkane ids; null batch entries mean no confirmed mapping was found.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "pizzafun.get_alkane_id_from_series_id",
  "params": {
    "series_id": "diesel"
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "alkane_id": "2:0",
    "confirmations": 100,
    "ok": true,
    "series_id": "diesel"
  }
}
pizzafun.get_alkane_ids_from_series_idsJSON-RPC

Batch resolves Alkane ids from Pizza.fun series ids.

Pizza.fun mapping methods bridge off-explorer series identifiers with Alkane ids; null batch entries mean no confirmed mapping was found.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "pizzafun.get_alkane_ids_from_series_ids",
  "params": {
    "series_ids": [
      "diesel",
      "wai"
    ]
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "alkane_id": "2:0",
        "series_id": "diesel"
      },
      {
        "alkane_id": "2:77578",
        "series_id": "wai"
      }
    ],
    "ok": true
  }
}

Subfrost JSON-RPC

frBTC wrap and unwrap event and request history methods.

subfrost.get_wrap_events_by_addressJSON-RPC

Returns frBTC wrap events for an address.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_wrap_events_by_address",
  "params": {
    "address": "bc1p9qftzwgufdv5h7zk674jvppfjfa9eys56zzflfvvrg4cekpwfy9s3yerpx",
    "count": 10,
    "offset": 0,
    "successful": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "51202aabf8f66f109d8a79e0c922d769bb5b31a85ecaf35920aa8b3d16c1f032c155",
        "amount": "100000",
        "success": true,
        "timestamp": 1779308930,
        "txid": "7edddf6ee5f6e39e503a8c9c7f80ff27285e2da37b61d6728b40f5903f316f36"
      }
    ],
    "total": 3565
  }
}
subfrost.get_unwrap_events_by_addressJSON-RPC

Returns frBTC unwrap events for an address.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_unwrap_events_by_address",
  "params": {
    "address": "bc1q2l9yryzdq82pteuhrjt93cuvgazr5ph8z5zgqw",
    "count": 10,
    "offset": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "001457ca41904d01d415e7971c9658e38c47443a06e7",
        "amount": "100000",
        "success": true,
        "timestamp": 1779285102,
        "txid": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155"
      }
    ],
    "total": 2339
  }
}
subfrost.get_wrap_events_allJSON-RPC

Returns global frBTC wrap events.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_wrap_events_all",
  "params": {
    "count": 10,
    "offset": 0,
    "successful": true
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "51202aabf8f66f109d8a79e0c922d769bb5b31a85ecaf35920aa8b3d16c1f032c155",
        "amount": "100000",
        "success": true,
        "timestamp": 1779308930,
        "txid": "7edddf6ee5f6e39e503a8c9c7f80ff27285e2da37b61d6728b40f5903f316f36"
      }
    ],
    "total": 3565
  }
}
subfrost.get_unwrap_events_allJSON-RPC

Returns global frBTC unwrap events.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_unwrap_events_all",
  "params": {
    "count": 10,
    "offset": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "001457ca41904d01d415e7971c9658e38c47443a06e7",
        "amount": "100000",
        "success": true,
        "timestamp": 1779285102,
        "txid": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155"
      }
    ],
    "total": 2339
  }
}
subfrost.get_unwrap_requests_by_addressJSON-RPC

Returns unwrap requests for an address, optionally filtered by fulfillment state.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `fulfilled` separates requested unwraps from requests that have completed their fulfillment flow.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_unwrap_requests_by_address",
  "params": {
    "address": "bc1q2l9yryzdq82pteuhrjt93cuvgazr5ph8z5zgqw",
    "count": 10,
    "fulfilled": false,
    "offset": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "001457ca41904d01d415e7971c9658e38c47443a06e7",
        "amount": "100000",
        "fulfilled": false,
        "request_txid": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155",
        "timestamp": 1779285102
      }
    ],
    "total": 1
  }
}
subfrost.get_unwrap_requests_allJSON-RPC

Returns global unwrap requests, optionally filtered by fulfillment state.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • `fulfilled` separates requested unwraps from requests that have completed their fulfillment flow.
Example query
POST https://api.alkanode.com/rpc
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "subfrost.get_unwrap_requests_all",
  "params": {
    "count": 10,
    "fulfilled": false,
    "offset": 0
  }
}
Example response
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "items": [
      {
        "address_spk": "001457ca41904d01d415e7971c9658e38c47443a06e7",
        "amount": "100000",
        "fulfilled": false,
        "request_txid": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155",
        "timestamp": 1779285102
      }
    ],
    "total": 1
  }
}

Oyl-Compatible HTTP API

POST endpoints served by the oylapi module for wallet and AMM clients.

/get-alkanes-by-addressPOST

Returns Alkane balances and metadata for a 比特币 address.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-alkanes-by-address
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8"
}
Example response
{
  "data": [
    {
      "alkaneId": {
        "block": "2",
        "tx": "0"
      },
      "balance": "26064398814169",
      "floorPrice": 82.07730465298008,
      "name": "DIESEL",
      "priceInSatoshi": "10927011166337",
      "symbol": "DIESEL"
    }
  ],
  "statusCode": 200
}
/get-bitcoin-pricePOST

Returns the cached BTC/USD price used by Oyl-compatible responses.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

Example query
POST https://api.alkanode.com/get-bitcoin-price
{}
Example response
{
  "price": "65000"
}
/get-alkanes-utxoPOST

Returns Alkane UTXOs for an address.

Outpoint-level responses are the most precise way to understand which UTXOs carry token state before constructing a transaction.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-alkanes-utxo
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8"
}
Example response
{
  "data": [
    {
      "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
      "alkanes": {
        "2:77183": "1"
      },
      "confirmations": 11735,
      "indexed": true,
      "outputIndex": 0,
      "runes": {},
      "satoshis": 546,
      "txId": "b8cb5e85a7d024fb26c85e29678a377e257dd04c0a19905de6b1d7e3cd772c14"
    }
  ],
  "statusCode": 200
}
/get-address-utxosPOST

Returns portfolio UTXOs for an address with optional spend strategy filtering.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `spendStrategy` is passed through to wallet-style UTXO selection. Use `null` or omit it for the route default.
Example query
POST https://api.alkanode.com/get-address-utxos
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
  "spendStrategy": null
}
Example response
{
  "data": {
    "alkaneUtxos": [
      {
        "alkanes": {
          "2:77183": "1"
        },
        "outputIndex": 0,
        "satoshis": 546,
        "txId": "b8cb5e85a7d024fb26c85e29678a377e257dd04c0a19905de6b1d7e3cd772c14"
      }
    ],
    "pendingTotal余额": 0,
    "spendableTotal余额": 239912,
    "spendableUtxos": [
      {
        "outputIndex": 1,
        "satoshis": 239912,
        "txId": "b7d8b76bec7b9a703cbd39b311e7edb6ed0951c1c856fcbe6581396247d9afcf"
      }
    ],
    "total余额": 244280
  },
  "statusCode": 200
}
/get-account-utxosPOST

Alias of get-address-utxos for clients that use account terminology.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `spendStrategy` is passed through to wallet-style UTXO selection. Use `null` or omit it for the route default.
Example query
POST https://api.alkanode.com/get-account-utxos
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
  "spendStrategy": null
}
Example response
{
  "data": {
    "alkaneUtxos": [
      {
        "alkanes": {
          "2:77183": "1"
        },
        "outputIndex": 0,
        "satoshis": 546,
        "txId": "b8cb5e85a7d024fb26c85e29678a377e257dd04c0a19905de6b1d7e3cd772c14"
      }
    ],
    "spendableTotal余额": 239912,
    "total余额": 244280
  },
  "statusCode": 200
}
/get-amm-utxosPOST

Returns UTXOs suitable for AMM transactions for an address.

Outpoint-level responses are the most precise way to understand which UTXOs carry token state before constructing a transaction.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `spendStrategy` is passed through to wallet-style UTXO selection. Use `null` or omit it for the route default.
Example query
POST https://api.alkanode.com/get-amm-utxos
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
  "spendStrategy": null
}
Example response
{
  "data": {
    "utxos": [
      {
        "alkanes": {
          "2:77183": "1"
        },
        "confirmations": 11735,
        "outputIndex": 0,
        "satoshis": 546,
        "txId": "b8cb5e85a7d024fb26c85e29678a377e257dd04c0a19905de6b1d7e3cd772c14"
      }
    ]
  },
  "statusCode": 200
}
/get-alkanesPOST

Lists Alkanes with pagination, sorting, and optional search query.

These list and search methods are designed for discovery screens. They return indexed metadata, not live contract execution results.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • 搜索 text is matched against indexed token or pool metadata and may be capped by module search limits.
  • Sort fields are route-specific. Unsupported values fall back to the handler default or return a validation error, depending on the route.
Example query
POST https://api.alkanode.com/get-alkanes
{
  "limit": 20,
  "offset": 0,
  "order": "desc",
  "searchQuery": "DIESEL",
  "sort_by": "holders"
}
Example response
{
  "data": {
    "count": 1,
    "limit": 20,
    "offset": 0,
    "tokens": [
      {
        "alkaneId": {
          "block": "2",
          "tx": "0"
        },
        "fdvUsd": 47790983.31,
        "holders": 6409,
        "name": "DIESEL",
        "symbol": "DIESEL"
      }
    ],
    "total": 1
  },
  "statusCode": 200
}
/get-alkane-detailsPOST

Returns detailed metadata and market fields for one Alkane.

Use this when you already know the Alkane id and need the explorer's normalized metadata, display fields, and indexed creation context.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-alkane-details
{
  "alkaneId": {
    "block": "2",
    "tx": "0"
  }
}
Example response
{
  "alkane": {
    "id": "2:0"
  }
}
/get-poolsPOST

Lists pools for a factory.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-pools
{
  "factoryId": {
    "block": "4",
    "tx": "65522"
  },
  "limit": 20,
  "offset": 0
}
Example response
{
  "data": [
    {
      "block": "2",
      "tx": "53014"
    },
    {
      "block": "2",
      "tx": "53044"
    }
  ],
  "limit": 20,
  "offset": 0,
  "statusCode": 200,
  "total": 149
}
/get-pool-detailsPOST

Returns details for one factory pool.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-pool-details
{
  "factoryId": {
    "block": "4",
    "tx": "65522"
  },
  "poolId": {
    "block": "2",
    "tx": "53014"
  }
}
Example response
{
  "pool": {
    "id": "2:53014"
  }
}
/get-pool-swap-historyPOST

Returns swap history for a pool.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/get-pool-swap-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "poolId": {
    "block": "2",
    "tx": "53014"
  },
  "successful": true
}
Example response
{
  "data": {
    "count": 1,
    "items": {
      "count": 1,
      "offset": 0,
      "pool": {
        "poolId": {
          "block": "2",
          "tx": "53014"
        },
        "poolName": "DIESEL / CH4"
      },
      "swaps": [
        {
          "boughtAmount": "1061552883247",
          "boughtTokenBlockId": "2",
          "boughtTokenTxId": "16",
          "soldAmount": "11486258",
          "soldTokenBlockId": "2",
          "soldTokenTxId": "0",
          "timestamp": "2026-05-26T21:34:29Z",
          "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
        }
      ],
      "total": 2868
    },
    "offset": 0,
    "total": 2868
  },
  "statusCode": 200
}
/get-token-swap-historyPOST

Returns swap history for a token across pools.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-token-swap-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "tokenId": {
    "block": "2",
    "tx": "0"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "boughtAmount": "1061552883247",
        "boughtTokenBlockId": "2",
        "boughtTokenTxId": "16",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "seller地址": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
        "soldAmount": "11486258",
        "soldTokenBlockId": "2",
        "soldTokenTxId": "0",
        "timestamp": "2026-05-26T21:34:29Z",
        "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
      }
    ],
    "offset": 0,
    "total": 19041
  },
  "statusCode": 200
}
/get-pool-mint-historyPOST

Returns liquidity mint history for a pool.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-pool-mint-history
{
  "count": 20,
  "offset": 0,
  "poolId": {
    "block": "2",
    "tx": "53014"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "lpTokenAmount": "70915448",
        "minter地址": "bc1pf8c420ues7wvh0fgmh56675xsm4as33ms006tee876h3v08y5yqqfruu2w",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2025-02-18T21:08:26Z",
        "token0Amount": "244212912",
        "token0BlockId": "2",
        "token0TxId": "0",
        "token1Amount": "20600",
        "token1BlockId": "2",
        "token1TxId": "16",
        "transactionId": "89c7a58ba8dc9e7efda8cd8d50cf397313999f69b43149c4214ff6a15507c7c2"
      }
    ],
    "offset": 0,
    "total": 296
  },
  "statusCode": 200
}
/get-pool-burn-historyPOST

Returns liquidity burn history for a pool.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-pool-burn-history
{
  "count": 20,
  "offset": 0,
  "poolId": {
    "block": "2",
    "tx": "53014"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "burner地址": "bc1qnlaz6rt6734pfd23ehx68nyczs5pfjdp6ct0aa",
        "lpTokenAmount": "2366448",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2026-05-13T14:24:53Z",
        "token0Amount": "8128760",
        "token0BlockId": "2",
        "token0TxId": "0",
        "token1Amount": "609138011383",
        "token1BlockId": "2",
        "token1TxId": "16",
        "transactionId": "fd6f91549cc1ea3d5803406a9ab8679562e3d780f4bb099320b490af0680262f"
      }
    ],
    "offset": 0,
    "total": 159
  },
  "statusCode": 200
}
/get-pool-creation-historyPOST

Returns pool creation events.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-pool-creation-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "poolId": null
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "creator地址": "bc1pf8c420ues7wvh0fgmh56675xsm4as33ms006tee876h3v08y5yqqfruu2w",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2025-02-18T21:08:26Z",
        "token0Amount": "244212912",
        "token0BlockId": "2",
        "token0TxId": "0",
        "token1Amount": "20600",
        "token1BlockId": "2",
        "token1TxId": "16",
        "transactionId": "89c7a58ba8dc9e7efda8cd8d50cf397313999f69b43149c4214ff6a15507c7c2"
      }
    ],
    "offset": 0,
    "total": 149
  },
  "statusCode": 200
}
/get-address-swap-history-for-poolPOST

Returns swap history for an address in one pool.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-address-swap-history-for-pool
{
  "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
  "count": 20,
  "offset": 0,
  "poolId": {
    "block": "2",
    "tx": "53014"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
        "boughtAmount": "1061552883247",
        "boughtTokenBlockId": "2",
        "boughtTokenTxId": "16",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "soldAmount": "11486258",
        "soldTokenBlockId": "2",
        "soldTokenTxId": "0",
        "timestamp": "2026-05-26T21:34:29Z",
        "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/get-address-swap-history-for-tokenPOST

Returns swap history for an address and one token.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-address-swap-history-for-token
{
  "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
  "count": 20,
  "offset": 0,
  "tokenId": {
    "block": "2",
    "tx": "0"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
        "boughtAmount": "1061552883247",
        "boughtTokenBlockId": "2",
        "boughtTokenTxId": "16",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "soldAmount": "11486258",
        "soldTokenBlockId": "2",
        "soldTokenTxId": "0",
        "timestamp": "2026-05-26T21:34:29Z",
        "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/get-address-wrap-historyPOST

Returns frBTC wrap events for an address.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/get-address-wrap-history
{
  "address": "bc1p9qftzwgufdv5h7zk674jvppfjfa9eys56zzflfvvrg4cekpwfy9s3yerpx",
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "successful": true
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1p9qftzwgufdv5h7zk674jvppfjfa9eys56zzflfvvrg4cekpwfy9s3yerpx",
        "amount": "100000",
        "timestamp": "2026-05-20T16:28:50Z",
        "transactionId": "7edddf6ee5f6e39e503a8c9c7f80ff27285e2da37b61d6728b40f5903f316f36"
      }
    ],
    "offset": 0,
    "total": 3565
  },
  "statusCode": 200
}
/get-address-unwrap-historyPOST

Returns frBTC unwrap events for an address.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/get-address-unwrap-history
{
  "address": "bc1q2l9yryzdq82pteuhrjt93cuvgazr5ph8z5zgqw",
  "count": 20,
  "includeTotal": true,
  "offset": 0
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1q2l9yryzdq82pteuhrjt93cuvgazr5ph8z5zgqw",
        "amount": "100000",
        "timestamp": "2026-05-20T09:51:42Z",
        "transactionId": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155"
      }
    ],
    "offset": 0,
    "total": 2339
  },
  "statusCode": 200
}
/get-all-wrap-historyPOST

Returns global frBTC wrap events.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/get-all-wrap-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "successful": true
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1p9qftzwgufdv5h7zk674jvppfjfa9eys56zzflfvvrg4cekpwfy9s3yerpx",
        "amount": "100000",
        "timestamp": "2026-05-20T16:28:50Z",
        "transactionId": "7edddf6ee5f6e39e503a8c9c7f80ff27285e2da37b61d6728b40f5903f316f36"
      }
    ],
    "offset": 0,
    "total": 3565
  },
  "statusCode": 200
}
/get-all-unwrap-historyPOST

Returns global frBTC unwrap events.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
Example query
POST https://api.alkanode.com/get-all-unwrap-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1q2l9yryzdq82pteuhrjt93cuvgazr5ph8z5zgqw",
        "amount": "100000",
        "timestamp": "2026-05-20T09:51:42Z",
        "transactionId": "b1267c0dcf9de9fb8a8b5bb4d34da75ae7dca36abf3361906c7f83c6e661f155"
      }
    ],
    "offset": 0,
    "total": 2339
  },
  "statusCode": 200
}
/get-total-unwrap-amountPOST

Returns the total unwrapped amount at latest or at a block height.

Subfrost history endpoints are event indexes for frBTC flows. Use success and fulfillment filters to separate requested actions from completed ones.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
  • `successful` filters contract events by trace success state. Omit it to include both successes and failures.
Example query
POST https://api.alkanode.com/get-total-unwrap-amount
{
  "blockHeight": 946000,
  "successful": true
}
Example response
{
  "amount": "100000000"
}
/get-address-pool-creation-historyPOST

Returns pool creation history associated with an address.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-address-pool-creation-history
{
  "address": "bc1pqd8pq7pchx2wheh5gx0rgg6rkt7en3pvlrhphaq4gntvnt3mm7dqxwzm2e",
  "count": 20,
  "offset": 0,
  "poolId": {
    "block": "2",
    "tx": "53014"
  }
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "creator地址": "bc1pqd8pq7pchx2wheh5gx0rgg6rkt7en3pvlrhphaq4gntvnt3mm7dqxwzm2e",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2025-02-18T21:08:26Z",
        "token0BlockId": "2",
        "token0TxId": "0",
        "token1BlockId": "2",
        "token1TxId": "16",
        "transactionId": "89c7a58ba8dc9e7efda8cd8d50cf397313999f69b43149c4214ff6a15507c7c2"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/get-address-pool-mint-historyPOST

Returns liquidity mint history associated with an address.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/get-address-pool-mint-history
{
  "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
  "count": 20,
  "offset": 0
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "lpTokenAmount": "70915448",
        "minter地址": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2025-02-18T21:08:26Z",
        "token0Amount": "244212912",
        "token1Amount": "20600",
        "transactionId": "89c7a58ba8dc9e7efda8cd8d50cf397313999f69b43149c4214ff6a15507c7c2"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/get-address-pool-burn-historyPOST

Returns liquidity burn history associated with an address.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/get-address-pool-burn-history
{
  "address": "bc1pmwsf07u2s53gfq38jlafq4w0dgw3x5kquh2ayx465nnsghphjrjqs5k0l7",
  "count": 20,
  "offset": 0
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "burner地址": "bc1pmwsf07u2s53gfq38jlafq4w0dgw3x5kquh2ayx465nnsghphjrjqs5k0l7",
        "lpTokenAmount": "2366448",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "timestamp": "2026-05-13T14:24:53Z",
        "token0Amount": "8128760",
        "token1Amount": "609138011383",
        "transactionId": "fd6f91549cc1ea3d5803406a9ab8679562e3d780f4bb099320b490af0680262f"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/address-positionsPOST

Returns an address position summary for pools under a factory.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/address-positions
{
  "address": "bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8",
  "factoryId": {
    "block": "4",
    "tx": "65522"
  }
}
Example response
{
  "data": {
    "positions": [
      {
        "lp余额": "2366448",
        "poolId": {
          "block": "2",
          "tx": "53014"
        },
        "poolName": "DIESEL / CH4",
        "token0Amount": "8128760",
        "token1Amount": "609138011383",
        "valueInUsd": 96.22
      }
    ]
  },
  "statusCode": 200
}
/get-all-pools-detailsPOST

Returns detailed pool rows for a factory with search, sort, paging, and optional address filtering.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • 搜索 text is matched against indexed token or pool metadata and may be capped by module search limits.
  • Sort fields are route-specific. Unsupported values fall back to the handler default or return a validation error, depending on the route.
Example query
POST https://api.alkanode.com/get-all-pools-details
{
  "address": null,
  "factoryId": {
    "block": "4",
    "tx": "65522"
  },
  "limit": 20,
  "offset": 0,
  "order": "desc",
  "searchQuery": "",
  "sort_by": "volume"
}
Example response
{
  "data": {
    "count": 1,
    "largestPool": {
      "creationBlockHeight": 916291,
      "poolApr": 14.7428,
      "poolId": {
        "block": "2",
        "tx": "53014"
      },
      "poolName": "DIESEL / CH4"
    },
    "limit": 20,
    "offset": 0,
    "pools": [
      {
        "poolId": {
          "block": "2",
          "tx": "53014"
        },
        "poolName": "DIESEL / CH4",
        "poolTvlInUsd": 35819.907581967265,
        "poolVolume1dInUsd": 15526.198504698415,
        "reserve0": "21486066722",
        "reserve1": "1624687948631013"
      }
    ],
    "total": 149,
    "totalPoolVolume24h": 676270.3489941867
  },
  "statusCode": 200
}
/get-all-address-amm-tx-historyPOST

Returns all AMM transaction history for an address.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
Example query
POST https://api.alkanode.com/get-all-address-amm-tx-history
{
  "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "transactionType": "swap"
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "address": "bc1p4g0w7n3yjuzpx5s6umw03mzca49ktkmvxm976nyv0k272m2vl48slrrw5l",
        "boughtAmount": "1061552883247",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "soldAmount": "11486258",
        "timestamp": "2026-05-26T21:34:29Z",
        "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3",
        "type": "swap"
      }
    ],
    "offset": 0,
    "total": 1
  },
  "statusCode": 200
}
/get-all-amm-tx-historyPOST

Returns global AMM transaction history.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
Example query
POST https://api.alkanode.com/get-all-amm-tx-history
{
  "count": 20,
  "includeTotal": true,
  "offset": 0,
  "transactionType": "swap"
}
Example response
{
  "data": {
    "count": 1,
    "items": [
      {
        "boughtAmount": "1061552883247",
        "boughtTokenBlockId": "2",
        "boughtTokenTxId": "16",
        "poolBlockId": "2",
        "poolTxId": "53014",
        "soldAmount": "11486258",
        "soldTokenBlockId": "2",
        "soldTokenTxId": "0",
        "timestamp": "2026-05-26T21:34:29Z",
        "transactionId": "02146673f5ba09a67042626a21727466a3ac4c68bdce49e12fd9f734133489d3",
        "type": "swap"
      }
    ],
    "offset": 0,
    "total": 25372
  },
  "statusCode": 200
}
/get-all-token-pairsPOST

Returns all token pairs known for a factory.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-all-token-pairs
{
  "factoryId": {
    "block": "4",
    "tx": "65522"
  }
}
Example response
{
  "data": [
    {
      "poolId": {
        "block": "2",
        "tx": "53014"
      },
      "poolName": "DIESEL / CH4",
      "poolTvlInUsd": 35819.907581967265,
      "poolVolume1dInUsd": 15526.198504698415,
      "reserve0": "21486066722",
      "reserve1": "1624687948631013",
      "token0": {
        "alkaneId": {
          "block": "2",
          "tx": "0"
        },
        "name": "DIESEL",
        "symbol": "DIESEL",
        "token0Amount": "21486066722"
      },
      "token1": {
        "alkaneId": {
          "block": "2",
          "tx": "16"
        },
        "name": "CH4",
        "symbol": "CH4",
        "token1Amount": "1624687948631013"
      }
    }
  ],
  "statusCode": 200
}
/get-token-pairsPOST

Returns pairs for one token under a factory.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

What to know
  • `page` pagination is 1-based. `limit` may be clamped by the handler to protect the backing index.
  • `count` and `offset` use offset-based pagination. Request totals only when the endpoint supports `includeTotal` or `include_total`.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
  • 搜索 text is matched against indexed token or pool metadata and may be capped by module search limits.
  • Sort fields are route-specific. Unsupported values fall back to the handler default or return a validation error, depending on the route.
Example query
POST https://api.alkanode.com/get-token-pairs
{
  "alkaneId": {
    "block": "2",
    "tx": "0"
  },
  "factoryId": {
    "block": "4",
    "tx": "65522"
  },
  "limit": 20,
  "offset": 0,
  "searchQuery": "",
  "sort_by": "volume"
}
Example response
{
  "data": [
    {
      "poolId": {
        "block": "2",
        "tx": "53014"
      },
      "poolName": "DIESEL / CH4",
      "poolTvlInUsd": 35819.907581967265,
      "poolVolume1dInUsd": 15526.198504698415,
      "reserve0": "21486066722",
      "reserve1": "1624687948631013",
      "token0": {
        "alkaneId": {
          "block": "2",
          "tx": "0"
        },
        "name": "DIESEL",
        "symbol": "DIESEL"
      },
      "token1": {
        "alkaneId": {
          "block": "2",
          "tx": "16"
        },
        "name": "CH4",
        "symbol": "CH4"
      }
    }
  ],
  "statusCode": 200
}
/get-alkane-swap-pair-detailsPOST

Returns details for a token pair under a factory.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/get-alkane-swap-pair-details
{
  "factoryId": {
    "block": "4",
    "tx": "65522"
  },
  "tokenAId": {
    "block": "2",
    "tx": "0"
  },
  "tokenBId": {
    "block": "2",
    "tx": "16"
  }
}
Example response
{
  "data": [
    {
      "path": [
        {
          "block": "2",
          "tx": "0"
        },
        {
          "block": "2",
          "tx": "16"
        }
      ],
      "pools": [
        {
          "poolId": {
            "block": "2",
            "tx": "53014"
          },
          "poolName": "DIESEL / CH4",
          "reserve0": "21486066722",
          "reserve1": "1624687948631013"
        }
      ]
    }
  ],
  "statusCode": 200
}

Explorer HTTP API

HTTP and websocket endpoints used by the explorer interface.

/api/block/pool?height=946000GET

Returns mining pool attribution for a block.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

What to know
  • Height filters resolve against indexed chain state. Omitting an optional height generally means the latest indexed height.
Example query
GET https://api.alkanode.com/api/block/pool?height=946000
Example response
{
  "height": 946000,
  "pool": "未知"
}
/api/mempool/blocksGET

Returns projected mempool block summaries for the explorer.

AMM endpoints use pool and factory ids from indexed contracts. Route calculations are informational and clients should still validate transactions before broadcast.

Example query
GET https://api.alkanode.com/api/mempool/blocks
Example response
{
  "blocks": [
    {
      "index": 0,
      "median_fee_rate": 1.3,
      "min_fee_rate": 1.001531393568147,
      "total_fees": 2224788,
      "trace_count": 2119,
      "tx_count": 3879,
      "vsize": 998957,
      "weight": 3987528
    }
  ],
  "deltas": [
    {
      "index": 0,
      "trace_count": 2119,
      "tx_count": 3879
    }
  ],
  "sequence": 1449,
  "status": {
    "hydrating": false,
    "in_sync": true,
    "phase": "in_sync",
    "stale": false
  },
  "tx_count": 97385,
  "updated_at": 1779900427
}
/api/search/guess?q=2%3A0GET

Returns search suggestions and target type guesses.

HTTP methods are compatibility routes used by the explorer and Oyl-style clients; they wrap indexed data into route-specific response shapes.

Example query
GET https://api.alkanode.com/api/search/guess?q=2%3A0
Example response
{
  "groups": [
    {
      "items": [
        {
          "href": "/alkane/2:0",
          "label": "DIESEL",
          "subtitle": "2:0"
        }
      ],
      "kind": "alkanes",
      "title": "Alkanes"
    }
  ],
  "query": "2:0"
}
/api/alkane/simulatePOST

Simulates an Alkane 合约调用 from the explorer.

Simulation executes against indexed state and is meant for previewing contract behavior before building or broadcasting a transaction.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
POST https://api.alkanode.com/api/alkane/simulate
{
  "alkane": "2:0",
  "inputs": [],
  "opcode": 99
}
Example response
{
  "ok": true,
  "result": null
}
/api/alkane/holders/export?alkane=2%3A0GET

Exports holders for an Alkane as a downloadable response.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
GET https://api.alkanode.com/api/alkane/holders/export?alkane=2%3A0
Example response
{
  "content_type": "text/csv"
}
/api/alkane/chart?alkane=2%3A16&source=derived&quote=2%3A0GET

Returns chart series data for an Alkane metric.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
GET https://api.alkanode.com/api/alkane/chart?alkane=2%3A16&source=derived&quote=2%3A0
Example response
{
  "available": true,
  "candles": [
    {
      "close": 0.00001234,
      "ts": 1779890400
    }
  ],
  "error": null,
  "ok": true,
  "quote": "2:0",
  "range": "3m",
  "source": "derived"
}
/api/alkane/balance-chart?alkane=2%3A53014&balance_alkane=2%3A0GET

Returns balance chart data for an address and Alkane.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
GET https://api.alkanode.com/api/alkane/balance-chart?alkane=2%3A53014&balance_alkane=2%3A0
Example response
{
  "available": true,
  "error": null,
  "ok": true,
  "points": [
    {
      "height": 951000,
      "value": 214.86066722
    }
  ],
  "range": "1d"
}
/api/minting-price-chart?alkane=2%3A0GET

Returns minting price chart data for an Alkane.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
GET https://api.alkanode.com/api/minting-price-chart?alkane=2%3A0
Example response
{
  "available": true,
  "error": null,
  "ok": true,
  "points": [
    {
      "height": 880500,
      "value": 0.495472
    },
    {
      "height": 881000,
      "value": 0.0990944
    }
  ],
  "range": "all"
}
/api/address/chart?address=bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8&alkane=2%3A0GET

Returns address-level chart data for explorer pages.

市场 and chart data is derived from indexed AMM activity. Missing buckets or sparse periods can occur when no qualifying events were indexed.

What to know
  • Bitcoin addresses are validated for the configured network, so mainnet, testnet, signet, and regtest addresses are not interchangeable.
  • Alkane ids use the `<block>:<tx>` identity. Oyl-compatible HTTP bodies split the same id into `{ "block": "...", "tx": "..." }`.
Example query
GET https://api.alkanode.com/api/address/chart?address=bc1phqvgwn7wn5e4s8g0999rtgafd07jpuuy59rkdrk4s5thw9jafkasg8umr8&alkane=2%3A0
Example response
{
  "available": true,
  "error": null,
  "ok": true,
  "points": [
    {
      "height": 946000,
      "value": 309500.01348973
    }
  ],
  "range": "all"
}
/api/rune/holders/export?rune=1%3A0GET

Exports holders for a Rune when the runes module is enabled.

余额s are derived from indexed UTXO state, so historical reads reflect the indexer's view at that height rather than a wallet's local cache.

Example query
GET https://api.alkanode.com/api/rune/holders/export?rune=1%3A0
Example response
{
  "content_type": "text/csv"
}
/api/events/wsWEBSOCKET

Streams explorer mempool and chain events when websocket support is enabled.

The websocket sends event messages as the explorer observes chain and mempool changes, so consumers should handle reconnects and duplicate state updates.

Example query
WEBSOCKET https://api.alkanode.com/api/events/ws
{
  "channels": [
    "mempool"
  ],
  "type": "subscribe"
}
Example response
{
  "blocks": [
    {
      "index": 0,
      "trace_count": 2119,
      "tx_count": 3879,
      "vsize": 998957
    }
  ],
  "type": "mempool"
}