This is an updated and revised version of "The Merchants Guide to BTCPay" I posted a few weeks back. After using BTCPay for 2 months in my store and actively being involved in the community on Slack, my understanding of its technical aspects and the importance of such project have greatly improved. Due to recent events of payment processors cutting off the stores for no reason like WikiLeaks the self-sovereignty of the merchants is becoming critical.
This updated guide assumes you’re a merchant who already understands the benefits and the risks of accepting Bitcoin. It's not technical at all. The goal to explain plainly what is BTCPay, how it works and cover advantages and disadvantages. The idea behind the guide is to inform both merchants and general public about the project and motivate them to try it out and support it.
The official BTCPay documentation is available here.
What is BTCPay?
BTCPay Server is an Open Source payment processor, written in C#, that conforms to the invoice API of Bitpay. This allows easy migration of your code base to your own, self-hosted payment processor. source.
To simplify the definition, BTCPay allows merchants to be their own bank, receive payments in Bitcoin, Litecoin, Doge and plenty other cryptocurrencies without the third party. BTCPay allows merchants to run their own node (or connect to someone else's node by using the hosts) and receive payments directly, P2P, with no fees, no intermediary, no censorship whle providing better privacy over their customers financial and private data. (PayPal shares data with over 600 companies )
The developer behind the open-source project is Nicolas Dorier, Bitcoin Core contributor. /u/NicolasDorier decided to fork the BitPay processor and create a different solution. His approach is very logical and works just like Bitcoin was supposed to work, peer to peer with no third party. You are your own bank; you control your funds, the payment processor can't just shut you down for political reasons or just because they do not like your business model. The project gathered a decent and very active community. u/codeoverwhelming is also a rock-star contributor to the project.
How BTCPay works? BTCPay on the back-end work just like any other payment processor. The customer adds item to cart, selects “Pay with Bitcoin”, chooses the cryptocurrency they wish to pay in, or convert (BTCPay currently supports over 40 cryptocurrencies through ShapeShift/Changelly conversion).
The important elements of BTCPay are :
- The server
- The plugin
- The wallet
You’re running your own server which runs the full node; the server is called BTCPay. Once installed it will be connected to your website's subdomain. To simplify this even further, you'll have a separate mini site btcpay.yourdomain.com where you will be able to check the invoices, manage your wallet, configure your store and much more. If you wish you can use this mini-website as a payment processor and help other smaller stores accept crypto for free or charge for the support. This does not mean you’ll have to check the invoices on the server, all basic information is available through your Woocommerce store and your order processing routine will not change in any way.
Though there are so many features you can configure, I'd like to mention the Apps.The apps will allow merchants at a later point to implement different type of features like : payment forwarders, ifttt integration, etc. The first app released is POS app which allows merchants to use BTCPay as a point of sale terminal and create invoices for their customers.
The plugin connects your server to your Woocommerce Store. It is a bridge to your store and your node. In the plugin settings, you can configure important options. A bit more advanced configurations can be adjusted on the server. The plugin helps you manage your store. It will automatically mark your orders as "processed" or any other status you've set. It will mark expired invoices as canceled, etc. If you're familiar with Woocommerce, let me tell you that there is no difference between the ease of order management between this and any other payment method in Woo. Our store is configured this way. Buyer selects "Pay with Bitcoin" at the checkout. The status of the order is awaiting payment. We set that after 6 confirmations order status changes to processing, at which point we know that the order is fully paid, which you can see in your wallet as well.
Your receive payments to your wallet (it’s possible to configure Ledger Nano S hardware wallet or Electrum right out of the box). You need to set your derivation path. This is what will generate different public address for your customer to pay. Each new invoice will have a different address, which increases the privacy greatly. At no point will you need to reveal the private keys during the setup..
This means that the buyer, pays directly to you in cryptocurrency and that the payment does not go anywhere else, the IP address is not leaked, the buyer data is not shared with a third party in any way. You will see the payment in your Bitcoin wallet. Electrum OR Ledger Nano S wallet integration to btcpay is needed.
BTCPay is not the only solution to accept cryptocurrency directly, but after months of trying out, I found it the safest, the most active, customizable and the easiest to set up. It just works.
Difference between BTCPay and third-party payment processors
Think of BTCPay as a server which allows you to accept bitcoin without intermediaries. You are your own payment processor. The payment processors act as a server as well, but your customer's data, IP addresses go through them. Furthermore, most of the payment processors hold your crypto payments, and you’d have to withdraw it or convert it, similar to what exchanges do. The last but not the least, third-party processors charge fees on your transactions.
- You are running a full node and helping the network
- You are protecting the privacy of your customers
- You’re using Bitcoin the way it’s supposed to be used, p2p, directly
- You’re avoiding fees that all payment processors have (monthly subscription/fees per transaction usually 1-5%)
- You can accept payments directly to your wallet, including the hardware wallet (currently integrated with Ledger Nano S well) and you’re the immediate owner of those assets
- You can be a host and help other smaller shops accept payments through their stores
- You can accept other cryptocurrencies through BTCPay directly(Litecoin) and over 40 currencies if you enable the ShapeShift integration
- You can accept Lightning Network payments on the Mainnet easily
- Multiple merchants can have the same server and host their stores together to save the cost (however only the main admin has access to the integrated lightning node)
- Hosting such server costs around 20-60$ per month (the cost varies depending on the server you’re using, with the Azure, you can cut down the cost to little over $ 20). My cost for the previous month was 57$ .
- It takes a bit more time to setup and configure to fit your store needs, (took 3-4 hours for myself, I’m not particularly tech-savvy).
- You can not convert to fiat currency right away like with some payment processors, though in my personal opinion, the immediate conversion ruins the whole point of accepting bitcoin and does not increase the adoption. The fiat conversion is coming very soon on BTCPay and merchants will be able to immediately convert the whole amount or partial to their local fiat currency through the exchange.
- Shopify integration is unavailable (being developed)
- PrestaShop integration is unavailable (being developed)
The entire documentation is available on the Github. There are several videos on YouTube which will help the newbies out which guide you step by step how to set the BTCPay up.
Important note :
- BTCPay is in no way limited to Azure deployment
- Azure only provides the newbie-friendly solution with 1 click deployment.
Summary of this step is that you have to register with Microsoft Azure server. Upon registration, you'll get 200$ free credits which will be enough for the first few months of running the server, so basically, there are no upfront costs. Be aware that BTCPay is free; it does not cost a dime, you're paying Microsoft here for the server which will keep your node online 24/7. As mentioned, you can use other solutions (Docker).
After you register for the server, there is a single one-click deploy button you have to click. It will take you to your Azure VM and configure everything for you. There are a few things you have to change yourself. Besides documentation, Nicolas made an easy to follow video for this.
The next step is to connect your domain and your server, which is again very easy to follow up in the videos and documents.
The third step is to connect your Woocommerce store by installing the Woo plugin (plugin is free).
The final step is to configure your (hardware) wallet and set the derivation path. I was amazed that Ledger configuration took only a few seconds. Nicolas did a great job with this one.
When you set up your store, it is highly recommended to test it out. Post any issues that you might find on the Github and if you have any questions, feel free to ask on Slack.
It's highly recommended that you first watch the following YouTube videos which will help you visualise the process much easier.
Before I answer some of the questions I got from merchants, I'd like to tell that if you're a merchant and have any question, feel free to ask it here. If you're having trouble setting up your BTCPay server, join the community on Slack . There are developers and merchants there ready to help you.
Q: Where can I see the example of how BTCPay works and looks?
A: BTCPay website and if you want to see it live you can check the list of stores using it.
mainnet and testnet
Q: Where can I get help/support?
A: BTCPay is an open-source project. The best way to ask questions is through the Slack group.
Q: Can the costs of running BTCPay be cheaper?
A: Yes they can. Currently, the one-click deployment requires Azure Virtual Machine, but if you’re a programmer or understand VM’s you can deploy one on a different VM. UPDATE: It's now possible to run BTCPay server with 50% decrease by using this method
Q: I have a Shopify store, can I use BTCPay?
A: At this moment, no. Shopify is a closed system a company opposed to an open-source project like WordPress, so it’s harder to communicate to them and create a solution. Luckily there are developers in BTCPay community working on it. While I can’t give you precise information, I assume it will eventually be possible.
Q: Can I have more stores connected to my BTCPay server.
A: Absolutely, you can host multiple stores on the same server. The stores can operate and configure settings separately and receive payments separately.
Q: Why use BTCPay vs. just having a BTC address up on your site?
A: The most important reason – the privacy of your customers and your business. BTCPay will generate the new address for each invoice. You just need to select the derivation path for the address (I used Ledger Nano S). The second reason is user-experience. BTCPay integrates as a payment method to your store, so your customers can checkout with a few clicks.
List of merchants using BTCPay
Note: If you're a merchant accepting BTCPay and would like to be listed here, just comment. The list is in alphabetical order.
List of third-party BTCPay hosts
Full disclosure, I am not in any way related to BTCPay project. I am not a developer nor a contributor. I am just the guy who discovered it and fell in love with the community and the good vibes among the users. I wrote this post to help merchants understand it better and to help with promoting this exceptional project. Since I have no skills to contribute by coding, I thought I could help this way.
Following users helped me improve this guide :
I intend to keep this guide and FAQ up to date. If you notice any spelling errors or have suggestions to improve it, please feel free to let me know.
This post is long and might not be attractive to many people except for the merchants, but please upvote it for the visibility so that we can spread the word. BTCPay is an open-source project, and they accept the donations if you can please support it.