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:

  1. The payer’s wallet turns name@domain into https://domain/.well-known/lnurlp/name and fetches it.
  2. The server replies with JSON: callback URL, minSendable/maxSendable (in millisats), metadata, and optionally allowsNostr + nostrPubkey (needed for zaps, NIP-57), commentAllowed.
  3. The wallet calls callback?amount= (plus a nostr= zap request for zaps).
  4. The server returns a fresh BOLT11 invoice ({“pr”: “…”}); the wallet checks the invoice’s description hash matches the metadata, and pays.
  5. 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