Overview
The RGB Node API is a self-hosted HTTP service for managing watch-only RGB wallets. It holds no private keys and never signs transactions. Clients identify wallet contexts with xPubs, read wallet state, and sign PSBTs outside the service.Source repository:
UTEXO-Protocol/rgb-node-api. Swagger UI is available at /_swagger when the service is running.Base URL
The listen address and port are set in the TOML configuration file passed with-c.
If the [api] values are omitted, the service defaults to 127.0.0.1:3000. The repository’s bundled local.uwallet.toml development profile listens on 0.0.0.0:34000, so local requests can use:
Wallet identification headers
All/wallet/ endpoints require three request headers. The deprecated root-level POST /blindreceive alias requires the same headers.
POST /wallet/register; they are not declared in the configuration file.
Configuration
Create a TOML configuration file and pass its path with-c:
local.uwallet.toml for local development. The just run command passes that file to the service automatically.
Running the service
Run the service with your configuration file:just up starts bitcoind, electrs, and rgb-proxy. just run starts RGB Node with local.uwallet.toml.
Begin/end signing flow
UTXO creation and RGB asset sends use a client-side PSBT flow:1
Call the *begin endpoint
Submit the operation parameters. The service returns an unsigned PSBT string.
2
Sign the PSBT outside RGB Node
Sign with the wallet’s private keys in the client or a dedicated signer. Private keys are never sent to RGB Node.
3
Call the matching *end endpoint
Submit the signed PSBT. RGB Node finalizes and broadcasts the transaction.
API endpoints
System
These endpoints do not require wallet-identification headers.Wallet management
Balances and state
Asset operations
The root-level
POST /blindreceive route is a deprecated alias for POST /wallet/blindreceive and should not be used in new integrations.
PSBT operations
Request and response examples
POST /wallet/register
The request has no JSON body. Supply the three wallet-identification headers. Response200:
POST /wallet/issueassetnia
Request body:200:
POST /wallet/blindreceive
asset_id, amount, and duration_seconds are optional. min_confirmations defaults to 1.
Request body:
200:
POST /wallet/sendbegin
Request body:200: An unsigned PSBT string.
POST /wallet/sendend
Request body:200:
Error handling
The missing-header response is different from the API’s structured error envelope:
Structured errors use this envelope:
401 missing-header response bypasses the JSON envelope. Clients should handle it separately.