-
Notifications
You must be signed in to change notification settings - Fork 12
Home
Over a decade after the creation of Bitcoin there are still very few places accepting cryptocurrencies.
Nobody accepts crypto, because nobody pays with crypto. Nobody pays with crypto, because nobody accepts crypto.
This is known as the chicken and egg problem.
The few places that accept cryptocurrencies often don't offer a very user-friendly experience.
Bitrequest's goal is to take the egg out of the equation, by making the process of accepting cryptocurrencies as easy and user-friendly as possible.
Bitrequest is an application for accepting cryptocurrencies.
The application generates payment requests which can be used as:
- Point of Sale
- Shared with WhatsApp, SMS, email, etc.
- E-commerce checkouts
| Currency | Address Formats | Special Features |
|---|---|---|
| Bitcoin | Legacy (1...), SegWit (bc1q...) | xpub/zpub derivation |
| Lightning | BOLT11 invoices | LND, LNbits, Core Lightning REST, LNURL, Boltcard/NFC |
| Litecoin | Legacy (L...), SegWit (ltc1q...) | Ltub derivation |
| Ethereum | EIP-55 checksum (0x...) | ERC-20 tokens |
| Ethereum L2 | Same as ETH | Base, Arbitrum One, Polygon PoS, BSC |
| Monero | Standard & subaddresses | View key scanning, stealth addresses |
| Kaspa | kaspa:q... (40-bit bech32) | kpub derivation |
| Bitcoin Cash | CashAddr (bitcoincash:q...) | — |
| Dogecoin | Legacy (D...) | dgub derivation |
| Dash | Legacy (X...) | InstantSend support |
| Nano | nano_... | Instant, feeless |
| Nimiq | NQ... | Browser-native |
Bitrequest was built as a non-profit project by XpressZo with the goal of wider crypto adoption.
Donations are welcome.
- Wider crypto adoption
- Improving and maintaining Bitrequest
Payment requests (bitrequests) consist of:
- Cryptocurrency address input
- Amount input (in fiat or crypto)
- URI (Uniform Resource Identifier)
- QR-code (encoded URI)
Amounts in fiat are converted to the equivalent in crypto in real-time.
The QR-code is an encoded URI consisting of app-protocol, address, and amount and can be scanned by most crypto wallet apps. Opening the URI or scanning the QR-code with a crypto wallet will autofill the wallet's send dialog with the corresponding address and amount (if supported).
| Currency | URI Scheme | Example |
|---|---|---|
| Bitcoin | bitcoin: |
bitcoin:bc1q...?amount=0.001 |
| Lightning | lightning: |
lightning:lnbc... |
| Ethereum | ethereum: |
ethereum:0x...?value=1e18 |
| Monero | monero: |
monero:4...?tx_amount=0.1 |
| Kaspa | kaspa: |
kaspa:qp...?amount=100 |
| Litecoin | litecoin: |
litecoin:ltc1q...?amount=0.5 |
Supports Lightning invoices (BOLT11/LNURL) and NFC/Boltcard taps.
When the QR-code is visible, a WebSocket connection is opened in the background that listens for incoming transactions on the request address. When incoming transactions are detected, the request status changes to 'paid' or 'pending', depending on the number of selected confirmations.
| Method | Used For | Providers |
|---|---|---|
| WebSocket | Real-time notifications | BlockCypher, mempool.space |
| Polling | Fallback monitoring | Various block explorers |
| Node RPC | Direct scanning | Electrum, personal nodes |
| View key scanning | Monero privacy | Remote nodes, LWS |
Supports zero-conf and InstantSend for instant feedback on small payments.
Each request has a unique URL which can be shared with WhatsApp, SMS, email, etc.
Bitrequest has a built-in share function which opens your device's share dialog and automatically shortens the URL (optional).
Requests include metadata:
- Title and description (BIP21)
- Fiat amount and currency
- Timestamp for rate locking
Addresses can be added:
- Manually — With QR scanning support
- BIP39 seed phrase — 12 word mnemonics
- Extended public keys — xpub, zpub, Ltub, dgub, kpub
| Currency | Path | Extended Key |
|---|---|---|
| Bitcoin SegWit | m/84'/0'/0'/0/ | zpub |
| Bitcoin Legacy | m/44'/0'/0'/0/ | xpub |
| Litecoin SegWit | m/84'/2'/0'/0/ | zpub |
| Litecoin Legacy | m/44'/2'/0'/0/ | Ltub |
| Ethereum | m/44'/60'/0'/0/ | xpub |
| Kaspa | m/44'/111111'/0'/0/ | kpub |
| Dogecoin | m/44'/3'/0'/0/ | dgub |
| Dash | m/44'/5'/0'/0/ | xpub |
| Bitcoin Cash | m/44'/145'/0'/0/ | xpub |
Multiple addresses can be added per cryptocurrency.
Priority can be set by dragging addresses or selecting randomly for enhanced privacy.
- Monero — View keys for scanning incoming transactions without spend capability
- Lightning — LND/LNbits/Core Lightning REST node connections with invoice generation
- Kaspa — Native kpub support with 40-bit bech32 checksum addresses
Bitrequest saves all shared and received requests and monitors their status by scanning the blockchain.
Features include:
- Transaction history with confirmations
- Receipts (PDF/shareable)
- Archive/unarchive functionality
- Filtering by address, status, or date range
- CSV export for accounting
Set your name or company name. Recipients will see this name on their request.
When Bitrequest is integrated in a webshop, this form can be used to provide billing/shipping information.
Set your country's local currency or one of 170+ world currencies.
Choose where Bitrequest gets its crypto exchange rates from:
- CoinMarketCap (default)
- CoinPaprika
- CoinGecko
Automatic fallback between providers if one fails.
Choose where Bitrequest gets its fiat exchange rates from:
- Fixer (default)
- CoinGecko
- ExchangeRatesAPI
- Currencylayer
When sharing a request, URLs can be shortened:
- Bitly
- Bitrequest's built-in URL shortener
- Or disable URL shortening
See Bitrequest's Privacy Policy.
Bitrequest saves all data on your device. Clearing device storage will lose all data.
Backup options:
- JSON file download — Manual backup
- Google Drive sync — Automatic backup on every change
See Bitrequest's Privacy Policy.
Restore data from a previous backup or import from a different device.
| Mode | Access Level |
|---|---|
| Admin | Full access with PIN |
| Cashier | View-only, create requests only |
PIN protection prevents unauthorized address changes or viewing sensitive request details.
Enter your own API keys for dedicated quotas. By default, Bitrequest's shared API keys are used, which may reach limits under heavy usage.
Bitrequest is a Progressive Web Application (PWA).
~98% of the code runs client-side in the browser.
Programming language: JavaScript (vanilla JS, minimal jQuery).
The source code is 100% open-source: GitHub.
┌─────────────────────────────────────────────────────────┐
│ Client (Browser/PWA) │
├─────────────────────────────────────────────────────────┤
│ UI Layer │ Crypto Layer │ Data Layer │
│ - Request forms │ - BIP39/BIP32 │ - IndexedDB │
│ - QR generation │ - Address gen │ - LocalStorage│
│ - Status display │ - Tx scanning │ - Google Drive│
└────────┬───────────┴─────────┬──────────┴───────┬───────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐
│ API Proxy │ │ Block Explorers │ │ Personal │
│ app.bitrequest │ │ WebSocket APIs │ │ Nodes │
└─────────────────┘ └─────────────────┘ └──────────────┘
Bitrequest implements complex cryptographic protocols in pure JavaScript to maintain a minimal footprint (~877KB zipped total):
| Implementation | Description | Replaces |
|---|---|---|
| BIP39/BIP32 | HD wallet derivation, mnemonic handling | bitcoinjs-lib (~200KB) |
| secp256k1 | Elliptic curve operations, key derivation | elliptic.js (~100KB) |
| Monero Crypto | Ed25519, view key scanning, stealth addresses | monero-javascript (~7MB) |
| Kaspa Bech32 | 40-bit checksum variant, kpub encoding | kaspa-wasm (~7MB) |
| Keccak256 | Ethereum address derivation | js-sha3 (~15KB) |
| CashAddr | Bitcoin Cash address encoding | — |
These implementations are available as standalone libraries for other projects:
| Library | Description | Link |
|---|---|---|
| bip39-utils-js | BIP39/BIP32 HD wallet utilities | GitHub |
| crypto-utils-js | Low-level crypto (secp256k1, hashing, encoding) | GitHub |
| xmr-utils-js | Monero cryptographic utilities | GitHub |
A small PHP proxy handles caching and API calls: proxy source.
API calls are proxied through app.bitrequest.io by default, enabling out-of-the-box usage without personal API keys.
For self-hosting:
- Configure host in config.js
- Provide your own API keys in config.php
Proxy features:
- Multi-API fallbacks
- TOR support
- Response caching to reduce rate limits
All API keys in the GitHub repository are left blank to prevent misuse. Users can:
- Use Bitrequest's shared keys (default, may hit rate limits)
- Enter personal keys in app settings
Connect to remote or local nodes for direct transaction scanning and enhanced privacy.
| Currency | Node Type | Protocol |
|---|---|---|
| Bitcoin/Litecoin | Electrum | TCP/SSL |
| Ethereum | JSON-RPC | HTTP/WebSocket |
| Ethereum L2 | JSON-RPC | HTTP/WebSocket |
| Monero | Remote Node / LWS | HTTP |
| Lightning | LND | REST API |
| Lightning | LNbits | REST API |
| Lightning | Core Lightning | REST API (CLNRest) |
| Feature | LND | LNbits | Core Lightning |
|---|---|---|---|
| Invoice generation | ✓ | ✓ | ✓ |
| Payment monitoring | ✓ | ✓ | ✓ |
| LNURL support | ✓ | ✓ | ✓ |
| Boltcard/NFC | ✓ | ✓ | — |
For Proof-of-Work coins, set minimum confirmations before status changes to 'paid':
| Risk Level | Confirmations | Use Case |
|---|---|---|
| High risk | 0 (zero-conf) | Coffee, small items |
| Medium | 1-2 | Standard purchases |
| Low risk | 3-6 | Large payments |
Dash InstantSend and Nano provide instant finality without confirmation wait.
Monero requires a private view key to scan for incoming transactions while maintaining sender privacy. Bitrequest scans:
- Standard addresses
- Subaddresses
- With view tag optimization for faster scanning
Kaspa uses a unique address format:
- Derivation path: m/44'/111111'/0'/0/
- Extended keys: kpub (0x038f332e) / kprv (0x038f2ef4)
- Address format: kaspa:q... (67 characters)
- Checksum: 8-character (40-bit) vs Bitcoin's 6-character
Compatible with KasWare and Kaspium wallets.
When a request is sent in fiat currency, time passes between sending and payment. Due to crypto volatility, Bitrequest:
- Records the exchange rate at request creation
- Fetches the rate at payment time via CoinGecko/CoinPaprika historical APIs
- Compares received amount against original fiat value
- Displays any over/underpayment
Rates are cached client-side for efficiency.
Bitrequest can be used as a checkout for e-commerce websites.
- Documentation: Webshop Integration Wiki
- Demo: bitrequest.io/brewery
Features:
- Multi-chain support
- Lightning payments
- Real-time status callbacks
- Customizable UI
Bitrequest is available on:
- iOS: App Store
- Android: Google Play
These native apps are wrappers for the PWA bitrequest.github.io, providing:
- Consistent experience across browsers
- Native sharing
- App store discoverability
Interactive test suites for verifying crypto implementations:
- BIP39 Utils Tests — HD wallet derivation, xpub/kpub generation
- Crypto Utils Tests — Address generation, hashing, encoding
- XMR Utils Tests — Address generation, Monero related cryptography