New to RGB? Read Getting Started with RGB first — it explains invoices, colored UTXOs, and consignments used below. Request and response schemas for every call are in the API reference.
1. Launch the node
Build RLN (see Self-Hosted RGB Lightning Node for Docker and other options):2. Top up
Get a Bitcoin address and send testnet3 BTC to it. The Bitcoin Wiki keeps a list of testnet faucets; make sure the faucet supports testnet3 before using the address.vanilla is spendable BTC; colored holds the UTXOs that carry RGB assets.
3. Launch and top up a sender node
Open a second terminal and start another node on different ports. This node will issue and send the test asset.4. Issue an asset on the sender
Issue a test NIA asset from the sender node:rgb:<ASSET_ID> when the sender selects which asset to transfer.
5. Send a first blinded transfer to the receiver
Create a blinded RGB invoice on the receiver. Do not includeasset_id here: the receiver does not know the contract yet, and the sender will choose the asset when it pays the invoice.
invoice string and a recipient_id. Send 1 base unit of rgb:<ASSET_ID> from the sender to that blinded invoice. This first transfer makes the receiver aware of the asset before it creates later invoices for the same contract.
The examples above use blinded RGB invoices (
"witness": false). For non-blinded witness invoices, both the receiver and the sender should already know the asset because the invoice exposes the asset being requested.6. Create an invoice
On the receiving node, create a new RGB invoice for the asset and amount you expect. The receiver can now use the asset ID from its ownPOST /listassets response.
invoice string to share with the sender and its recipient_id.
7. Pay the invoice
On the sending node, pay the invoice withPOST /sendrgb, using the recipient_id from the invoice:
POST /decodergbinvoice to read the recipient_id, asset, amount, and transport endpoints from an invoice string.
8. Confirm settlement
Both nodes refresh their transfers while the transfer moves through the RGB and Bitcoin confirmation flow:settled shows confirmed balance; future includes pending incoming transfers. Use POST /listtransfers to inspect individual transfers.
9. Try RGB over Lightning (testnet only)
The same node also handles RGB-enabled Lightning payments. On testnet:POST /connectpeerwithpeer_pubkey_and_addr(<pubkey>@<host>:<port>).
GET /nodeinfo on the receiver to get <RECEIVER_PUBKEY>:
POST /openchannelwith the peer,capacity_sat,asset_id, andasset_amountto open an RGB channel. RGB channels require anchor outputs, so setwith_anchorstotrue.
POST /openchannel returns NoAvailableUtxos, create more UTXOs on the sender and retry after they confirm:
POST /openchannel returns an error. A successful response means the funding transaction was submitted; keep both nodes running and wait for the funding transaction to confirm on testnet.
Check GET /listchannels on both nodes until the channel appears and is usable:
{"channels":[]}, the channel has not been opened or persisted yet. Re-check the POST /openchannel response first, then wait for the funding transaction confirmation before retrying GET /listchannels.
- On the receiver,
POST /lninvoicewithamt_msat,expiry_sec,asset_id, andasset_amount. For RGB asset payments,amt_msatmust be at least3000000. This is the node’s default minimum, reported asrgb_htlc_min_msatbyGET /nodeinfo.
- On the sender,
POST /sendpaymentwith theinvoicefrom the receiver.
Lightning on mainnet is not supported yet. Integrations built on the on-chain path keep working unchanged when Lightning reaches mainnet.
Next steps
- Self-Hosted RGB Lightning Node — authentication, sync modes, and the production checklist.
- RGB Lightning Node API — the full endpoint list.
- Remote Signer — keep keys outside the node.
- Utexo Cloud — run RLN without managing servers.