Solutions/BOLT12 payments

BOLT12 payments on your domain

A BOLT12 offer is a reusable Lightning payment request. Your Phoenixd node's offer is already available in the Nodana app. You can share the offer directly, or publish it through BIP 353 so people can pay an address such as [email protected] with a compatible wallet.

BOLT12 and LNURL-pay

Both can give someone a reusable way to receive Lightning payments. With BOLT12, you share one offer. For each payment, a compatible wallet uses the Lightning protocol to request a fresh invoice from your node. The offer can support features such as blinded paths that improve receiver privacy. Your Phoenixd node still needs to be available to respond and receive the payment.

With LNURL-pay, a wallet contacts an HTTPS service, which returns a new BOLT11 invoice for that payment. A conventional Lightning Address uses this LNURL-pay flow behind an email-like name. The HTTPS endpoint must be available to serve payment requests.

The domain address in this guide uses BIP 353: a DNSSEC-signed TXT record maps the name to your BOLT12 offer. This uses DNS for the address lookup instead of an LNURL HTTPS endpoint, and your node handles the invoice request over Lightning. BOLT12 itself does not require DNS; you can share the offer directly. BIP 353 is the optional naming layer.

An email-like name alone does not tell you which method a wallet will use. Check that the sender's wallet supports BIP 353 and BOLT12. See the LNURL-pay specification for its request flow.

What you need

  • A running Phoenixd node on Nodana.
  • Control of a domain and its DNS records, with DNSSEC enabled and correctly signed.
  • A wallet that supports resolving BIP 353 addresses and paying BOLT12 offers. Wallet support varies, so test yours before sharing the address widely.

Copy your node's offer

In the Nodana app, select your node and open its details page. Find the BOLT12 Offer card and use its copy button. The offer begins with lno1. This is public payment information; your node password and seed phrase must stay private.

The offer itself is reusable. You do not need to create a fresh offer for each person who pays you.

Publish it under your domain

For [email protected], add a TXT record at:

tips.user._bitcoin-payment.example.com

Set the record's value to a Bitcoin URI containing your full offer:

bitcoin:?lno=<your-full-lno1-offer>

Replace the example name, domain, and placeholder with your own values. Your DNS provider may ask for just tips.user._bitcoin-payment as the record name when it automatically appends example.com.

BIP 353 requires the record and the DNS chain to be DNSSEC signed. Each DNS TXT string is limited to 255 bytes; if your offer makes the value longer, split one TXT record into multiple quoted strings, preserving the exact characters and their order. Do not create multiple separate bitcoin: TXT records at the same name. Check your DNS provider's format for entering long TXT values.

Check and use the address

Query the published record to check that the complete offer is visible:

dig TXT tips.user._bitcoin-payment.example.com

Then enter [email protected] (or ₿[email protected]) in a BIP 353-compatible wallet. Confirm it resolves to your BOLT12 offer and send a small test payment. Check the incoming payment on your node before publishing the address for others. A dig result alone does not verify the DNSSEC chain or prove that a wallet can pay the offer.

Keep the Phoenixd node available to receive payments. If you replace the node or its offer changes, update the DNS record and test the address again. DNS caches may continue to serve the previous value until its TTL expires.

Learn more about BOLT12 and the BIP 353 DNS record format.

On this page