# Configuration Reference BTPay loads configuration in this order (later overrides earlier): 1. `config_default.py` — built-in defaults 2. `config.py` — your local overrides (git-ignored) 3. Environment variables prefixed with `BTPAY_` ## All Configuration Options ### Core | Setting | Type | Default | Env Var | Description | |---------|------|---------|---------|-------------| | `SECRET_KEY` | string | `'CHANGE-ME-IN-PRODUCTION'` | `BTPAY_SECRET_KEY` | Flask secret key. **Must change in production.** | | `DEV_MODE` | bool | `True` on macOS | — | Development mode. Enables debug toolbar, verbose logging. | | `DATA_DIR` | path | `./data` | — | Directory for JSON data files and backups. | ### Security Keys | Setting | Type | Default | Env Var | Description | |---------|------|---------|---------|-------------| | `REFNUM_KEY` | hex string | (dev default) | `BTPAY_REFNUM_KEY` | 32-byte hex key for NaCl SecretBox reference number encryption. | | `REFNUM_NONCE` | hex string | (dev default) | `BTPAY_REFNUM_NONCE` | 24-byte hex nonce for NaCl SecretBox reference numbers. | | `JWT_SECRETS` | dict | (dev defaults) | `BTPAY_JWT_ADMIN`, `BTPAY_JWT_LOGIN`, `BTPAY_JWT_API`, `BTPAY_JWT_INVITE` | Per-purpose JWT signing secrets. | ### Sessions | Setting | Type | Default | Description | |---------|------|---------|-------------| | `AUTH_COOKIE_NAME` | string | `'btpay_session'` | Name of the auth session cookie. | | `SESSION_COOKIE_HOURS` | int | `720` (30 days) | Session lifetime in hours. | ### Rate Limiting | Setting | Type | Default | Description | |---------|------|---------|-------------| | `RATE_LIMIT_LOGIN` | dict | `max_attempts=5, window=60` | Login rate limit (attempts per window in seconds). | | `RATE_LIMIT_API` | dict | `max_attempts=100, window=60` | API rate limit per key. | | `RATE_LIMIT_CHECKOUT` | dict | `max_attempts=30, window=60` | Checkout page rate limit. | ### Bitcoin | Setting | Type | Default | Description | |---------|------|---------|-------------| | `BTC_QUOTE_DEADLINE` | int | `30` | Minutes to lock the BTC exchange rate for an invoice. | | `BTC_MARKUP_PERCENT` | decimal | `0` | Percentage markup added to the exchange rate. | | `MAX_UNDERPAID_GIFT` | decimal | `5` | USD threshold below which underpayment is accepted as paid. | | `BTC_CONFIRMATION_THRESHOLDS` | list | `[(100,1), (1000,3), (None,6)]` | (max_usd, required_confirmations) pairs. `None` = any amount. | ### Exchange Rates | Setting | Type | Default | Description | |---------|------|---------|-------------| | `EXCHANGE_RATE_SOURCES` | list | `['coingecko', 'coinbase', 'kraken']` | APIs to fetch rates from. Options: `coingecko`, `coinbase`, `kraken`, `bitstamp`, `mempool`. | | `EXCHANGE_RATE_INTERVAL` | int | `300` | Seconds between rate fetches. | | `SUPPORTED_CURRENCIES` | list | `['USD','EUR','GBP','CAD','AUD','JPY','CHF']` | Fiat currencies to fetch rates for. | ### Network & Privacy | Setting | Type | Default | Env Var | Description | |---------|------|---------|---------|-------------| | `SOCKS5_PROXY` | string | `''` | `BTPAY_SOCKS5_PROXY` | SOCKS5 proxy URL for Tor (e.g. `socks5h://127.0.0.1:9050`). | | `MEMPOOL_API_URL` | string | `'https://mempool.space/api'` | `BTPAY_MEMPOOL_URL` | mempool.space API endpoint. Use your own instance for privacy. | | `ELECTRUM_SERVERS` | list | `[{host: 'blockstream.info', port: 50002, ssl: True}]` | — | Electrum protocol servers for SPV verification. Configurable per-org in Settings > Electrum Server. | ### Email (SMTP) | Setting | Type | Default | Env Var | Description | |---------|------|---------|---------|-------------| | `SMTP_CONFIG.host` | string | `''` | `BTPAY_SMTP_HOST` | SMTP server hostname. | | `SMTP_CONFIG.port` | int | `587` | `BTPAY_SMTP_PORT` | SMTP port. Use 587 for STARTTLS, 465 for SSL. | | `SMTP_CONFIG.username` | string | `''` | `BTPAY_SMTP_USER` | SMTP authentication username. | | `SMTP_CONFIG.password` | string | `''` | `BTPAY_SMTP_PASS` | SMTP authentication password. | | `SMTP_CONFIG.from_email` | string | `''` | `BTPAY_SMTP_FROM` | Sender email address. | | `SMTP_CONFIG.from_name` | string | `'BTPay'` | `BTPAY_SMTP_FROM_NAME` | Sender display name. | ### Stablecoin RPC Stablecoin payment monitoring uses public RPC endpoints by default (no API keys needed). Configure per-org in **Settings > Stablecoin RPC**. | Setting | Description | |---------|-------------| | Provider | `public` (default), `alchemy`, `ankr`, or `custom` | | Monitoring | Enable/disable automatic balance polling | | Check interval | Seconds between balance checks (default: 60, min: 15) | Supported chains: Ethereum, Arbitrum, Base, Polygon, Optimism, Avalanche, Tron, Solana. Supported tokens: USDC, USDT, DAI, PYUSD. ### Webhooks | Setting | Type | Default | Description | |---------|------|---------|-------------| | `WEBHOOK_RETRY_DELAYS` | list | `[60, 300, 900, 3600, 7200]` | Seconds between retry attempts for failed webhook deliveries. | ### Data Persistence | Setting | Type | Default | Description | |---------|------|---------|-------------| | `AUTOSAVE_INTERVAL` | int | `60` | Seconds between automatic data saves to disk. | | `BACKUP_INTERVAL` | int | `3600` | Seconds between automatic backup rotations. | | `BACKUP_KEEP` | int | `5` | Number of backup copies to retain. | ### Software Updates | Setting | Type | Default | Description | |---------|------|---------|-------------| | `UPDATE_REPO` | string | `'btpay-org/btpay'` | GitHub repository for update checks. | | `UPDATE_ALLOWED` | bool | `True` | Set to `False` to disable self-update from UI and CLI. | ## Example config.py ```python # Production configuration SECRET_KEY = 'a1b2c3d4e5f6...' # 64 hex chars DEV_MODE = False REFNUM_KEY = 'a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4' REFNUM_NONCE = 'f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1' JWT_SECRETS = { 'admin': 'secret-admin-key-here', 'login': 'secret-login-key-here', 'api': 'secret-api-key-here', 'invite': 'secret-invite-key-here', } # Bitcoin BTC_QUOTE_DEADLINE = 15 # Lock rate for 15 minutes BTC_MARKUP_PERCENT = 1 # 1% markup on exchange rate EXCHANGE_RATE_SOURCES = ['coingecko', 'coinbase', 'kraken', 'bitstamp'] # Privacy — route through Tor SOCKS5_PROXY = 'socks5h://127.0.0.1:9050' MEMPOOL_API_URL = 'http://your-mempool-instance.onion/api' # Email SMTP_CONFIG = { 'host': 'smtp.mailgun.org', 'port': 587, 'username': 'postmaster@mg.yourdomain.com', 'password': 'your-mailgun-password', 'from_email': 'payments@yourdomain.com', 'from_name': 'Your Business Name', } # Data AUTOSAVE_INTERVAL = 30 # Save more frequently BACKUP_KEEP = 10 # Keep more backups ``` ## Environment Variables Every setting can be overridden via environment variables prefixed with `BTPAY_`. Examples: ```bash export BTPAY_SECRET_KEY="your-secret-key" export BTPAY_SOCKS5_PROXY="socks5h://127.0.0.1:9050" export BTPAY_MEMPOOL_URL="https://your-mempool.com/api" export BTPAY_SMTP_HOST="smtp.example.com" export BTPAY_SMTP_PORT="587" export BTPAY_SMTP_USER="user" export BTPAY_SMTP_PASS="password" export BTPAY_SMTP_FROM="payments@example.com" ```