XChain Platform Explorer: API Reference
Overview
The explorer exposes a REST API for querying all XChain Platform state. Every endpoint returns JSON and uses parameterized SQL internally to prevent injection.
All API URLs follow the pattern:
GET /{COIN}/api/{method}/{query}/{type}
Where:
{COIN}: Coin prefix identifying the chain and network (e.g.,BTC,TBTC,RDOGE){method}: The data category (e.g.,sends,balances,token){query}: The search value (address, block index, token ticker, tx hash, action index){type}: The filter type that determines how{query}is interpreted (e.g.,address,block,token)
Coin Prefixes
| Network | Prefix |
|---|---|
| Bitcoin mainnet | BTC |
| Bitcoin testnet | TBTC |
| Bitcoin regtest | RBTC |
| Litecoin mainnet | LTC |
| Litecoin testnet | TLTC |
| Litecoin regtest | RLTC |
| Dogecoin mainnet | DOGE |
| Dogecoin testnet | TDOGE |
| Dogecoin regtest | RDOGE |
Base URL
For the public XChain Platform (mainnet or testnet), query the hosted explorer directly:
https://explorer.xchain.io/{COIN}/api/
For a self-hosted or local explorer instance:
http://{host}:{port}/{COIN}/api/
The examples below use http://localhost:8080 for a self-hosted instance; against the public platform, substitute https://explorer.xchain.io (no port).
Response Format
API Response
All API endpoints return:
{
"data": [ ... ],
"total": 42,
"runtime": "15ms"
}
| Field | Type | Description |
|---|---|---|
data |
array | Array of result objects (or a single object for detail endpoints) |
total |
number | Total number of matching records (for paginated endpoints) |
runtime |
string | Server-side query execution time |
Error Responses
| Status | Cause |
|---|---|
400 |
Bad request or database query error |
404 |
Invalid endpoint path |
429 |
Rate limit exceeded (500 requests per 60s window) |
503 |
Coin not configured or database unavailable |
Pagination
All list endpoints support pagination via query parameters:
| Parameter | Type | Description |
|---|---|---|
page |
number | Page number (1-based) |
limit |
number | Results per page (capped per endpoint) |
sortorder |
string | Sort direction: ASC or DESC |
start |
number | Row offset (alternative to page) |
length |
number | Row count (alternative to limit) |
Result limits:
- Most endpoints: max 100 results per page
getBalancesandgetHolders: max 500 results per page
# Page 2 of sends, 25 per page, newest first
curl "http://localhost:8080/BTC/api/sends/bc1q.../address?page=2&limit=25&sortorder=DESC"
System Endpoints
Get Status
Returns configuration and sync health information for all supported and available coins.
GET /{COIN}/api/status
Parameters: None
Response:
{
"data": {
"supported": { "BTC": "BTC (mainnet)", "RBTC": "BTC (regtest)", ... },
"available": { "BTC": "BTC (mainnet)" },
"hub_config_fetched_at": "2026-06-13T12:00:00.000Z",
"hub_config_age_seconds": 42,
"last_block": { "BTC": 893000, "RBTC": 41 },
"last_block_time": { "BTC": 1718280000, "RBTC": 1718080000 },
"decoder_tip": { "BTC": 893000, "RBTC": 41 },
"decoder_lag_blocks": { "BTC": 0, "RBTC": 0 },
"tip_age_seconds": { "BTC": 120, "RBTC": 200120 },
"stale": { "BTC": false, "RBTC": true },
"chain_tip": { "BTC": 893000, "RBTC": 41 },
"chain_lag_blocks": { "BTC": 0, "RBTC": 0 },
"decoder_health": { "BTC": "healthy", "RBTC": "healthy" }
}
}
The example above shows the gate in action: RBTC has a frozen tip, so it is
stale and absent from available, while still listed in supported.
| Field | Description |
|---|---|
supported |
Every coin code the explorer’s config defines, mapped to its display name. Static: the freshness gate never removes a coin from here |
available |
The subset of coins this instance currently serves as up-to-date data, mapped to display names. Computed per request: it starts from the configured availability map and then drops every coin the freshness gate marks stale, so a coin can leave available and stay in supported |
hub_config_fetched_at |
ISO-8601 timestamp of the last successful hub config fetch; null if hub has never responded |
hub_config_age_seconds |
Seconds since last hub config fetch; null if no fetch has occurred |
last_block |
Per-coin latest block index written to the indexer DB |
last_block_time |
Per-coin unix timestamp of that block |
decoder_tip |
Per-coin highest block the decoder has processed; null if the decoder DB is unreachable |
decoder_lag_blocks |
decoder_tip − last_block (how far the indexer trails the decoder); null when either value is unavailable |
tip_age_seconds |
Per-coin wall-clock seconds since last_block_time; null when no usable block_time was read. Unlike decoder_lag_blocks this catches a joint indexer plus decoder freeze, because it measures against the local clock rather than against the other replica |
stale |
Per-coin freshness verdict: true when tip_age_seconds has passed that coin’s threshold. Fails closed, so a missing or unreadable block_time also reads true. Only coins this instance actually measures (those with a live connection pool) appear here |
chain_tip |
Per-coin chain tip as reported by the decoder’s own health endpoint (what the coin node sees) |
chain_lag_blocks |
chain_tip − decoder_tip (how far the decoder trails the chain) |
decoder_health |
Per-coin decoder health string: "healthy", "unhealthy" (decoder up but reporting problems), "node-stale" (the decoder’s cached coin-node height is frozen, so chain_tip and chain_lag_blocks are nulled), "unreachable" (decoder not responding), or "unconfigured" (no DECODER_API_URL set for this coin) |
Freshness gate. The threshold behind stale is EXPLORER_TIP_MAX_AGE_S
(6 hours by default), overridable per coin with EXPLORER_TIP_MAX_AGE_S_<COIN>
and disabled entirely with 0. See
configuration.md. A client that wants
only current data should read available rather than supported, and treat a
coin’s disappearance from available as a transient outage of this instance,
not as the coin being unknown.
Get Network
Returns aggregate network statistics, coin identity/pricing, fee guidance, and finality settings.
GET /{COIN}/api/network
Parameters: None
Response:
{
"data": {
"totals": {
"total_sends": 1234,
"total_issues": 567,
"total_orders": 89,
"total_dispensers": 45
},
"network": {
"block": 893000,
"block_time": 1718280000,
"unconfirmed": 3,
"fee": { "low": 1, "medium": 2, "high": 5 }
},
"coin": {
"name": "Bitcoin",
"symbol": "BTC",
"price": { "btc": "1.00000000", "usd": "68420.00" }
},
"xchain": {
"name": "XChain",
"symbol": "XCHAIN",
"price": { "btc": "0.00000000", "usd": "0.00" }
},
"finality": { "BTC": 6, "LTC": 12, "DOGE": 60 }
}
}
| Field | Description |
|---|---|
totals |
Per-action-type record counts for this coin |
network.block |
Latest indexed block height |
network.block_time |
Unix timestamp of the latest indexed block |
network.unconfirmed |
Count of rows in the decoder’s mempool_transactions table |
network.fee |
Suggested sat/vByte fee tiers (low/medium/high) from the encoder; falls back to {1,2,3} |
coin.price.usd |
Live USD price from the xchain-hub oracle (mainnet coins only; "0.00" for testnet/regtest or when no oracle price is available) |
finality |
Recommended confirmation depths before treating a receipt as final; mirrors hub cross-chain thresholds; can be overridden via XCHAIN_CONFIRMATIONS_<COIN> env vars |
Token Endpoints
Get Token
Returns full token information for a single ticker.
GET /{COIN}/api/token/{tick}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick |
path | Token ticker name |
Response fields: Token metadata including supply, max supply, decimals, owner address, description, lock states, mint parameters, and creation info.
Example:
curl http://localhost:8080/BTC/api/token/MYTOKEN
{
"data": {
"tick": "MYTOKEN",
"max_supply": "1000000.00000000",
"supply": "500000.00000000",
"decimals": 8,
"owner": "bc1q...",
"description": "My token description",
"lock_supply": 0,
"lock_mint": 0,
"lock_description": 0,
"block_index": 800000,
"action_index": 42
}
}
Get Tokens
Returns a list of tokens filtered by various criteria.
GET /{COIN}/api/tokens/{query}/{type}
Parameters:
| Parameter | Location | Description |
|---|---|---|
query |
path | Search value |
type |
path | Filter type (see below) |
Type values:
| Type | Query interpretation | Description |
|---|---|---|
block |
Block index | Tokens created in a specific block |
address |
Address string | Tokens owned by an address |
token |
Ticker (wildcard) | Token search by name (supports partial matching) |
subtoken |
Parent ticker | Sub-tokens of a parent token |
Pagination: Supported
Example:
# All tokens owned by an address
curl "http://localhost:8080/BTC/api/tokens/bc1q.../address?limit=50"
# Search tokens by name
curl http://localhost:8080/BTC/api/tokens/MY/token
Balance & Address Endpoints
Get Balances
Returns all token balances held by an address.
GET /{COIN}/api/balances/{address}
Parameters:
| Parameter | Location | Description |
|---|---|---|
address |
path | Blockchain address |
Pagination: Supported (max 500 results)
Response: Array of balance objects with tick, balance amount, and token details.
Example:
curl http://localhost:8080/BTC/api/balances/bc1qexampleaddress
Get Address
Returns summary information for an address, including native-coin balance and UTXO counts sourced from the coin’s xchain-utxo-tracker (the explorer itself is DB-only and never talks to a node).
GET /{COIN}/api/address/{address}
Parameters:
| Parameter | Location | Description |
|---|---|---|
address |
path | Blockchain address |
Response fields: address, type, balances (confirmed/pending/received), utxos (confirmed/pending), estimated_value (btc/usd, from the hub price oracle; null when no price is available), tracker_available, mempool_ready.
tracker_available is false when no UTXO tracker is configured for the coin or it is unreachable; the balance and UTXO fields are then null (the UI shows “Unavailable”) rather than placeholder values.
Get Holders
Returns a ranked list of all holders for a given token.
GET /{COIN}/api/holders/{tick}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick |
path | Token ticker |
Pagination: Supported (max 500 results)
Response: Array of holder objects with address and balance, sorted by balance descending.
Example:
curl "http://localhost:8080/BTC/api/holders/MYTOKEN?limit=100"
Get Credits
Returns credit records (incoming tokens: transfers, mints, airdrops, dispenser releases, escrow releases).
GET /{COIN}/api/credits/{query}/{type}
Type values: block, address
Pagination: Supported
Get Debits
Returns debit records (outgoing tokens: transfers, destroys, fees, DEX funding).
GET /{COIN}/api/debits/{query}/{type}
Type values: block, address
Pagination: Supported
Get Escrows
Returns escrow records (tokens locked in DEX orders, dispensers, or swaps).
GET /{COIN}/api/escrows/{query}/{type}
Type values: block, address
Pagination: Supported
Transaction & History Endpoints
Get Transaction
Returns a decoded XChain transaction with all associated actions.
GET /{COIN}/api/transaction/{query}/{type}
Type values:
| Type | Query interpretation |
|---|---|
tx_hash |
Transaction hash |
tx_index |
Transaction index number |
Response fields: tx_index, tx_hash, block_index, and an array of actions contained in the transaction.
Example:
curl http://localhost:8080/BTC/api/transaction/abc123.../tx_hash
Get Actions
Returns all actions across all types, with optional filters for block, transaction, and token.
GET /{COIN}/api/actions[?blockIndex=N&txid=TX_HASH&tick=TOKEN]
Query parameters:
| Parameter | Type | Description |
|---|---|---|
blockIndex |
number | Filter to actions in a specific block |
txid |
string | Filter to actions in a specific transaction (by hash) |
tick |
string | Filter to actions involving a specific token ticker |
Pagination: Supported
Response: Array of action objects, each including action_index, action (type name), action_format, source, block_index, timestamp, tx_hash, and tx_index.
Example:
# All actions in a block
curl "http://localhost:8080/BTC/api/actions?blockIndex=800000"
# All actions involving a token
curl "http://localhost:8080/BTC/api/actions?tick=MYTOKEN"
Get Action
Returns comprehensive details for a single XChain action by its action index. Includes the action record, associated credits, debits, escrows, and fees.
GET /{COIN}/api/action/{actionIndex}
Parameters:
| Parameter | Location | Description |
|---|---|---|
actionIndex |
path | The cross-chain action index number |
Response: Full action detail including the action type, all fields, transaction info, block info, and all ledger entries (credits, debits, escrows, fees) associated with this action.
Example:
curl http://localhost:8080/BTC/api/action/42
Get Block
Returns block-level summary information.
GET /{COIN}/api/block/{blockIndex}
Parameters:
| Parameter | Location | Description |
|---|---|---|
blockIndex |
path | Block height |
Response fields: block_index, block_hash, block_time, transaction count, and action summary.
Get History
Returns a unified history of all XChain activity matching the query. Combines all action types into a single chronological feed.
GET /{COIN}/api/history/{query}/{type}
Type values:
| Type | Query interpretation | Description |
|---|---|---|
block |
Block index | All actions in a specific block |
address |
Address string | All actions involving an address |
token |
Ticker name | All actions involving a token |
recent |
(ignored) | Most recent actions across all types |
Pagination: Supported
Example:
# Recent history for an address
curl "http://localhost:8080/BTC/api/history/bc1q.../address?limit=50&sortorder=DESC"
# Recent global activity
curl "http://localhost:8080/BTC/api/history/0/recent?limit=20"
ACTION-Specific Endpoints
All ACTION-specific endpoints share the same URL pattern and accept pagination:
GET /{COIN}/api/{action_plural}/{query}/{type}
Each returns records of the corresponding ACTION type. The {type} parameter controls how {query} is interpreted.
Sends
Token transfer records.
GET /{COIN}/api/sends/{query}/{type}
| Type | Query interpretation | Description |
|---|---|---|
block |
Block index | Sends in a specific block |
address |
Address | Sends where address is source or destination |
source |
Address | Sends from this address |
destination |
Address | Sends to this address |
token |
Ticker | Sends of a specific token |
Example:
curl "http://localhost:8080/BTC/api/sends/bc1q.../address?limit=25&sortorder=DESC"
Issues
Token creation and update records (ISSUE action).
GET /{COIN}/api/issues/{query}/{type}
| Type | Description |
|---|---|
block |
Issues in a specific block |
address |
Issues by an address |
token |
Issues for a specific token |
Mints
Token minting records.
GET /{COIN}/api/mints/{query}/{type}
| Type | Description |
|---|---|
block |
Mints in a specific block |
address |
Mints by or to an address |
source |
Mints initiated by this address |
destination |
Mints received at this address |
token |
Mints of a specific token |
Destroys
Token burn/destroy records.
GET /{COIN}/api/destroys/{query}/{type}
| Type | Description |
|---|---|
block |
Destroys in a specific block |
address |
Destroys by an address |
token |
Destroys of a specific token |
Orders
DEX order records (create, with status info).
GET /{COIN}/api/orders/{query}/{type}
| Type | Description |
|---|---|
block |
Orders in a specific block |
address |
Orders by an address |
token |
Orders involving a specific token |
Response includes: give/get coin, give/get tick, give/get amounts, expiration, status, and computed price fields.
Order Matches
Records of matched (filled) orders.
GET /{COIN}/api/order_matches/{query}/{type}
| Type | Description |
|---|---|
block |
Order matches in a specific block |
Order Cancels
Records of cancelled orders.
GET /{COIN}/api/order_cancels/{query}/{type}
| Type | Description |
|---|---|
block |
Order cancels in a specific block |
address |
Order cancels by an address |
Order Edits
Records of edited orders.
GET /{COIN}/api/order_edits/{query}/{type}
| Type | Description |
|---|---|
block |
Order edits in a specific block |
address |
Order edits by an address |
Order Expires
Records of expired orders.
GET /{COIN}/api/order_expires/{query}/{type}
| Type | Description |
|---|---|
block |
Order expirations in a specific block |
address |
Order expirations for an address |
COINPay
Native coin payment actions that fulfill ORDER_MATCH obligations.
GET /{COIN}/api/coinpays/{query}/{type}
| Type | Description |
|---|---|
block |
COINPay actions in a specific block |
address |
COINPay actions involving an address |
Response includes: obligation action_index, coin amount, txid, vout, status, block, timestamp.
GET /{COIN}/api/coinpay_expires/{query}/{type}
| Type | Description |
|---|---|
block |
COINPay expirations in a specific block |
address |
COINPay expirations for an address |
GET /{COIN}/api/coinpay_obligations/{query}/{type}
| Type | Description |
|---|---|
block |
COINPay obligations created in a specific block |
address |
COINPay obligations where this address is the payer or payee |
Response includes: payer address, payee address, coin, coin amount, expiration timestamp, status (pending_coinpay/fulfilled/expired).
Dispensers
Vending-machine style token dispensers.
GET /{COIN}/api/dispensers/{query}/{type}
| Type | Description |
|---|---|
block |
Dispensers created in a specific block |
address |
Dispensers created by an address |
source |
Dispensers where this address is the source |
destination |
Dispensers where this address is the dispenser address |
token |
Dispensers for a specific token |
Response includes: give/get coin, give/get tick, give/get amounts, escrow amount, fiat pricing, status, expiration, allow/block lists.
Dispenses
Records of dispenser purchases (triggered when someone sends the required amount to a dispenser address).
GET /{COIN}/api/dispenses/{query}/{type}
| Type | Description |
|---|---|
block |
Dispenses in a specific block |
address |
Dispenses involving an address (source or destination) |
source |
Dispenses from this address |
destination |
Dispenses to this address |
token |
Dispenses of a specific token |
Dispenser Cancels
GET /{COIN}/api/dispenser_cancels/{query}/{type}
| Type | Description |
|---|---|
block |
Dispenser cancels in a specific block |
address |
Dispenser cancels by an address |
Dispenser Closes
GET /{COIN}/api/dispenser_closes/{query}/{type}
| Type | Description |
|---|---|
block |
Dispenser closes in a specific block |
address |
Dispenser closes by an address |
Dispenser Edits
GET /{COIN}/api/dispenser_edits/{query}/{type}
| Type | Description |
|---|---|
block |
Dispenser edits in a specific block |
address |
Dispenser edits by an address |
Dispenser Expires
GET /{COIN}/api/dispenser_expires/{query}/{type}
| Type | Description |
|---|---|
block |
Dispenser expirations in a specific block |
address |
Dispenser expirations for an address |
Swaps
Cross-chain token swap records.
GET /{COIN}/api/swaps/{query}/{type}
| Type | Description |
|---|---|
block |
Swaps in a specific block |
address |
Swaps by an address |
token |
Swaps involving a specific token |
Response includes: give/get coin, give/get tick, give/get amounts, get address, expiration, status, allow/block lists.
Swap Matches
GET /{COIN}/api/swap_matches/{query}/{type}
| Type | Description |
|---|---|
block |
Swap matches in a specific block |
Swap Cancels
GET /{COIN}/api/swap_cancels/{query}/{type}
| Type | Description |
|---|---|
block |
Swap cancels in a specific block |
address |
Swap cancels by an address |
Swap Edits
GET /{COIN}/api/swap_edits/{query}/{type}
| Type | Description |
|---|---|
block |
Swap edits in a specific block |
address |
Swap edits by an address |
Swap Expires
GET /{COIN}/api/swap_expires/{query}/{type}
| Type | Description |
|---|---|
block |
Swap expirations in a specific block |
address |
Swap expirations for an address |
Bet Feeds (Betting Markets)
Parimutuel betting markets, created by the BET action (format 0). A market’s action_index IS its
identifier: bets and oracle actions reference it as feed_action_index.
GET /{COIN}/api/bet_feeds/{query}/{type}
GET /{COIN}/api/bet_feeds
| Type | Description |
|---|---|
block |
Markets created in a specific block |
address |
Markets created by an address (that address is the market’s oracle) |
source |
Markets where this address is the source |
token |
Markets denominated in a specific token |
status |
Markets in a given lifecycle state: open, closed, resolved, resolved_void, cancelled, expired |
Response includes: action index, source (the oracle), label, outcomes, tick, fee (the oracle’s cut as a percent of the pot), deadline, refund window, expire_at, minimum amount, allow/block lists, details, feed status, closed_block, terminal_block, plus the usual block, transaction and status fields.
The unfiltered form returns the most recent markets across every source.
Get Bet Feed
A single market by the action index that created it.
GET /{COIN}/api/bet_feed/{action_index}
Returns the same fields as above, with outcomes split back into an array in wire order so a caller
can render the options without re-parsing the stored comma-joined list.
Bets
Individual wagers placed on a market (BET format 2). A bet is final once confirmed: there is no bettor-side cancel.
GET /{COIN}/api/bets/{query}/{type}
GET /{COIN}/api/bets
| Type | Description |
|---|---|
block |
Bets placed in a specific block |
address |
Bets placed by an address |
feed |
Bets placed on a specific market, by that market’s action index |
token |
Bets denominated in a specific token |
status |
Bets in a given settlement state: open, won, lost, refunded |
Response includes: action index, feed action index, bettor address, outcome, tick, amount, bet status, settled_block.
Payouts credit the address that PLACED the bet, automatically at resolution. There is no claim
action, so a settled bet shows up as a bet_status flip plus a credit, never as a user-submitted
collection.
Oracle Track Record
The per-address record of whoever creates markets. This is what a bettor reads to judge an oracle before staking on one of their markets.
GET /{COIN}/api/oracle/{address}
Response includes: address, total_feeds, active_feeds (open plus closed), counts per lifecycle
status, fees_earned per token (tick, resolves, amount), and a reputation_caveat string.
Fees are earned on the resolve path only: a void, a cancel and an expiry all pay the oracle nothing. The caveat field is returned because the record is per-address with no bonding, and addresses are free to create, so an empty history means unknown rather than safe.
Sweeps
Records of SWEEP actions (transfer all assets to a destination).
GET /{COIN}/api/sweeps/{query}/{type}
| Type | Description |
|---|---|
block |
Sweeps in a specific block |
address |
Sweeps by an address |
source |
Sweeps from this address |
destination |
Sweeps to this address |
Dividends
Proportional distribution records.
GET /{COIN}/api/dividends/{query}/{type}
| Type | Description |
|---|---|
block |
Dividends in a specific block |
address |
Dividends by an address |
token |
Dividends of a specific token |
Airdrops
Airdrop distribution records.
GET /{COIN}/api/airdrops/{query}/{type}
| Type | Description |
|---|---|
block |
Airdrops in a specific block |
address |
Airdrops by an address |
token |
Airdrops of a specific token |
Broadcasts
On-chain broadcast/oracle data.
GET /{COIN}/api/broadcasts/{query}/{type}
| Type | Description |
|---|---|
block |
Broadcasts in a specific block |
address |
Broadcasts by an address |
Messages
On-chain encrypted or plaintext messages.
GET /{COIN}/api/messages/{query}/{type}
| Type | Description |
|---|---|
block |
Messages in a specific block |
address |
Messages where address is source or destination |
source |
Messages from this address |
destination |
Messages to this address |
Files
On-chain file attachments.
GET /{COIN}/api/files/{query}/{type}
| Type | Description |
|---|---|
block |
Files in a specific block |
address |
Files uploaded by an address |
token |
Files associated with a specific token |
Response includes: file name, mime type, title, memo, and action metadata.
Callbacks
Token callback action records.
GET /{COIN}/api/callbacks/{query}/{type}
| Type | Description |
|---|---|
block |
Callbacks in a specific block |
address |
Callbacks by an address |
token |
Callbacks for a specific token |
Sleeps
Address or token pause records.
GET /{COIN}/api/sleeps/{query}/{type}
| Type | Description |
|---|---|
block |
Sleeps in a specific block |
address |
Sleeps by an address |
token |
Sleeps for a specific token |
Addresses
ADDRESS action records (address preference configuration).
GET /{COIN}/api/addresses/{query}/{type}
| Type | Description |
|---|---|
block |
Address actions in a specific block |
address |
Address actions by an address |
Batches
BATCH action records (multi-action transactions).
GET /{COIN}/api/batches/{query}/{type}
| Type | Description |
|---|---|
block |
Batches in a specific block |
address |
Batches by an address |
Links
Cross-chain link records.
GET /{COIN}/api/links/{query}/{type}
| Type | Description |
|---|---|
block |
Links in a specific block |
address |
Links by an address |
Lists
Address or tick list management records.
GET /{COIN}/api/lists/{query}/{type}
| Type | Description |
|---|---|
block |
Lists in a specific block |
address |
Lists by an address |
Fees
Fee records (XCHAIN gas token charges).
GET /{COIN}/api/fees/{query}/{type}
| Type | Description |
|---|---|
block |
Fees in a specific block |
address |
Fees charged to an address |
source |
Fees from this address |
destination |
Fees to this address |
token |
Fees for a specific token |
Mempool
Pending unconfirmed transaction data. Rows come from the decoder’s mempool_transactions table and are pre-validation: the decoder writes whatever it parses from a mempool transaction; the indexer may still reject it at confirmation time.
GET /{COIN}/api/mempool/{query}/{type}
| Type | Description |
|---|---|
address |
Mempool transactions where the source address or any decoded segment matches the query |
token |
Mempool transactions where any decoded segment matches the token ticker (case-insensitive) |
Response fields: tx_hash, source, action (decoded action name), data (full pipe-delimited action string). No destination field, destinations are embedded in the data string.
Market Endpoints
The explorer provides market data endpoints for the on-chain DEX (ORDER-based trading).
List Markets
Returns all active trading pairs, or all markets involving a specific token.
GET /{COIN}/api/markets
GET /{COIN}/api/markets/{tick}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick |
path (optional) | Filter to markets involving this token |
Response: Array of market objects with tick1, tick2, and pricing information.
Example:
# All markets
curl http://localhost:8080/BTC/api/markets
# Markets involving MYTOKEN
curl http://localhost:8080/BTC/api/markets/MYTOKEN
Get Market
Returns summary information for a specific trading pair.
GET /{COIN}/api/market/{tick1}/{tick2}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick1 |
path | First token in the pair |
tick2 |
path | Second token in the pair |
Response: Market summary with last price, volume, and price computed in both directions (tick1→tick2 and tick2→tick1).
Example:
curl http://localhost:8080/BTC/api/market/TOKENA/TOKENB
Get Market History
Returns trade history (filled orders) for a market pair. Optionally filter to a single address.
GET /{COIN}/api/market/{tick1}/{tick2}/history
GET /{COIN}/api/market/{tick1}/{tick2}/history/{address}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick1 |
path | First token in the pair |
tick2 |
path | Second token in the pair |
address |
path (optional) | Filter to trades by this address |
Pagination: Supported
Example:
# All trades for a pair
curl "http://localhost:8080/BTC/api/market/TOKENA/TOKENB/history?limit=50"
# Trades by a specific address
curl http://localhost:8080/BTC/api/market/TOKENA/TOKENB/history/bc1q...
Get Market Orders
Returns open orders for a market pair. Optionally filter to a single address.
GET /{COIN}/api/market/{tick1}/{tick2}/orders
GET /{COIN}/api/market/{tick1}/{tick2}/orders/{address}
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick1 |
path | First token in the pair |
tick2 |
path | Second token in the pair |
address |
path (optional) | Filter to orders by this address |
Pagination: Supported
Example:
curl http://localhost:8080/BTC/api/market/TOKENA/TOKENB/orders
Get Market Orderbook
Returns the aggregated order book for a market pair, split into bids and asks.
GET /{COIN}/api/market/{tick1}/{tick2}/orderbook
Parameters:
| Parameter | Location | Description |
|---|---|---|
tick1 |
path | First token in the pair |
tick2 |
path | Second token in the pair |
Response:
{
"data": {
"asks": [
{ "price": "0.50", "amount": "100" },
...
],
"bids": [
{ "price": "0.45", "amount": "200" },
...
]
}
}
Example:
curl http://localhost:8080/BTC/api/market/TOKENA/TOKENB/orderbook
Governance (VOTE) Endpoints
VOTE actions create token-weighted polls, cast ballots, and delegate voting power. These endpoints read the indexer’s polls, votes, and poll_results tables. The web UI exposes them at /{COIN}/polls and /{COIN}/votes under the Governance nav entry.
List Polls
Returns a paginated list of polls.
GET /{COIN}/api/polls/{query}/{type}
GET /{COIN}/api/polls
Type values:
| Type | Query interpretation | Description |
|---|---|---|
block |
Block index | Polls created in a specific block |
tick |
Token ticker | Polls weighted by a specific token |
status |
Status string | Polls with a specific poll status |
source |
Address | Polls created by a specific address |
When called without {query}/{type}, returns recent polls (paginated).
Pagination: Supported
Response fields: action, action_index, action_format, source, tick, end_block, options, max_selections, tally_mode, weight_mode, quorum, min_voters, question, poll_status, winning_option, total_weight, total_voters, quorum_met, min_voters_met, deposit_amount, callback_contract_index, callback_method, finalized_action_index, block_index, timestamp, tx_hash, tx_index, status.
Get Poll
Returns a single poll by its creating action index.
GET /{COIN}/api/poll/{actionIndex}
Get Poll Results
Returns the finalized per-option tallies for a poll (one row per option). Empty until the poll is finalized.
GET /{COIN}/api/poll/{actionIndex}/results
Response fields: poll_index, option_index, total_weight, voter_count, finalize_action_index, block_index, status.
List Votes
Returns a paginated list of ballots (one row per poll + voter + chosen option).
GET /{COIN}/api/votes/{query}/{type}
Type values:
| Type | Query interpretation | Description |
|---|---|---|
address |
Address | Ballots cast by a specific voter |
poll |
Poll action index | Ballots cast in a specific poll |
block |
Block index | Ballots cast in a specific block |
Pagination: Supported
Response fields: action, action_index, action_format, source, poll_index, choice, share, memo, block_index, timestamp, tx_hash, tx_index, status.
Example:
# Recent polls
curl "http://localhost:8080/BTC/api/polls?limit=10"
# Ballots in poll 1234
curl "http://localhost:8080/BTC/api/votes/1234/poll"
ANCHOR Endpoints
ANCHOR actions are the periodic on-chain checkpoints published to the DOGE chain by the validator federation. These endpoints read the anchor_actions table.
List Anchors
Returns a paginated list of ANCHOR checkpoint records.
GET /{COIN}/api/anchors/{query}/{type}
GET /{COIN}/api/anchors
Parameters:
| Parameter | Location | Description |
|---|---|---|
query |
path | Filter value (block index, chain code, network name, or status string) |
type |
path | Filter type (see below) |
Type values:
| Type | Query interpretation | Description |
|---|---|---|
block |
Block index | ANCHOR actions published in a specific block |
chain |
Chain code (e.g. BTC) |
ANCHOR actions for a specific coin chain |
network |
Network name (e.g. mainnet) |
ANCHOR actions for a specific network |
status |
Status string | ANCHOR actions with a specific status |
When called without {query}/{type}, returns recent ANCHOR actions (paginated).
Pagination: Supported
Response fields: action, action_index, action_format, version, chain, network, block_index, block_hash, ledger_hash, actions_hash, contract_hash, checkpoint_seq, snapshot_block, state_root, state_root_version, block_merkle_root, block_merkle_version, validator_signatures, timestamp, tx_hash, tx_index, status.
Example:
# Recent ANCHOR actions
curl "http://localhost:8080/RDOGE/api/anchors?limit=10"
# ANCHOR actions for BTC chain
curl "http://localhost:8080/RDOGE/api/anchors/BTC/chain"
# ANCHOR actions for a specific block
curl "http://localhost:8080/RDOGE/api/anchors/800000/block"
Checkpoint Verification Endpoints
The explorer exposes quorum-signed state checkpoints for light-client verification. Checkpoint data is read from the hub-mirrored state_checkpoints table.
On nodes that maintain their own checkpoint mirror (self-sync mode, see the Configuration page), these endpoints return HTTP 503 with code MIRROR_NOT_BOOTSTRAPPED until the mirror’s first snapshot download completes, and afterwards include two extra response fields: mirror_bootstrapped (always true once serving) and mirror_lag_seconds (how far the mirror trails the hub’s feed). Operators can additionally opt into HTTP 503 MIRROR_STALE on excessive lag. Nodes reading an externally-maintained hub schema return neither the extra fields nor the 503s.
Hub-Mirror Status
GET /{COIN}/api/hub-mirror/status
Reports the self-synced mirror’s state for this coin, or { "enabled": false } when the coin is served from an externally-maintained schema.
Response:
{
"enabled": true,
"target": { "host": "localhost", "name": "XChain_Hub_Mirror" },
"bootstrapDrained": true,
"streamWatermark": 1751804000,
"mirrorLagSeconds": 4
}
List Checkpoints
GET /{COIN}/api/checkpoints[?limit=N]
Returns the latest quorum-signed state checkpoints for the coin’s chain. Default limit is 10.
Response:
{
"checkpoints": [ ... ],
"count": 5
}
Verify Checkpoint
GET /{COIN}/api/checkpoint/{blockIndex}/verify
Re-verifies the checkpoint at blockIndex server-side and returns everything a client needs to verify it independently.
Response fields:
| Field | Description |
|---|---|
checkpoint |
Raw checkpoint row (block_index, block_hash, ledger_hash, actions_hash, …) |
canonical |
Canonical signing payload (pipe-delimited string over checkpoint fields) |
validators |
Array of validator pubkeys that signed this checkpoint |
quorum |
Required signature count for 2f+1 consensus |
valid_sigs |
Count of signatures that verified successfully |
verified |
true when valid_sigs >= quorum |
Returns HTTP 404 with { "error": "No checkpoint at this height", "code": "CHECKPOINT_NOT_FOUND" } when no checkpoint exists at the requested height.
Get Checkpoint Range
Returns a forward-ordered slice of quorum-signed checkpoints between two block heights. Intended for light-client forward-following: a client fetching the next N checkpoints after its last known one.
GET /{COIN}/api/checkpoints/range?from={fromBlock}&to={toBlock}
Query parameters:
| Parameter | Required | Description |
|---|---|---|
from |
Yes | Start block height (inclusive) |
to |
Yes | End block height (inclusive); must be >= from |
Response:
{
"checkpoints": [ { "chain": "BTC", "network": "mainnet", "block_index": 800000, ... }, ... ],
"count": 5
}
Each checkpoint object contains the same fields as the response from GET /{COIN}/api/checkpoints: chain, network, block_index, block_hash, ledger_hash, actions_hash, contract_hash, checkpoint_seq, snapshot_block, state_root, state_root_version, block_merkle_root, block_merkle_version, and validator_signatures (parsed as a JSON array).
The result is capped at 500 checkpoints per request. If the range spans more than 500 checkpoint heights, only the first 500 are returned.
Returns HTTP 400 when from or to are missing, non-integer, or to < from.
Example:
# Checkpoints from block 800000 to 801000
curl "http://localhost:8080/BTC/api/checkpoints/range?from=800000&to=801000"
SPV Light-Client Proof Endpoints
These endpoints build read-only Merkle proofs that a light client verifies locally against a quorum-signed checkpoint’s committed state_root or block_merkle_root. The server never asks the client to trust its word; all verification happens client-side.
Proof endpoints require a full indexer DB with the state_tree_nodes table (not replicated by xchain-sync). A thin replica returns HTTP 501 with code NO_STATE_TREE.
Balance Proof
Returns a Sparse Merkle Tree (SMT) inclusion (or non-inclusion) proof for an address/tick balance, bound to the nearest signed checkpoint at or above the requested height.
GET /{COIN}/api/proof/balance/{address}/{tick}[?height=N]
Parameters:
| Parameter | Location | Required | Description |
|---|---|---|---|
address |
path | Yes | Blockchain address to prove a balance for |
tick |
path | Yes | Token ticker |
height |
query | No | Minimum block height for the checkpoint; omit to use the latest checkpoint |
Response (success):
{
"proof": {
"chain": "BTC", "network": "mainnet", "height": 800000,
"address": "bc1q...", "tick": "MYTOKEN", "amount": "100.00000000",
"smt_proof": { "key": "...", "leaf_value": "...", "compressed": [...] },
"sub_root_path": { "index": 0, "siblings": [...] },
"balances_root": "...", "stakes_root": "...",
"state_root": "...", "state_root_version": 1
},
"checkpoint": { "block_index": 800000, "state_root": "...", "validator_signatures": [...], ... }
}
A non-held balance returns leaf_value: null (non-inclusion proof) and amount: "0".
Error codes:
| HTTP | Code | Meaning |
|---|---|---|
| 404 | NO_CHECKPOINT |
No signed checkpoint at or above the requested height |
| 409 | CHECKPOINT_PRE_COMMITMENT |
Checkpoint predates the state-commitment activation (no committed roots) |
| 501 | NO_STATE_TREE |
Server does not hold the state tree; point a full indexer DB at this instance |
| 500 | PROOF_STATE_ROOT_MISMATCH |
Server state tree disagrees with the signed checkpoint |
Action Inclusion Proof
Returns a fixed-Merkle-tree inclusion proof for an action row within its block, bound to the checkpoint that commits that block’s block_merkle_root.
GET /{COIN}/api/proof/action/{actionIndex}
Parameters:
| Parameter | Location | Description |
|---|---|---|
actionIndex |
path | The action index number |
Response (success):
{
"proof": {
"chain": "BTC", "network": "mainnet", "height": 800000, "action_index": 42,
"tx_index": 5, "action": "SEND",
"leaf": "...",
"merkle_proof": { "index": 3, "siblings": [...] },
"block_merkle_root": "...", "block_merkle_version": 1
},
"checkpoint": { "block_index": 800000, "block_merkle_root": "...", "validator_signatures": [...], ... }
}
Error codes:
| HTTP | Code | Meaning |
|---|---|---|
| 404 | ACTION_NOT_FOUND |
No action with this index on this server |
| 409 | ACTION_BLOCK_NOT_CHECKPOINTED |
The action’s block has no signed checkpoint with a block_merkle_root |
| 409 | CHECKPOINT_PRE_COMMITMENT |
Checkpoint predates the state-commitment activation |
| 501 | NO_STATE_TREE |
Server does not hold the state tree |
| 500 | PROOF_BLOCK_MERKLE_MISMATCH |
Server block tree disagrees with the signed checkpoint |
Validator-Set Proof
Returns SMT proofs for each validator’s stake weight, bound to the BTC checkpoint at the given snapshot height. BTC-only (the stakes_root is BTC-anchored per protocol spec).
GET /BTC/api/proof/validator-set?height={snapshotBlock}[&capabilities=oracle_publish,cross_chain]
Query parameters:
| Parameter | Required | Description |
|---|---|---|
height |
Yes | BTC snapshot block height (must match a BTC checkpoint’s block_index) |
capabilities |
No | Comma-separated capability names to prove; defaults to oracle_publish,cross_chain |
Notes:
- Requires
INDEXER_API_URLto be configured (to fetch live stake weights). Returns HTTP 501 with codeINDEXER_NOT_CONFIGUREDotherwise. - Returns HTTP 400 with code
STAKES_BTC_ONLYwhen called on a non-BTC coin prefix.
Error codes:
| HTTP | Code | Meaning |
|---|---|---|
| 400 | STAKES_BTC_ONLY |
Must call on a BTC coin prefix |
| 409 | SNAPSHOT_NOT_YET_CHECKPOINTED |
No BTC checkpoint at this height yet |
| 409 | CHECKPOINT_PRE_COMMITMENT |
Checkpoint predates state-commitment activation |
| 501 | NO_STATE_TREE |
Server does not hold the state tree |
| 501 | INDEXER_NOT_CONFIGURED |
No indexer API URL configured for this coin/network |
| 502 | INDEXER_UNAVAILABLE |
Indexer API did not respond |
Contract-State Proof
GET /{COIN}/api/proof/contract-state/{contractIndex}/{key}
Status: Not yet implemented. The contract state root is committed as EMPTY in state_root_version 1 (spec D1). This endpoint returns HTTP 501 with code UNSUPPORTED_VERSION until a future protocol version activates contract-state commitments.
Additional REST Endpoints
The following endpoints are registered and active. Detailed documentation is in the linked spec files.
Native-Coin Fee (Explorer Proxy)
GET /{COIN}/api/feequote?action=ISSUE¶ms=0|NEWTICK&source=...&feeOutputSats=...
GET /{COIN}/api/feeschedule
GET /{COIN}/api/preflight?action=SEND¶ms=...&source=...&feeMode=xchain|native
GET /{COIN}/api/oraclefeequote?oracleAddress=...&giveTick=...&fiatCode=USD&giveEscrow=1000
Proxied to the colocated indexer’s feequote / feeschedule / preflight / oraclefeequote JSON-RPC. Returns 503 when no INDEXER_API_URL is configured. See CONFIGURATION.md for INDEXER_API_URL_<COIN>_<NETWORK>.
preflight answers “would the indexer accept this action?” independently of native-fee support, returning { supported, valid, status, error, guardInert, feeExempt, denied, xchainFee, feeMode, feeTick, feeTokenBalance, feeAffordable, blockIndex, blockTime }. xchainFee is the protocol fee the action would owe as an XCHAIN-denominated decimal string, taken from the same dry-run that produced the verdict, so a confirm screen can disclose the fee without a second call to feequote (it is null when the run staged no fee record, and absent when no verdict was produced). Sizing a native-coin fee output still needs feequote, which prices that fee against the oracle.
The dry-run settles that fee the way feeMode says the real transaction will, because the two modes give different answers: xchain debits the payer’s XCHAIN balance (so a payer who cannot cover the fee is told invalid here, before signing anything), while native pays a coin output to the fee destination and never touches that balance. Omit feeMode to get the chain’s own default, which is native on LTC/DOGE (they have no XCHAIN fee lane) and the XCHAIN debit on BTC. feeTokenBalance reports the payer’s balance of feeTick at the quoted height, and feeAffordable says whether it covers xchainFee; feeAffordable is null in native mode, since that balance is not what pays.
oraclefeequote sizes the up-front native-coin output a Mode B dispenser owes the oracle operator it names in ORACLE_ADDRESS, returning { valid, error, oracleAddress, blockTime, requiredFeeNative, requiredFeeSats, belowDust, note }. The indexer computes it from the same code path it validates with, so an output sized from the quote is accepted on chain.
Price and Price Snapshots
GET /{COIN}/api/prices/{query}/{type}
GET /{COIN}/api/price_snapshots/{query}/{type}
USD-denominated prices and the raw PRICE v0 oracle snapshots (PBFT-signed) behind them. prices type values: block, address, source, token. price_snapshots type values: pair, round, status.
Cross-Chain Matches and Settlements
GET /{COIN}/api/cross_chain_matches/{query}/{type}
GET /{COIN}/api/cross_chain_settlements/{query}/{type}
Cross-chain DEX match and settlement records. type values for matches: match, block, status; for settlements: match, block.
VM / Contract Endpoints
GET /{COIN}/api/contracts[/{query}/{type}]
GET /{COIN}/api/contract/{TICK}
GET /{COIN}/api/contract/{TICK}/state[/{type}]
GET /{COIN}/api/contract/{TICK}/balance[/{type}]
GET /{COIN}/api/executions[/{query}/{type}]
GET /{COIN}/api/execution/{query}
GET /{COIN}/api/deploy_chunks
Smart contract (DEPLOY / CALL) data. contracts and executions type values: block, address, contract (or source for contracts). Single-contract detail, sandbox state, and per-contract token balance via the contract/* routes. deploy_chunks lists chunked upload records for large contracts.
Deposit and Withdrawal Endpoints
GET /{COIN}/api/deposits/{query}/{type}
GET /{COIN}/api/withdrawals/{query}/{type}
Contract deposit and withdrawal records. type values: block, address, source, contract.
Staking and Validator Endpoints
GET /{COIN}/api/stakes[/{query}/{type}]
GET /{COIN}/api/validators
GET /{COIN}/api/delegations/{query}/{type}
GET /{COIN}/api/delegation_revocations[/{query}/{type}]
GET /{COIN}/api/rewards/{query}/{type}
GET /{COIN}/api/collects[/{query}/{type}]
GET /{COIN}/api/full_node_verifications[/{query}/{type}]
GET /{COIN}/api/contract_stakes[/{query}/{type}]
GET /{COIN}/api/contract_unstakes[/{query}/{type}]
GET /{COIN}/api/contract_delegations[/{query}/{type}]
GET /{COIN}/api/slash_events[/{query}/{type}]
Validator federation data. stakes and delegations type values: block, address, source. rewards type values: address, source. delegation_revocations (DELEGATE v2/v3 signing-key revocations) and collects (COLLECT validator reward claims) type values: block, address, source. full_node_verifications type values: block, epoch, pubkey, address. Contract-targeted staking (contract_stakes, contract_unstakes, contract_delegations) and slash_events support types: block, address, contract.
Hub Federation and Governance Endpoints
GET /{COIN}/api/validator_capabilities[/{query}/{type}]
GET /{COIN}/api/governance_proposals[/{query}/{type}]
GET /{COIN}/api/governance_votes[/{query}/{type}]
GET /{COIN}/api/capability_slash_events[/{query}/{type}]
GET /{COIN}/api/oracle_prices[/{query}/{type}]
Hub-only federation state read from the co-located hub DB (tables that have no on-chain action; the validator registry itself is surfaced on-chain via /{COIN}/api/validators). validator_capabilities type values: capability, pubkey. governance_proposals type values: status, parameter, proposal. governance_votes type values: proposal, voter. capability_slash_events (SLASH wire actions) type values: block, capability, pubkey, address. oracle_prices (user-published PRICE v1 rows, hub-mirrored) type values: token, address.
Attestation Endpoints
GET /{COIN}/api/attestations[/{query}/{type}]
ATTEST v0 requests and v1 responses from the attests table. type values: block, address, contract.
Cross-Chain Call Endpoints
GET /{COIN}/api/xcalls[/{query}/{type}]
GET /{COIN}/api/xcall/{callId}
VM-emitted cross-chain call records (XCALL). xcalls type values: block, contract, status. Single-call lifecycle lookup via xcall/{callId}.
Controller-Bound Token Endpoints
GET /{COIN}/api/controllers
Controller bind/unbind event stream for controller-bound tokens. See protocol/Controller_Bound_Tokens.md.
Project Registry
GET /{COIN}/api/project/{TICK}
Returns the current roster for a project token (tick). See protocol/Project_Registry.md.
Public Key Lookup
GET /{COIN}/api/pubkey/{address}
Returns the on-chain-observed public key for address, or null if not yet seen.
Token Search Types
The /{COIN}/api/tokens/{query}/{type} endpoint accepts the additional type value nft, which restricts results to NFT-enabled tokens. All other type values (block, address, token, subtoken) are unchanged.
File Raw Endpoint
GET /{COIN}/api/file/{actionIndex}/raw
Returns the raw bytes for a FILE action.
- Gated file: returns the AES-256-GCM ciphertext (12-byte nonce || ciphertext || 16-byte GCM tag) as
application/octet-stream. Holders decrypt client-side after receiving the symmetric key via an ECIES MESSAGE. - Non-gated file: returns the stored bytes from the colocated decoder DB, served inline for safe media MIME types (image, audio, video, PDF, JSON). Unsafe types (HTML, SVG, XML, scripts, unknown) are forced to download as
application/octet-stream. This is the resolution target for TISdata_refentries using theaction:<index>scheme, enabling NFT artwork to render directly in the browser.
Returns HTTP 404 when the actionIndex is unknown or the decoder DB is unreachable. Returns HTTP 400 for a non-numeric actionIndex.
Relay and Icon Routes
GET /relay?url={url}
GET /icon/{path}
/relay fetches a remote JSON or PNG resource on behalf of the browser (a same-origin CORS proxy for TIS metadata and token icons hosted off-chain). Pass the target URL as the url query parameter. Private/loopback/metadata addresses are blocked. /icon/{path} serves cached token icon images. Both are non-coin-prefixed and registered at the root level.
Machine-Readable Spec
GET /openapi.json
OpenAPI 3.1 specification for all explorer REST endpoints. Regenerated by docs/openapi.build.js; kept in sync with the route tables by test/unit/openapi-coverage.test.js.
DataTables Explorer Endpoints
In addition to the REST API, the explorer provides a parallel set of endpoints designed for the web UI’s jQuery DataTables integration. These endpoints use cursor-based pagination and return arrays instead of objects for compact transmission.
URL Pattern
GET /{COIN}/explorer/{method}/{query}/{type}
Response Format
{
"recordsTotal": 42,
"recordsFiltered": 42,
"data": [
[1, "field1|field2|field3", 100],
...
],
"runtime": "12ms"
}
Data arrays use pipe-delimited strings for multi-value fields.
Pagination Parameters
| Parameter | Type | Description |
|---|---|---|
action |
string | Paging direction: first, last, next, prev |
offset |
number | Current cursor position (action_index or block_index) |
start |
number | Starting record offset |
length |
number | Records per page (max 100) |
Available Explorer Endpoints
All REST API action endpoints have a corresponding Explorer endpoint:
| Explorer Endpoint | Corresponding API Endpoint |
|---|---|
/{COIN}/explorer/sends/{query}/{type} |
/{COIN}/api/sends/{query}/{type} |
/{COIN}/explorer/issues/{query}/{type} |
/{COIN}/api/issues/{query}/{type} |
/{COIN}/explorer/mints/{query}/{type} |
/{COIN}/api/mints/{query}/{type} |
/{COIN}/explorer/destroys/{query}/{type} |
/{COIN}/api/destroys/{query}/{type} |
/{COIN}/explorer/orders/{query}/{type} |
/{COIN}/api/orders/{query}/{type} |
/{COIN}/explorer/dispensers/{query}/{type} |
/{COIN}/api/dispensers/{query}/{type} |
/{COIN}/explorer/dispenses/{query}/{type} |
/{COIN}/api/dispenses/{query}/{type} |
/{COIN}/explorer/swaps/{query}/{type} |
/{COIN}/api/swaps/{query}/{type} |
/{COIN}/explorer/bet_feeds/{query}/{type} |
/{COIN}/api/bet_feeds/{query}/{type} |
/{COIN}/explorer/bets/{query}/{type} |
/{COIN}/api/bets/{query}/{type} |
/{COIN}/explorer/sweeps/{query}/{type} |
/{COIN}/api/sweeps/{query}/{type} |
/{COIN}/explorer/dividends/{query}/{type} |
/{COIN}/api/dividends/{query}/{type} |
/{COIN}/explorer/airdrops/{query}/{type} |
/{COIN}/api/airdrops/{query}/{type} |
/{COIN}/explorer/broadcasts/{query}/{type} |
/{COIN}/api/broadcasts/{query}/{type} |
/{COIN}/explorer/messages/{query}/{type} |
/{COIN}/api/messages/{query}/{type} |
/{COIN}/explorer/files/{query}/{type} |
/{COIN}/api/files/{query}/{type} |
/{COIN}/explorer/callbacks/{query}/{type} |
/{COIN}/api/callbacks/{query}/{type} |
/{COIN}/explorer/sleeps/{query}/{type} |
/{COIN}/api/sleeps/{query}/{type} |
/{COIN}/explorer/addresses/{query}/{type} |
/{COIN}/api/addresses/{query}/{type} |
/{COIN}/explorer/batches/{query}/{type} |
/{COIN}/api/batches/{query}/{type} |
/{COIN}/explorer/links/{query}/{type} |
/{COIN}/api/links/{query}/{type} |
/{COIN}/explorer/lists/{query}/{type} |
/{COIN}/api/lists/{query}/{type} |
/{COIN}/explorer/fees/{query}/{type} |
/{COIN}/api/fees/{query}/{type} |
/{COIN}/explorer/credits/{query}/{type} |
/{COIN}/api/credits/{query}/{type} |
/{COIN}/explorer/debits/{query}/{type} |
/{COIN}/api/debits/{query}/{type} |
/{COIN}/explorer/escrows/{query}/{type} |
/{COIN}/api/escrows/{query}/{type} |
/{COIN}/explorer/tokens/{query}/{type} |
/{COIN}/api/tokens/{query}/{type} |
/{COIN}/explorer/history/{query}/{type} |
/{COIN}/api/history/{query}/{type} |
/{COIN}/explorer/polls/{query}/{type} |
/{COIN}/api/polls/{query}/{type} |
/{COIN}/explorer/votes/{query}/{type} |
/{COIN}/api/votes/{query}/{type} |
/{COIN}/explorer/governance_votes/{query}/{type} |
/{COIN}/api/governance_votes/{query}/{type} |
Additional Explorer-only endpoints:
| Endpoint | Description |
|---|---|
/{COIN}/explorer/blocks/{query} |
Block listing with action counts |
/{COIN}/explorer/holders/{tick} |
Token holder list |
/{COIN}/explorer/balances/{address}/{type} |
Address balances |
/{COIN}/explorer/markets/{query} |
Market listing |
/{COIN}/explorer/search/{query}/{type} |
Cross-entity search |
/{COIN}/explorer/market/{tick1}/{tick2}/history |
Market trade history |
/{COIN}/explorer/market/{tick1}/{tick2}/history/{address} |
Market trade history by address |
Search
The search endpoint supports multi-entity searching:
GET /{COIN}/explorer/search/{query}/{type}
| Type | Description |
|---|---|
address |
Search for addresses |
broadcast |
Search broadcasts |
token |
Search tokens by ticker |
transaction |
Search by transaction hash |
JSON-RPC 2.0 Interface
The explorer also exposes a JSON-RPC 2.0 endpoint for programmatic access:
POST / (root path)
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "ping",
"params": {}
}
Available Methods
| Method | Description |
|---|---|
ping |
Health check: returns a pong response |
Note: The JSON-RPC interface currently exposes only the
pingmethod. The REST API is the primary interface for data queries.
Complete Endpoint Quick Reference
Single-Item Endpoints
| Endpoint | Description |
|---|---|
GET /{COIN}/api/action/{index} |
Action details by action_index |
GET /{COIN}/api/address/{address} |
Address summary |
GET /{COIN}/api/balances/{address} |
All token balances for an address |
GET /{COIN}/api/block/{index} |
Block summary by height |
GET /{COIN}/api/holders/{tick} |
All holders of a token |
GET /{COIN}/api/token/{tick} |
Token metadata and supply |
GET /{COIN}/api/contract/{tick} |
Contract metadata |
GET /{COIN}/api/contract/{tick}/state |
Contract sandbox state |
GET /{COIN}/api/contract/{tick}/balance |
Contract token balances |
GET /{COIN}/api/execution/{query} |
Single execution record |
GET /{COIN}/api/xcall/{callId} |
Single cross-chain call lifecycle |
GET /{COIN}/api/project/{tick} |
Project registry roster for a token |
GET /{COIN}/api/poll/{actionIndex} |
Poll details by creating action index |
GET /{COIN}/api/poll/{actionIndex}/results |
Finalized per-option poll tallies |
GET /{COIN}/api/pubkey/{address} |
On-chain public key for an address |
GET /{COIN}/api/status |
Platform status |
GET /{COIN}/api/network |
Network statistics |
GET /{COIN}/api/validators |
Validator federation list |
GET /{COIN}/api/controllers |
Controller-bound token event stream |
GET /{COIN}/api/deploy_chunks |
Chunked DEPLOY upload records |
GET /{COIN}/api/actions |
All actions (filterable by block, txid, tick) |
GET /{COIN}/api/checkpoints |
Latest quorum-signed state checkpoints |
GET /{COIN}/api/checkpoints/range |
Slice of checkpoints between two heights (light-client sync) |
GET /{COIN}/api/checkpoint/{height}/verify |
Verify a checkpoint at a given height |
GET /{COIN}/api/proof/balance/{address}/{tick} |
SMT balance inclusion/non-inclusion proof |
GET /{COIN}/api/proof/action/{actionIndex} |
Block-content inclusion proof for an action |
GET /BTC/api/proof/validator-set |
Stake-weighted validator-set proof (BTC-only) |
GET /{COIN}/api/proof/contract-state/{idx}/{key} |
Contract-state proof (reserved; HTTP 501 in v1) |
GET /{COIN}/api/feequote |
Native-coin fee pre-flight quote |
GET /{COIN}/api/feeschedule |
Native-coin fee schedule |
GET /{COIN}/api/preflight |
Validity-first action pre-flight, independent of fee support |
GET /{COIN}/api/oraclefeequote |
Oracle usage-fee quote for a Mode B dispenser |
GET /{COIN}/api/file/{actionIndex}/raw |
Raw FILE action bytes (or gated ciphertext) |
GET /openapi.json |
OpenAPI 3.1 machine-readable spec |
GET /relay?url={url} |
Off-chain resource proxy (JSON/PNG, SSRF-guarded) |
GET /icon/{path} |
Token icon image |
Market Endpoints
| Endpoint | Description |
|---|---|
GET /{COIN}/api/markets |
All active markets |
GET /{COIN}/api/markets/{tick} |
Markets for a token |
GET /{COIN}/api/market/{t1}/{t2} |
Market pair summary |
GET /{COIN}/api/market/{t1}/{t2}/history |
Trade history |
GET /{COIN}/api/market/{t1}/{t2}/history/{addr} |
Trade history by address |
GET /{COIN}/api/market/{t1}/{t2}/orders |
Open orders |
GET /{COIN}/api/market/{t1}/{t2}/orders/{addr} |
Open orders by address |
GET /{COIN}/api/market/{t1}/{t2}/orderbook |
Aggregated order book |
List Endpoints (all support /{query}/{type} and pagination)
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/sends/... |
block, address, source, destination, token |
GET /{COIN}/api/issues/... |
block, address, token |
GET /{COIN}/api/mints/... |
block, address, source, destination, token |
GET /{COIN}/api/destroys/... |
block, address, token |
GET /{COIN}/api/orders/... |
block, address, token |
GET /{COIN}/api/order_matches/... |
block |
GET /{COIN}/api/order_cancels/... |
block, address |
GET /{COIN}/api/order_edits/... |
block, address |
GET /{COIN}/api/order_expires/... |
block, address |
GET /{COIN}/api/coinpays/... |
block, address |
GET /{COIN}/api/coinpay_expires/... |
block, address |
GET /{COIN}/api/coinpay_obligations/... |
block, address |
GET /{COIN}/api/dispensers/... |
block, address, source, destination, token |
GET /{COIN}/api/dispenses/... |
block, address, source, destination, token |
GET /{COIN}/api/dispenser_cancels/... |
block, address |
GET /{COIN}/api/dispenser_closes/... |
block, address |
GET /{COIN}/api/dispenser_edits/... |
block, address |
GET /{COIN}/api/dispenser_expires/... |
block, address |
GET /{COIN}/api/swaps/... |
block, address, token |
GET /{COIN}/api/swap_matches/... |
block |
GET /{COIN}/api/swap_cancels/... |
block, address |
GET /{COIN}/api/swap_edits/... |
block, address |
GET /{COIN}/api/swap_expires/... |
block, address |
GET /{COIN}/api/bet_feeds/... |
block, address, source, token, status |
GET /{COIN}/api/bets/... |
block, address, feed, token, status |
GET /{COIN}/api/sweeps/... |
block, address, source, destination |
GET /{COIN}/api/dividends/... |
block, address, token |
GET /{COIN}/api/airdrops/... |
block, address, token |
GET /{COIN}/api/broadcasts/... |
block, address |
GET /{COIN}/api/messages/... |
block, address, source, destination |
GET /{COIN}/api/files/... |
block, address, token |
GET /{COIN}/api/callbacks/... |
block, address, token |
GET /{COIN}/api/sleeps/... |
block, address, token |
GET /{COIN}/api/addresses/... |
block, address |
GET /{COIN}/api/batches/... |
block, address |
GET /{COIN}/api/links/... |
block, address |
GET /{COIN}/api/lists/... |
block, address |
GET /{COIN}/api/fees/... |
block, address, source, destination, token |
GET /{COIN}/api/credits/... |
block, address |
GET /{COIN}/api/debits/... |
block, address |
GET /{COIN}/api/escrows/... |
block, address |
GET /{COIN}/api/history/... |
block, address, token, recent |
GET /{COIN}/api/tokens/... |
block, address, token, subtoken |
GET /{COIN}/api/transaction/... |
tx_hash, tx_index |
GET /{COIN}/api/mempool/... |
address, token |
VM / Contract List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/contracts/... |
block, address, source |
GET /{COIN}/api/executions/... |
block, address, contract |
GET /{COIN}/api/deposits/... |
block, address, source, contract |
GET /{COIN}/api/withdrawals/... |
block, address, source, contract |
Staking and Validator List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/stakes/... |
block, address, source |
GET /{COIN}/api/delegations/... |
block, address, source |
GET /{COIN}/api/delegation_revocations/... |
block, address, source |
GET /{COIN}/api/rewards/... |
address, source |
GET /{COIN}/api/collects/... |
block, address, source |
GET /{COIN}/api/full_node_verifications/... |
block, epoch, pubkey, address |
GET /{COIN}/api/contract_stakes/... |
block, address, contract |
GET /{COIN}/api/contract_unstakes/... |
block, address, contract |
GET /{COIN}/api/contract_delegations/... |
block, address, contract |
GET /{COIN}/api/slash_events/... |
block, address, contract |
ANCHOR and Attestation and Cross-Chain Call List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/anchors/... |
block, chain, network, status |
GET /{COIN}/api/attestations/... |
block, address, contract |
GET /{COIN}/api/xcalls/... |
block, contract, status |
Price and Oracle List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/prices/... |
block, address, source, token |
GET /{COIN}/api/price_snapshots/... |
pair, round, status |
Cross-Chain DEX List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/cross_chain_matches/... |
match, block, status |
GET /{COIN}/api/cross_chain_settlements/... |
match, block |
Governance List Endpoints
| Endpoint | Supported Types |
|---|---|
GET /{COIN}/api/polls/... |
block, tick, status, source |
GET /{COIN}/api/votes/... |
address, poll, block |
GET /{COIN}/api/validator_capabilities/... |
capability, pubkey |
GET /{COIN}/api/governance_proposals/... |
status, parameter, proposal |
GET /{COIN}/api/governance_votes/... |
proposal, voter |
GET /{COIN}/api/capability_slash_events/... |
block, capability, pubkey, address |
GET /{COIN}/api/oracle_prices/... |
token, address |
Copyright © 2025–2026 Dankest, LLC
Based on XChain Platform by Dankest, LLC – https://dankest.llc
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later) with a commercial license available for proprietary use.
You may use, modify, and distribute this material under the terms of the License. See LICENSE and NOTICE for full terms. See the licensing overview.