This document describes all endpoints and details related to BRC20 token balance, TRANSFER inscriptions, and transfer mechanism in UniSat OpenAPI.
BRC20 uses an account-based model rather than a simple UTXO model. Transfers are not performed by directly moving UTXOs, but by minting a TRANSFER
inscription and then sending this TRANSFER
inscription. Once a TRANSFER
inscription is spent (transferred), it no longer holds value.
Important: You cannot simply determine whether a BRC20 token has been received by checking if a
TRANSFER
inscription has arrived at an address. After the first transfer, theTRANSFER
inscription becomes invalid for further transfers, and the BRC20 balance is updated in the account model.
/v1/indexer/address/{address}/brc20/summary
: Get BRC20 balances (transferable and available)./v1/indexer/address/{address}/brc20/{ticker}/transferable-inscriptions
: Get the current valid TRANSFER
inscriptions for a specific ticker at an address. These are the inscriptions that can be used to send BRC20 tokens.transferableBalance
: The portion of BRC20 balance currently locked in valid TRANSFER
inscriptions. These can be used for sending BRC20 tokens. Once a TRANSFER
inscription is spent, its value is removed from transferableBalance
.availableBalance
: The portion of BRC20 balance that can be inscribed as a new TRANSFER
inscription. When a TRANSFER
inscription is spent, the corresponding BRC20 amount is credited to the recipient’s availableBalance
.overallBalance
: Sum of both.TRANSFER
inscription, which can be queried via /v1/indexer/address/{address}/brc20/{ticker}/transferable-inscriptions
.TRANSFER
inscription is spent, the BRC20 amount is no longer in transferableBalance
and is credited to the recipient’s availableBalance
.Q: How do I get my BRC20 token balances?
A: Use /v1/indexer/address/{address}/brc20/summary
to get both transferable and available balances.
Q: What is the difference between transferable and available balance?
A: transferableBalance
is the amount currently locked in valid TRANSFER
inscriptions and can be sent. Once a TRANSFER
inscription is spent, its value is removed from transferableBalance
and credited to the recipient’s availableBalance
, which can then be inscribed as a new TRANSFER
inscription for further transfers.
Q: How do I get the current valid TRANSFER inscriptions for sending BRC20?
A: Use /v1/indexer/address/{address}/brc20/{ticker}/transferable-inscriptions
to get all valid TRANSFER
inscriptions for a specific ticker at an address.
Q: Can I determine a BRC20 deposit by checking if a TRANSFER inscription is received?
A: No. After the first transfer, the TRANSFER
inscription is no longer valid, and the BRC20 balance is managed by the account model. Always use the recommended event history endpoints and balance queries for accurate results.
To accurately verify whether a BRC20 deposit (recharge) is successful, do not rely solely on checking if a BRC20 inscription has been received by an address—this can lead to false positives. Instead, use the following recommended methods based on event history:
/v1/indexer/address/{address}/brc20/history
to get all BRC20 events for the address./v1/indexer/address/{address}/brc20/{ticker}/history
.type == "receive"
valid == true
currentHeight - height > 3
(on Fractal, it is recommended to use > 60
for more security)/v1/indexer/brc20/history-by-height/{height}?start={start}&limit={limit}
to get all BRC20 events at a specific block height./v1/indexer/brc20/{ticker}/history?height={height}&start={start}&limit={limit}
.type == "transfer"
valid == true
currentHeight - height > 3
(on Fractal, it is recommended to use > 60
for more security)currentHeight - height > 3
or > 60
on Fractal) is important to ensure the transaction is deeply confirmed and not at risk of reorg./v1/indexer/brc20/bestheight
to get the current height up to which the API has analyzed BRC20 data.