The first Nostr DM bot for international mobile top-ups, paid with Lightning

DM a Nostr npub, pay a Lightning invoice, the recipient's phone is topped up in seconds. No website checkout, no signup, no KYC.

10. Juni 2026June 10, 2026 · 6 Min. Lesezeit6 min read

The first Nostr DM bot for international mobile top-ups, paid with Lightning

You DM the bot. It DMs back. You walk through a guided flow. You pay a Lightning invoice. The recipient's phone is topped up within seconds.

No website checkout. No signup. No KYC. No platform that can change its mind tomorrow.

Verify the bot via NIP-05 at bot@btcrecharge.com, or paste the npub npub1zgzksmumsy5q3tq3ywzj6trmdehfvlhts6lpx9799wqz862qr4nqljlucd into your Nostr client and DM /start.

What it does#

Every customer interaction runs entirely through encrypted Nostr DMs. The bot recognises a small set of commands:

/menu              -> see the country index
/menu RO           -> drill into operators for that country
/buy <operator>    -> start a purchase; the bot then asks for
                      amount and phone number, one step at a time
/confirm           -> the bot mints a BOLT11 Lightning invoice;
                      pay it and the top-up lands on the phone
/status            -> see your pending orders
/status <id>       -> details for one order
/cancel            -> abort the current flow

One DM per step. The bot speaks back over the same conversation. There is no menu to navigate in a web UI, no email confirmation, no account dashboard. The state of the conversation lives in your wallet's view of your DMs with this npub.

Coverage#

The launch catalogue covers operators in 18 countries, weighted toward Nostr-audience overlap and remittance corridors:

Default filter is delivery=direct - only operators that credit the phone instantly. Voucher-PIN operators are hidden for v1 until the bot can hand-off PIN delivery over Nostr DMs safely.

How a purchase actually flows#

The bot is a thin client over an existing payment + fulfilment backend. The mechanics:

  1. You /confirm a purchase. The bot HMAC-signs the order details and POSTs them to its backend.
  2. The backend mints a BTCPay Server invoice on a shared store backed by a working Lightning wallet, extracts the BOLT11, returns it.
  3. The bot DMs the BOLT11 to you with the order id and the sats amount. You pay it from any Lightning wallet.
  4. BTCPay's InvoiceSettled webhook fires the moment your payment confirms.
  5. The backend pays the upstream supplier (Bitrefill) from the working wallet, which credits the phone.
  6. State callbacks flow back to the bot, which DMs you the final confirmation: "Done! Your top-up was delivered."

The customer never sees the supplier, never sees the wallet, never sees the store config. The bot translates between Nostr DMs and the payment pipeline; everything else is invisible.

Why Nostr was the right venue#

Three things you cannot get on Telegram or a website:

The npub is the identity. The bot does not ask for a phone number or email. It does not have an account system. The npub paid the invoice, the npub receives the delivery confirmation. Session state is keyed by npub end-to-end. A throwaway npub gets the same flow as a well-known one - the bot rate-limits per pubkey but does not discriminate.

Encrypted by default. Dual NIP-04 + NIP-17 with per-pubkey capability detection. Relays see the wrapped event, not the content. Bot session state lives in Redis keyed by pubkey, with a 7-day sliding TTL.

No platform risk. Telegram bots die when Telegram decides to change its mind. A website checkout dies the moment your payment processor flags you. Nostr is a protocol; if one relay drops, the bot publishes to three others. If a client renders the bio in a way the bot operator does not like, push a new kind 0 and move on.

Privacy posture#

This is not a privacy product. It is a commerce bot that respects the basics.

What is open#

The known limitations, in plain language:

Try it#

Open any Nostr client (Damus, Primal, Amethyst, Iris, Snort - all tested with the dual NIP-04 + NIP-17 mode), and:

  1. Search for bot@btcrecharge.com (NIP-05 lookup) or paste the npub
  2. Start a DM with /start
  3. From the welcome message, /menu to see the country index

The first interaction is free. You only commit when you /confirm an order and pay the Lightning invoice. Cancelling before that point costs nothing and the bot does not retain anything beyond the session TTL.

Open source#

The bot is open source under the MIT licence: https://github.com/i2dor/btcrecharge-nostr-bot

That is the TypeScript code for the Nostr-facing side - relay pool, NIP-04 + NIP-17 dual encryption, FSM, refund-address capture, the publish-profile + delete-event CLIs. The PHP payment backend (BTCPay client, supplier integration, pricing engine) is operational infrastructure and stays private.

Documentation lives under docs/ in the repo: SETUP, DEPLOY, ARCHITECTURE, OPERATIONS, COMMANDS-AND-FLOWS, TROUBLESHOOTING. The TROUBLESHOOTING.md has eight named incident recipes derived from real bugs we hit during launch week. If you are building a Nostr commerce bot, that document alone is worth the read.

Stack credits#

What is next#

If you try it, tell me what broke. If you think it solves a remittance problem someone you know has, send them the npub. If you are building something adjacent - Nostr-native commerce, Lightning self-custody UX, multi-channel bots - DM me on Nostr. Not on the website.

#announcement#bitcoin#lightning#mobiletopups#nostr

Comments

No comments yet. Start the conversation.

Contents

10 sections

  1. What it does
  2. Coverage
  3. How a purchase actually flows
  4. Why Nostr was the right venue
  5. Privacy posture
  6. What is open
  7. Try it
  8. Open source
  9. Stack credits
  10. What is next