Skip to main content

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.
The wallet headers identify a wallet; they are not an authentication mechanism. Place the service behind TLS and an authentication or private-network layer before using it in production.

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.
Wallet contexts are registered at runtime through POST /wallet/register; they are not declared in the configuration file.

Configuration

Create a TOML configuration file and pass its path with -c:
The repository ships 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:
For local development, start the bundled regtest stack and then the service:
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

RGB Node supports NIA issuance only. For CFA or UDA issuance, use the RGB Lightning Node.
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. Response 200:

POST /wallet/issueassetnia

Request body:
Response 200:

POST /wallet/blindreceive

asset_id, amount, and duration_seconds are optional. min_confirmations defaults to 1. Request body:
Response 200:

POST /wallet/sendbegin

Request body:
Response 200: An unsigned PSBT string.

POST /wallet/sendend

Request body:
Response 200:

Error handling

The missing-header response is different from the API’s structured error envelope: Structured errors use this envelope:
Most underlying RGB and dependency errors are currently collapsed to a generic internal error:
The 401 missing-header response bypasses the JSON envelope. Clients should handle it separately.