OpenReceive for Medusa
Accept Bitcoin & Stablecoin Payments With Medusa
Add Bitcoin Lightning to a Medusa store with @openreceive/medusa, a plugin and payment provider for your Medusa server. Medusa keeps carts and orders; OpenReceive settles the payment in your own wallet.
Plugin
Tested live · Oct 19, 2026 · 0.4.29
Copy agent directions — Paste into Claude Code, Codex or Cursor to add OpenReceive to your Medusa app.
Why OpenReceive
- Medusa completes the order. The customer pays on your storefront's review step. Once the wallet reports the payment, Medusa's own workflow captures it and places the order, even when the customer has left the page.
- Your database, no new service. Payment attempts live in the Postgres database your Medusa server already uses, on Medusa's own connection.
- Receive-only wallet permissions. The provider takes a receive-only NWC code from the server's environment and never a code that can spend.
- Stablecoins, optional. With a swap provider code, customers can pay in USDT, USDC, ETH or SOL, and you still receive Bitcoin.
Try the checkout your customers will see
Medusa shoppers see this same checkout at the storefront's review step; here it runs in the openreceive.org demo shop. The live demo needs JavaScript: open the OpenReceive home page.
Five steps, some code
Requires Medusa ≥ 2, Node ≥ 22.12, PostgreSQL.
1. Get a receive-only NWC code — get one here. It can issue invoices and watch for payment, and it can never spend from your wallet.
2. Get an LSC code for swaps (optional) — from a swap provider, only if customers should be able to pay in USDT, USDC, ETH or SOL.
3. Install and register the plugin
npm install @openreceive/medusa, register it in medusa-config, then npx medusa db:migrate
4. Add the codes and the payment method — Put NWC_URI, and LSC_URI_PRIMARY if you want swaps, in the Medusa server's .env, never in the storefront, and restart Medusa. Then add Openreceive (OPENRECEIVE) to each region's payment providers under Settings → Regions, or run the plugin's enable script.
5. Add the checkout to the storefront — A route that forwards the checkout's requests to Medusa, and the React <Checkout> on the storefront's review step. The Medusa quickstart has both for Medusa's Next.js starter.
Full Medusa quickstart · Plugin source
How it runs
- Tested on
- Medusa 2.21.2 on Node 22, with Medusa's Next.js starter
- Databases
- PostgreSQL, Medusa's own database
- Secrets
- NWC_URI, and LSC_URI_PRIMARY for swaps, in the Medusa server's environment or .env file, never in the storefront
- Refunds
- Refund a settled Lightning payment from your own wallet: the wallet code is receive-only, and a refund made in the Medusa admin is recorded only. A buyer reclaims a swap deposit that never converted from the same checkout.
- Mobile apps
- No app SDK. Payers pay on the store's web checkout, and an app that opens it follows the same app store rules as any web checkout.
Practical questions
- Which currencies can customers pay with?
- Bitcoin over Lightning, always. With a swap provider configured, also USDT on Tron, Solana or Ethereum, USDC on Solana or Ethereum, ETH and SOL, each converted into the same Lightning payment. Automated swaps guide
- Where does the Bitcoin go?
- Into the wallet behind the receive-only NWC code. OpenReceive never holds funds: the invoice is minted in your wallet and the sats land there. Once it settles, the plugin captures the Medusa payment and Medusa places the order. Medusa quickstart
- What wallet do I need?
- Any wallet that issues receive-only NWC (Nostr Wallet Connect) codes, hosted or self-run. The code must be able to create invoices and read their status, and must not be able to spend. Get a receive-only NWC code
- What does it cost?
- OpenReceive is open source and free. Fees charged by your wallet provider, by a swap provider or by Lightning routing belong to those services and are outside OpenReceive's scope.
- What do I need to deploy?
- Medusa 2 on Node 22.12 or later with its PostgreSQL database and its scheduled jobs running, the codes in the Medusa server's .env, and a storefront that renders the checkout, such as the React <Checkout> in Medusa's Next.js starter. Medusa quickstart
Add OpenReceive to Medusa
Copy agent directions · Full quickstart · Plugin source · API reference · Guides