Overview
The Utexo Mint API is a network-agnostic REST interface for cross-network asset transfers. Clients must discover the networks currently connected to an environment withGET /networks instead of hardcoding network availability.
USDT0 settles natively on Arbitrum, which acts as the hub; Ethereum, Polygon PoS, Plasma and Tron reach that hub through USDT0 / LayerZero and the Utexo entrypoint contracts.
Base URL (staging):
https://transfer.gateway.stage.utexo.com/api/v0All paths in this reference are relative to the base URL. Contact the Utexo team for production endpoint access and for an operator API key.Interactive API docs: https://transfer.gateway.stage.utexo.com/api/v0/docs//mint/op-id, /lock/{opId}/status and /unlock) need an operator API key (see Authentication).
Transfer Flows
The Mint moves USDT in two directions: lock and mint (USDT0 on EVM → USDT on Bitcoin) and burn and unlock (USDT on Bitcoin → USDT0 on EVM).RGB network ID: take the RGB-side network from
GET /networks. On the current environment it is the UTEXO network (ID 96). The RGB wallet must use an rgb-lib version that supports the BFA asset schema, for example RGB Lightning Node v0.15.0-beta.3 or later.Lock and mint: EVM → RGB
1
Discover networks and tokens
GET /networks — list the connected networks and take the id of the source network and of the RGB network.GET /networks/{network-id}/supported-tokens — take the token id on each side. USDT is the only token bridged today.2
Estimate the transfer
GET /transfers/estimate/{sender-network}/{recipient-network}/{sender-token-id}/{recipient-token-id}/{amount} — preview fees and the amount the recipient receives.3
Create an RGB invoice
The recipient’s RGB wallet creates an invoice for the USDT asset.
4
Prepare the mint
POST /mint/op-id (operator key) — submit the invoice, the amount and the source network. The response contains the opId, the settlementData to pass to the deposit, and ttlSeconds. If the source network uses an entrypoint contract, the response also contains an entrypoint object.5
Lock USDT0
Before
ttlSeconds runs out, the user calls fundsIn() on the Arbitrum bridge contract and passes settlementData verbatim as the settlementData argument. On a network that uses an entrypoint contract, the user calls that contract with the returned depositParams instead. This step happens client-side; the API does not broadcast the transaction.6
Track the mint
GET /lock/{opId}/status (operator key) — poll until the status is completed or expired.Burn and unlock: RGB → EVM
1
Check the release capacity
GET /unlock/capacity/{srcNetworkId}/{networkId}/{tokenId} — read available. A burn cannot be undone, so do not burn more than available.2
Burn USDT on Bitcoin
Burn the amount in the RGB wallet and name the EVM recipient. The burn recipient is 32 bytes: 12 zero bytes followed by the 20-byte EVM address. With RGB Lightning Node, call
POST /burn with burn_recipient, then get the burn consignment with POST /getconsignment (asset ID and the burn txid). It returns the consignment as hex; convert it to base64 for the next step.3
Submit the burn consignment
POST /unlock (operator key) — send the base64-encoded consignment. You can submit it before the burn has its Bitcoin confirmations: until it does, the API returns 409 with code 6, 7 or 8, and you retry the same request later.4
Confirm the release
The response contains the
evmTxHash of the submitted release and the recipient read from the burn. The release confirms on the EVM network asynchronously.Authentication
Operator API key
POST /mint/op-id, GET /lock/{opId}/status and POST /unlock need the operator API key in the X-API-Key header. A missing or invalid key returns 401. Keep the key on a trusted backend: do not embed it in a browser app or an untrusted wallet. Contact the Utexo team to get a key.
Signature authentication
The other endpoints need no API key. Three of them authenticate the caller with a signature, differing only in where the signature travels — in the path forGET /transfers/history/{signature-hex}/{pub-key-hex}, in the request body for POST /transfers/verify-bridge-in and POST /transfers/submit-transaction:
Signing procedure. The signed message is the constant string
Bridge Authentication Proof. Verification depends on the network type:
- EVM and Tron — the public key is recovered from the signature, converted to an address, and compared against
publicKey. - RGB and RGB Lightning — authentication is handled inside those networks; no signature check happens at this layer.
401 response indicates an invalid authentication signature. A 403 response indicates the derived sender address does not match the pre-registered transfer.
Endpoints
Networks
GET /networks — List Connected Networks
Returns all connected networks. Optionally filter by token, source network, or name.
Query Parameters
Response
200 — Array of Network objects
GET /networks/{network-id}/supported-tokens — List Supported Tokens
Returns a paginated list of tokens supported on a given network. If token-id is provided as a query parameter, returns a single Token object instead of a paginated response.
Path Parameters
Query Parameters
Response
200 — SupportedTokensResponse
GET /networks/{network-id}/balance/{token-id}/{user-address} — Get User Token Balance
Returns the token balance for a specific user address on a given network.
Path Parameters
Response
200 — string
Balance as a human-readable decimal string in token units (e.g., "100.50").
Mint and burn
POST /mint/op-id — Prepare a Mint
Prepares the RGB side of a lock-and-mint transfer and returns the data the deposit must carry. It does not move tokens or submit the EVM transaction. Requires the operator API key.
Request Body
Response
200
GET /lock/{opId}/status — Get Mint Status
Returns the state of a prepared mint. Poll it after the deposit is submitted. Requires the operator API key.
Response 200
evmTxHash is the detected deposit transaction on the EVM network. It is omitted until the deposit is detected.
GET /unlock/capacity/{srcNetworkId}/{networkId}/{tokenId} — Get Release Capacity
Returns how much can be released right now for a burn. Call it before you burn. No authentication.
Path Parameters
Response
200
POST /unlock — Release After a Burn
Validates a burn consignment, gets the release signatures and submits the EVM release. The amount and the recipient are read from the burn itself; the request cannot change them. Requires the operator API key.
Request Body
Response
200
Transfers
The pre-registration endpoints in this group (
bridge-in-signature, verify-bridge-in, submit-transaction and invoice) belong to the earlier transfer flow. Transfers between USDT0 and USDT on Bitcoin use the mint and burn endpoints.GET /transfers/estimate/{sender-network}/{recipient-network}/{sender-token-id}/{recipient-token-id}/{amount} — Estimate Transfer Fees
Returns a fee and confirmation time estimate for a proposed transfer. Call it before you prepare the mint to show the user a cost preview.
Path Parameters
Query Parameters
Response
200 — Estimation
POST /transfers/bridge-in-signature — Pre-Register Transfer
Pre-registers a transfer and returns the data needed for the user to initiate the on-chain action.
- EVM → RGB or RGB Lightning: Returns
transferId, feeestimation, and an emptysignaturefield (0x). The user then callsfundsIn()on the EVM bridge contract. - RGB or RGB Lightning → EVM: Returns the invoice string for the selected RGB-side network in the
signaturefield. The user pays that RGB or Lightning invoice.
BridgeInSignatureRequest
Response
200 — BridgeInSignatureData
POST /transfers/verify-bridge-in — Confirm Bridge-In Transaction
Notifies the bridge that the user has completed the on-chain or off-chain send action. Must be called after:
- The EVM
fundsIn()transaction is broadcast (EVM → RGB/RGB Lightning), or - The RGB or Lightning invoice payment is complete (RGB/RGB Lightning → EVM)
VerifyBridgeInRequest
Response
200 — Empty body (null). Accepted.
Error Responses
POST /transfers/submit-transaction — Submit Signed Transaction
Submits signed transaction data for a pre-registered transfer and returns the resulting transaction hash.
Request Body
Response
200
GET /transfers/history/{signature-hex}/{pub-key-hex} — Get Transfer History
Returns a paginated list of transfers associated with a user’s address. Identity is proven by providing a signature.
Path Parameters
Query Parameters
Response
200 — Page
Poll history at a reasonable interval (e.g., every 5–10 seconds). Avoid aggressive polling — the bridge requires Bitcoin confirmations for RGB-leg completions, which may take several minutes.
GET /transfers/invoice/{tx-id}/{network-id} — Get RGB or Lightning Invoice
Returns the invoice associated with a completed or pending transfer. The network-id selects plain RGB (36 mainnet, 91 testnet) or RGB Lightning (94 mainnet, 95 testnet).
Path Parameters
Response
200 — InvoiceResponse
invoice contains the Lightning invoice string instead.
Transfer Types
ThetransferType field in BridgeInSignatureData names the transfer model the bridge uses. The Mint uses a single model, returned as WU:
Clients can treat this field as informational.
Error Responses
All endpoints return a consistent error envelope on failure.
Codes
6, 7 and 8 come with HTTP 409 from POST /unlock, and a details object with the numbers behind the wait (for example confirmations and requiredConfirmations for code 7). Nothing is sent to the EVM network, and the burn stays redeemable.