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

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