Skip to content
SpendTheBits

Lightning Address in a Self-Custody Wallet: Getting Paid While Your Phone Is Off

By , Founder, SpendTheBits ·

In short

A Lightning address looks like an email and works like a standing request to be paid. The catch for a phone wallet is that someone has to answer the payer at the moment they pay, and a phone in a pocket often cannot. The fix is a small hosted server that answers for you and hands out invoices for your own wallet. Your keys never leave the phone, so the server cannot spend your money. It can see your payment requests, and your address stops working if it goes down. Know those two trade-offs and you can judge any wallet in a minute.

30+
wallets and services that lightningaddress.com lists as able to receive to a Lightning addressSource: lightningaddress.com

A user asked us a simple question this week: where do I set my Lightning address? The honest answer was that the address had to exist somewhere other than their phone. That sounds odd for a wallet that never holds your keys, so this piece explains why it is true and why it is safe.

We cover what the address is under the hood, why a phone cannot answer a payer while it sleeps, and how a hosted server fills the gap. Then we look at the hash check that strict payers run, what the server can learn about you, and five questions to ask of any wallet. If you only want the steps, our help article on getting a Lightning address is the short version.

A gold envelope marked with a lightning bolt receiving a thin line of light above a sleeping phone, representing a Lightning address that gets paid while the phone is off.

Two specs stacked on top of each other

A Lightning address is defined by a short spec called LUD-16 [1]. It takes the form username@domain, and the username may use lower-case letters, digits, dashes, dots and underscores [1]. That is the whole visible part.

The work happens one layer down. When you paste the address into a wallet, the wallet turns it into a web request to a fixed path on that domain, under .well-known/lnurlp [1]. The server must answer in exactly the way an older spec, LUD-06, lays out for a pay request [1][2]. So every address is really a friendly name for an LNURL-pay endpoint.

That first answer is not an invoice yet. It is a small menu: a callback link, the smallest and largest amounts the receiver will take, and a block of metadata that must include a plain text line [2]. Amounts are given in millisatoshis [2]. The payer picks an amount, calls the callback, and only then gets a real invoice back to pay [2].

This split is what makes the address reusable. A normal invoice is single-use and carries a fixed amount. The address is a door that mints a fresh invoice each time someone knocks.

Why a phone cannot answer while it sleeps

Somebody has to answer that knock. The request arrives over the web at the moment the payer hits send. A server that is always online can reply in a heartbeat. A phone cannot.

Phones are built to sleep. Apps are frozen in the background, radios drop out, and nobody leaves a wallet open all day to wait for a tip. If the payer's wallet has to reach your phone directly, the payment fails whenever your screen is dark.

This is why many early Lightning addresses were custodial. A company ran the server, held the funds, and simply credited your account. It worked well and it was easy to build. But the company held the money, which is the very thing a self-custody wallet exists to avoid.

So the design question for a phone wallet is narrow. Can a server answer the payer without ever holding the funds or the keys? The answer turns out to be yes.

A server that answers but never holds

The trick is to separate answering from owning. A hosted server can reply to the payer's wallet and return an invoice. That invoice pays into the user's own wallet, not into an account the server controls.

Breez offers exactly this for apps built on its Spark SDK [7]. An app registers a username for the user, and the address then lives on the app's domain [7]. The domain can point at Breez's hosted LNURL server, or the app can run its own [7]. Breez describes the SDK as non-custodial, with keys only held by users [8].

Spark adds a second safety net. Before funds go in, the user and the Spark operators create a pre-signed exit to the Bitcoin base chain [9]. If the operators vanish or refuse to cooperate, the owner can broadcast those exits and claim the funds after the timelocks expire [9]. Nobody in the middle can quietly keep the money.

This is how a self-custody Lightning address works in practice. The server is a receptionist that takes messages and hands out invoices. It is not a bank, and it never has the key to the vault.

The description hash, and a rule that changed in May

Every Lightning invoice has to say what it is for. The invoice format, BOLT 11, requires exactly one of two fields: a short text description, or a SHA-256 hash of a longer one [5]. LNURL-pay used the hash form. For years, LUD-06 told the payer to check that the invoice's hash matched the metadata from the first answer.

That rule was removed. Pull request 234, merged on 30 May 2026, dropped the check from LUD-06 and LUD-18 [3]. The argument was that neither piece of data is secret, so a man in the middle could change both [3]. The check also made invoices hard to build on some node software [3].

The catch is that some payer wallets still run the old check. The same discussion notes that senders who kept enforcing it began blocking payments to receivers that had dropped the hash [3]. So a receiver that still sets a matching hash works with old and new payers alike.

On 18 September 2026 we tested this on our own address. The invoice from its callback carried a description hash equal to the SHA-256 of the metadata. It also carried a LUD-21 verify link, which lets anyone check later whether the invoice was paid [4]. That is the most compatible shape an address can serve today.

SpendTheBits Receive via Lightning screen showing a QR code for a 1,000 sat invoice that expires in 60 minutes, with Copy invoice and New amount buttons
A fixed-amount invoice in the app. A Lightning address mints one of these for each payer, on demand.

What the hosted server can see

A hosted address is not custody, but it is not invisible either. Be clear about what you give up.

First, privacy. The server sees each request for an invoice: the amount asked for, the time, and any comment the payer adds. It learns how often you get paid and roughly how much. It cannot move your funds, but it does hold a record of your incoming requests.

Second, uptime. If the server or the domain goes down, payers cannot reach you by address. Your money is safe in your wallet, but new payments stall until the server is back. A plain invoice from the app still works in the meantime.

Third, control of the name. Whoever runs the domain decides which usernames exist. Breez notes that an address can be handed to a new owner key in a single step [7]. That is useful when you change phones, and it is a reason to pick a provider you trust with your name.

How SpendTheBits sets it up

In SpendTheBits, every @handle gets a Lightning address of the form handle@pay.spendthebits.com. It is served by Breez's hosted LNURL service for your own Breez Spark wallet. The app registers it for you the first time you open Lightning on an up-to-date version. There is nothing to type and no server for you to run.

Payments reach you while your phone is off. They land in your Lightning balance, which is kept apart from your on-chain bitcoin. Receiving over Lightning carries no SpendTheBits fee. Lightning in our app runs on Bitcoin mainnet only.

To find the address, open Receive and pick Lightning. You get a QR code with Copy address, Share and Save below it. Share sends the QR as an image, after a one-time reminder that you are on mainnet. For a set amount, use a Lightning invoice instead. To send the other way, see paying over Lightning.

SpendTheBits Receive screen on the Lightning tab with a QR code, Copy address, Share and Save buttons, and the address e2etest@pay.spendthebits.com
Receive, Lightning tab. The address under the QR is the handle at pay.spendthebits.com.

Five questions for any wallet's address

Lightning address support is now common. The spec site lists more than 30 wallets and services that can receive to one [6]. Public Lightning is large too, with about 16,230 nodes on 30 August 2026 [10]. So you have options, and these questions sort them fast.

One: who holds the keys? If the provider can spend your balance, it is custodial, however smooth it feels. Two: does it work while your phone is off? If not, payers will hit errors at random. Three: does the invoice carry a matching description hash? If not, some strict payers will refuse it.

Four: whose domain is it, and can you move the name? A name you cannot take with you is a name you rent. Five: what does the provider log? Read the privacy terms for the server, not just the app.

A self-custody Lightning address that passes all five is the best of both worlds. It is as easy to share as an email, and it pays a wallet only you control. For how the Lightning rail compares to on-chain on cost and speed, read our Lightning vs on-chain breakdown. For the wider picture, see the SpendTheBits wallet.

In the app · 4 steps

Share your Lightning address from SpendTheBits

Your address is ready as soon as you have an @handle. Here is how to find it, share it and see what a payer sees.

  1. Open Receive → Lightning

    Your address appears as a QR code with Copy address, Share and Save underneath, and spelled out as handle@pay.spendthebits.com.

    The Receive screen in SpendTheBits on the Lightning tab with a QR code and the Lightning address
  2. Confirm you are on Mainnet

    The first time you share, the app reminds you this is the live network with real funds, so a test address never goes out by mistake.

    A SpendTheBits confirmation sheet saying you are on Mainnet before sharing a payment request
  3. Share it anywhere

    Share sends the QR as an image with the address printed under it, so it works in a chat, an email or a printed sign.

    The iOS share sheet with the SpendTheBits Lightning QR image attached
  4. What a payer sees

    Any Lightning wallet can pay the address, even while your phone is off. In SpendTheBits, typing it into Pay shows who is being paid and asks for an amount.

    The Pay with Lightning screen in SpendTheBits with a Lightning address entered and an amount field

Hold your own keys, keep the yield, skip the middleman.

SpendTheBits is a fully non-custodial wallet for 13 chains, free on iOS and Android.

Frequently asked

Not when the server only hands out invoices for your own wallet. The keys stay on your device, so the server can see payment requests but cannot spend your funds.

A payer's wallet asks a web server for an invoice at the moment it pays. A sleeping phone cannot answer that request, so a server answers on the wallet's behalf.

It is a check that the invoice's hash field equals the SHA-256 of the metadata the payer saw first. LNURL-pay dropped the requirement on 30 May 2026, but some payer wallets still enforce it [3].

Your funds stay safe in your wallet, but payers cannot reach you by address until it is back. You can still share a normal invoice from the app.

No. Receiving over Lightning carries no SpendTheBits fee, and payments land in your Lightning balance.

Sources

  1. 1.LUD-16: Paying to static internet identifiers · LNURL (lnurl/luds on GitHub) · accessed 2026-09-18
  2. 2.LUD-06: payRequest base spec · LNURL (lnurl/luds on GitHub) · accessed 2026-09-18
  3. 3.LNURL-pay: Drop metadata description hash validation (pull request 234) · LNURL (lnurl/luds on GitHub) · accessed 2026-09-18
  4. 4.LUD-21: verify base spec · LNURL (lnurl/luds on GitHub) · accessed 2026-09-18
  5. 5.BOLT 11: Invoice Protocol for Lightning Payments · Lightning BOLTs · accessed 2026-09-18
  6. 6.Lightning Address · lightningaddress.com · accessed 2026-09-18
  7. 7.Breez SDK Spark: Receiving payments using LNURL-Pay and Lightning addresses · Breez · accessed 2026-09-18
  8. 8.Breez SDK Spark documentation · Breez · accessed 2026-09-18
  9. 9.Spark: Sovereignty · Spark · accessed 2026-09-18
  10. 10.Lightning network statistics API (lightning/statistics/latest) · mempool.space · accessed 2026-09-18

This article is educational and reflects observed data and public sources on the date shown. It is not financial, legal or tax advice. Digital assets can lose value; yields shown are observed, not promised.

STB Weekly, every tuesday

The short version of pieces like this one, plus what moved in AI in finance and agent payments. What you get

Product updates and release notes. No price calls, no spam, unsubscribe in one click. We email you once to confirm before anything else is sent.