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, Tron, and Solana reach that hub through LayerZero. Arbitrum is currently the only live network in this environment.
For now, the only tested and available route is Arbitrum (mainnet) to Bitcoin (Utexo signet). Bitcoin mainnet is not available yet.
Base URL (testnet / dev):
https://transfer.dev.utexo.com/api/v0All paths in this reference are relative to the base URL. A mainnet base URL will be provided separately. Contact the Utexo team for production endpoint access.POST /transfers/verify-bridge-in and POST /transfers/submit-transaction endpoints need a signature in the request body (see Authentication).
Transfer Flows
Understanding the transfer direction is essential before making any API calls. The API supports two directions:RGB and Lightning destinations: The RGB-side destination is selected by
networkId. Use 36 (mainnet) or 91 (testnet) for plain RGB, and 94 (mainnet) or 95 (testnet) for RGB Lightning. The destination accepts an RGB invoice (rgb:…) for plain RGB or a Lightning invoice string for RGB Lightning. Network ID 96 identifies Utexo and is not a Lightning network ID.EVM → RGB or RGB Lightning
Move assets from an EVM network to a plain RGB or RGB Lightning destination.1
Discover networks and tokens
GET /networks — list all connected networks.GET /networks/{network-id}/supported-tokens — list tokens supported on a given network.2
Estimate fees
GET /transfers/estimate/{sender-network}/{recipient-network}/{token-id}/{amount} — get fee and confirmation time estimate before committing.3
Pre-register the transfer
POST /transfers/bridge-in-signature — pre-register the transfer. Returns a transferId, fee estimation, and an empty signature (0x).4
Call fundsIn() on the EVM contract
The user calls
fundsIn() directly on the EVM bridge contract using the data returned in Step 3. This step happens client-side — the API does not broadcast this transaction.5
Confirm the transaction
POST /transfers/verify-bridge-in — notify the mint with the on-chain tx hash to confirm the transfer.6
Poll transfer status
GET /transfers/{tx} — poll using the triggering tx hash until the transfer reaches a terminal status (FINISHED, CANCELLED, or FAILED).7
Retrieve destination invoice (optional)
GET /transfers/invoice/{tx-id}/{network-id} — fetch the RGB or Lightning invoice selected by network-id.RGB or RGB Lightning → EVM
Move assets from a plain RGB or RGB Lightning wallet to an EVM network.1
Discover networks and tokens
Same as EVM → RGB Step 1.
2
Estimate fees
Same as EVM → RGB Step 2.
3
Pre-register the transfer
POST /transfers/bridge-in-signature — returns the invoice for the selected RGB-side network in the signature field: an RGB invoice for plain RGB or a Lightning invoice for RGB Lightning.4
Send RGB assets
The user pays the invoice string returned in Step 3 with the wallet appropriate for the selected RGB or RGB Lightning network.
5
Confirm the transfer
POST /transfers/verify-bridge-in — notify the mint that the RGB or Lightning invoice payment has been completed.6
Poll transfer status
GET /transfers/{tx} — poll for status as in the EVM → RGB flow.Authentication
Read-only endpoints (allGET requests) and POST /transfers/bridge-in-signature require no authentication header.
The POST /transfers/verify-bridge-in and POST /transfers/submit-transaction endpoints validate the caller’s identity using a cryptographic signature embedded in the request body:
A
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").
GET /networks/{network-id}/fetch-user-tokens/{user-address} — Fetch User Multitokens
Requests the gateway to fetch the user’s multitoken holdings for the specified network and address.
Path Parameters
Response
200 — Empty body. The current handler writes no JSON response on success.
Error Responses
Transfers
GET /transfers/estimate/{sender-network}/{recipient-network}/{token-id}/{amount} — Estimate Transfer Fees
Returns a fee and confirmation time estimate for a proposed transfer. Call this before pre-registering to give users 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
GET /transfers/cancel-signature/{transfer-id}/{network-id}/{signature}/{public-key} — Request Cancellation Signature
The route is registered, but cancellation is currently unavailable. The handler returns 501 Not Implemented before parsing any path parameters or producing a cancellation signature.
Path Parameters
Response
501 — Standard error envelope with the message cancelling is unavailable.
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/{tx} — Get Transfer Status
Returns the current state of a transfer identified by its triggering transaction hash. Poll this endpoint after calling verify-bridge-in until the transfer reaches a terminal status.
Path Parameters
Response
200 — Array of Transfer objects
Poll
GET /transfers/{tx} 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/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
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 indicates the internal routing mechanism selected for the transfer. Known values:
Error Responses
All endpoints return a consistent error envelope on failure.Data Models
Address
Network
Token
Open Questions & Unresolved Issues
The following items require validation from the Utexo engineering or product team before this reference is considered complete:- Authentication signing procedure — The message format and signing algorithm for
authenticationSignatureare not defined in the Swagger spec. Developers cannot implementverify-bridge-inorhistorywithout this information. transferTypeenum semantics — The valuesLP,WU,CCTP,NTV,MLT,BDXS,LPNappear in the spec enum but are not described. If transfer type affects the caller’s required behavior (e.g., approvals, contract calls), this must be documented.additionalAddressesfield — Present inBridgeInSignatureRequestbut its purpose and expected values are undocumented. Needs clarification.- Mainnet base URL — The current spec host is empty;
transfer.dev.utexo.comis the dev/testnet environment. The production base URL must be published before this reference goes external. SupportedTokensResponsePascalCase fields — Confirmed from the spec (NOTE: fields are PascalCase). This is an unusual JSON convention and should be explicitly called out in SDK wrappers or normalized in a future API version.