What actually happens when someone pays your Lightning address (LNURL-pay, step by step)
name@domain decoded: the well-known URL, the JSON, the invoice callback, and zap receipts, with a real response.
A Lightning address like name@domain looks like email, but it’s just a URL in disguise:
- The payer’s wallet turns name@domain into https://domain/.well-known/lnurlp/name and fetches it.
- The server replies with JSON: callback URL, minSendable/maxSendable (in millisats), metadata, and optionally allowsNostr + nostrPubkey (needed for zaps, NIP-57), commentAllowed.
- The wallet calls callback?amount=
(plus a nostr= zap request for zaps). - The server returns a fresh BOLT11 invoice ({“pr”: “…”}); the wallet checks the invoice’s description hash matches the metadata, and pays.
- For zaps, the server publishes a kind 9735 zap receipt to the relays listed in the zap request.
Practical consequences:
- Your address is only as reliable as the server behind it: custodial (coinos, Wallet of Satoshi, etc.) vs self-hosted (LNbits, BTCPay, Alby Hub).
- You can test any address with curl: curl https://domain/.well-known/lnurlp/name
- If zaps show as “received” in your wallet but not in nostr clients, check allowsNostr/nostrPubkey and that receipts are published.
- Privacy: the server operator sees every payment to you.
Write a comment