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
TRANSFERinscription has arrived at an address. After the first transfer, theTRANSFERinscription 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 == truecurrentHeight - 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 == truecurrentHeight - 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.