OpenReceive guides

OpenReceive adds Bitcoin Lightning checkout to your application. Payments go straight to your wallet, and payment attempts are stored in your existing database. Pick a framework quickstart below. Then add the checkout UI and connect your authorization, pricing, and fulfillment hooks.

OpenReceive can also accept USDT, USDC, SOL, and ETH through a swap provider you configure. The provider converts the payment to BTC over Lightning, and it settles into the merchant’s connected wallet. Swaps are optional. The provider decides which assets and networks are available.

  1. Express quickstart (Node)
  2. Fastify quickstart
  3. Next.js quickstart
  4. Node ORM recipes
  5. Rails quickstart
  6. FastAPI quickstart
  7. Django quickstart
  8. PHP quickstart (plain PHP)
  9. Laravel quickstart
  10. BTCPay Server quickstart, plus its reference
  11. Authorization and the host
  12. Rate limiting
  13. Frontend checkout
  14. Checkout UX
  15. Headless checkout
  16. Writing your own checkout route
  17. Automated swaps
  18. Swap refunds, and the way back to them
  19. Lightning Swap Connect (LSC) URI
  20. Environment variables
  21. Payment storage
  22. Payment safety upgrade and repair: how to roll out the upgrade and how to review and recover existing attempts.
  23. Deploying OpenReceive
  24. Testing your OpenReceive integration
  25. API reference
  26. Security
  27. Price feeds
  28. Provider registry
  29. WordPress + WooCommerce quickstart
  30. WordPress hosting requirements: which hosts can run the WooCommerce plugin
  31. How we test platforms: what a Tested badge on openreceive.org means

Recipes: React + Material UI, Flask (the Python engine as a Blueprint)

Building this with a coding agent? Give it one of the agent-directions payloads instead of a reading list: Node (Express), Fastify, Next.js, FastAPI, Django, Rails, PHP, Laravel, WooCommerce or BTCPay Server. These are the exact files the site’s copy button copies. In this repo they live in docs/agents/. Each payload contains Step 0 (the rules that no API call can state for itself) and the full matching quickstart. It works pasted into an editor with no network access. All payloads are generated. To change one, edit docs/agents/src/<stack>.md and run npm run build:docs. To hand an agent a link instead, drop /full from the URL: that short page tells it to download the full file with its shell.