Skip to content

BtcPayServer

Install BtcPayServer

Download Zapstore

Download
QR code for zapstore.dev/download
  • Scan the code with your phone’s camera
  • Tap Download anyway if the browser warns about the file
  • Allow your browser to install unknown apps if Android asks
  • Open Zapstore and finish the onboarding

Open BtcPayServer in Zapstore

Open
QR code to open BtcPayServer in Zapstore
  • Scan the code to open BtcPayServer in Zapstore, or search for it there
  • Tap Install, and Download if Zapstore asks you to confirm the developer
  • Confirm in Android’s install dialog. Allow Zapstore to install unknown apps if Android asks

Claimed by the developer

Turtlecute cryptographically proved they hold the key that signs BtcPayServer. The claim is a signed proof on Nostr, tied to the certificate below.

Developer
Turtlecute
Developer key
npub1acpsfwhq63nehv6rgl8rkxuqfq3x9wvp90gvp40pnf0zg3gy8d6ss564p8
Signing certificate
67ac728e39bb4866e613c8f676ab4cbd2baaa6a0d2728c53dcf9913f993727ba
APK checked by
relay.zapstore.devIt read the APK and found it signed with this certificate before listing the release.
Claim published
Oct 31, 2026
Valid until
Oct 30, 2028
Proof event
f6034ec9a3c5778aef1df2e7c70011573829de4bfbba577113fd633140ba673cin relay.zapstore.dev
How trust works

Native client for BTCPay Server. Manage terminal sales, invoices, wallets, payouts, and admin settings. Supports on-chain and Lightning transactions with alerts for payments and server status.

An unofficial, native Android client for BTCPay Server, built with Jetpack Compose on the Greenfield API. It is a community project. The BTCPay Server Foundation and the BTCPay Server contributors do not make, endorse or support it.

  • Terminal: keypad point of sale, tips, live checkout QR.
  • Invoices: search, filters, refunds, payment requests, crowdfunds.
  • Wallets: on-chain and Lightning, one Send screen for both.
  • Payouts: pull payments, approvals, payout processors.
  • Admin: stores, users, webhooks, email, server status.
  • Alerts: payments, payouts and server notifications, checked by the phone.

Summary generated by Zapstore from source.

Original description, as the developer published it.

Zap BtcPayServer

Zapping anonymously. Sign in to zap with your identity.

Sats go to npub1acpsf…s564p8, the developer who signed the app’s certificate proof.

Amount in sats

Stacked in

Latest release

Nov 4, 2026

Claimed app No Google servicesSource available · MIT

Uses the camera to scan QR codes for payments and invoices.

Permissions

  • Camera CAMERA Take photos and record video To scan QR codes.
  • Notifications POST_NOTIFICATIONS Send you notifications

Release notes

This release fixes the problems that a full review of the app found: security hardening, safer payments, alerts that do not stop, and clearer screens. It is a full release.

Requires Android 15 (API 35) or later, on an arm64-v8a phone. From this release, the APK has native code for arm64-v8a only.

Install it over 0.2.7. The signing key is the same. Accounts you already added keep working.

Changed

  • The APK is about 180 KB smaller (estimate). It has no native libraries for x86, x86_64 or armeabi-v7a.
  • Settings shows a row when Android blocks the app's notifications. The row opens Android Settings.
  • Refund shows "Bitcoin", "Lightning" or "LNURL" on the "Paid with" chips, and the chips go onto a second line when necessary.
  • The recovery phrase of a new wallet shows numbered words.
  • Apps of plugin types open in the browser. Before, they opened in the point of sale editor.
  • The app shows Create, Archive, Refund, store settings links and the transaction label editor only when the API key can do the action.

Fixed

  • An invoice that the server could not return stopped the alerts of its store. Now the other invoices are still checked.
  • Home scan: a scan before the payment methods loaded opened Send with no wallet. Now Send waits for them.
  • Wallet Receive: with an amount that is not valid, the QR code showed only the address. Now no code shows until you correct the amount. An older response can no longer replace a new address.
  • Pull payments: the list now reloads when you come back, so a new or archived pull payment shows.
  • Invoice details: a refused "Mark as" or archive now keeps its error on screen.
  • Invoice list: a filter or search change now shows progress.
  • Checkout: the "paid" vibration plays one time only. The QR code goes away at the expiry time, also when the polls fail.
  • Terminal: the keypad does not change the amount while a charge is in progress.
  • New invoice and Refund ask before you discard a filled form.
  • Send: a bitcoin: URI that you type stays in the field, and the review reads its amount.
  • Lightning: a node address with no host is refused before the confirmation. A very large flat fee limit or receive expiry is refused.
  • Accounts: "Revoke and remove" works for a key that is already revoked, and a back press cannot stop it halfway. A rename does not reload the session.
  • Notifications: "Mark all as seen" marks all of them, not only the first 50.
  • Payout processors: the interval field accepts a decimal point.
  • Store users: the role is also sent under the key that BTCPay Server 2.4.4 uses.
  • A pasted API key with hidden characters failed with "Could not reach the server". Now these characters are removed. For an .onion server, the app tells you to open the approval page in Tor Browser.
  • TalkBack speaks error banners.

Privacy and security

  • Other apps cannot draw overlays over the app (protection against tapjacking).
  • Secret fields tell the keyboard not to learn what you type.
  • The app does not send an extended private key (xprv, zprv and others) to the server from the derivation scheme field.
  • An empty or truncated encrypted file is put in quarantine and the app lock stays on. Before, an empty settings file turned the app lock off.
  • The StrongBox fallback also works on phones that give a general key error.
  • With no screen lock on the phone, the lock screen tells you to set one. It does not say "try again".
  • An on-chain fee rate above 500 sat/vB shows a warning when no fee estimate is available.
  • You cannot remove the active account while a payment is in progress.
  • No background job runs when the app has no account.
  • A JSON decode error shows a fixed text, not the server's data.

Files

File Use
btcpayapp-0.2.8.apk Release build, signed. Android 15 or later, arm64-v8a.
btcpayapp-0.2.8.apk.sha256 The SHA-256 of the APK, for shasum -c.

Verify the download

  • APK SHA-256: 04fc8a84c604ac20694b8ce8df207f76b056d0f1cfca0a17e82c4d15bdf6ec62
  • Signing certificate SHA-256: 67ac728e39bb4866e613c8f676ab4cbd2baaa6a0d2728c53dcf9913f993727ba
shasum -a 256 -c btcpayapp-0.2.8.apk.sha256
apksigner verify --print-certs btcpayapp-0.2.8.apk

Do not install an APK with a different certificate.

Comments

Loading comments…

See more

Get BtcPayServer the private way

Updates checked on your device, and every release verified before it installs.

Get Zapstore for Android

  1. Tap Download APK below.Scan the code with your Android phone’s camera.
  2. If Android asks, allow your browser to install unknown apps.
  3. Open Zapstore and finish the onboarding.
Download APK

v2.0.4 · 71.2 MB · Android 10+

Verify the download

On a computer, run shasum -a 256 <the file you downloaded>. It should print: b13e01319fecf0b3ba1fd60132758bd0fa08a235836c52d44fddb412cf1b7137

If you have zsp, Zapstore’s publishing tool, zsp utils extract-apk <the file you downloaded> works too. Its hash should be the same SHA-256: b13e01319fecf0b3ba1fd60132758bd0fa08a235836c52d44fddb412cf1b7137

On the phone, AppVerifier should show this signing certificate: 99e33b0c2d07e75fcd9df7e40e886646ff667e3aa6648e1a1160b036cf2b9320

Source code All releases and notes

Get zsp

  1. Download the file for your computer.
  2. Make it executable and put it on your PATH.
  3. In your project folder, run zsp.

Have Go? This does the same:

go install github.com/zapstore/zsp/v2/cmd/zsp@latest
macOS, Apple silicon Linux, x86-64 Linux, arm64

v2.0.1 · macOS and Linux

Verify the download

On your computer, run shasum -a 256 <the file you downloaded>. It should print the SHA-256 for the one you chose.

macOS, Apple silicon · 18.6 MB 99018fb9744e5ace2b44557550dc333496239912c0e9b1137266d4922c803346

Linux, x86-64 · 23.8 MB 1ef5373f8ecd9ba63d2c3fab98abb0d31b2244a2aac31b3749fb205c7d5f5b38

Linux, arm64 · 22.1 MB e421005ee47cba58293dce4277bb784e4cfe706dbbcb8617d671629d0238be18

Source code All releases and notes