/check-btcpay
Audit BTCPay Server configuration. Output findings as structured report.
What This Does
-
Check Greenfield API connectivity
-
Audit store configuration
-
Review webhook endpoints + signature verification
-
Check payment notification settings
-
Verify Lightning node connection
-
Verify wallet hot/cold separation
-
Output prioritized findings (P0-P3)
This is a primitive. It only investigates and reports. Use /log-production-issues to create issues or /check-production for infra review.
Process
- API Connectivity (Greenfield API health)
export BTCPAY_URL="https://btcpay.example.com" export BTCPAY_API_KEY="your-api-key"
Greenfield health
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/health"
List stores (requires valid API key)
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/stores" | jq
- Store Configuration
Set STORE_ID from the stores list above
export STORE_ID="store_id_here"
Store details
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/stores/$STORE_ID" | jq
Enabled payment methods
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/stores/$STORE_ID/payment-methods" | jq
- Webhook Endpoints + Signature Verification
List configured webhooks
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/stores/$STORE_ID/webhooks" | jq
Webhook handlers in code
find . -path "/api/webhook" -name ".ts" 2>/dev/null | head -5
Signature verification in handlers?
grep -rE "btcpay|webhook.signature|hmac" --include=".ts" . 2>/dev/null | grep -v node_modules | head -5
- Payment Notification Settings
In-app notification handlers (invoice paid/confirmed)
grep -rE "invoice.(paid|confirmed|expired)|payment.(received|settled)" --include="*.ts" . 2>/dev/null | grep -v node_modules | head -5
Check for notification URL/config in app env
grep -rE "BTCPAY_.(NOTIFY|NOTIFICATION|WEBHOOK)" --include=".env*" . 2>/dev/null | head -5
- Lightning Node Connection
Confirm Lightning payment method enabled at store
curl -s -H "Authorization: token $BTCPAY_API_KEY" "$BTCPAY_URL/api/v1/stores/$STORE_ID/payment-methods" | jq
Lightning node health checks in repo
grep -rE "lnd|lightning|lnurl|bolt11" --include="*.ts" . 2>/dev/null | grep -v node_modules | head -5
- Wallet Hot/Cold Separation
Look for hot wallet usage or private keys in repo
grep -rE "xprv|seed|mnemonic|private key" --include=".ts" --include=".env*" . 2>/dev/null | grep -v node_modules | head -5
Watch-only setup hints (xpub descriptors)
grep -rE "xpub|ypub|zpub|descriptor" --include=".ts" --include=".env*" . 2>/dev/null | grep -v node_modules | head -5
- Deep Audit
Spawn btcpay-auditor agent for comprehensive review:
-
Invoice lifecycle handling (new, paid, confirmed, expired)
-
Webhook signature verification and replay protection
-
Store policies vs code expectations
-
Lightning vs on-chain fallback behavior
-
Wallet key custody and backup posture
Output Format
BTCPay Audit
P0: Critical (Payment Failures)
- Greenfield API unreachable -
GET /api/v1/healthfails - Webhooks not receiving events (no active endpoints)
- Store has no enabled payment methods
P1: Essential (Must Fix)
- Webhook signature not verified - security risk
- Invoice status handling missing (paid/confirmed/expired)
- Lightning payment method enabled but node not connected
- Notification URL missing or misconfigured
P2: Important (Should Fix)
- No retry/backoff on webhook delivery failures
- Payment method config inconsistent between store and app
- Hot wallet usage detected without separation plan
- No monitoring of invoice settlement latency
P3: Nice to Have
- Add separate store for test vs production
- Add automated webhook replay tooling
- Add dashboard for invoice outcomes
Current Status
- Greenfield API: Unknown
- Stores: Unknown
- Webhooks: Unknown
- Notifications: Unknown
- Lightning: Unknown
- Wallet separation: Unknown
Summary
- P0: 3 | P1: 4 | P2: 4 | P3: 3
- Recommendation: Fix API connectivity + webhook verification first
Priority Mapping
Gap Priority
Greenfield API unreachable P0
No enabled payment methods P0
Webhooks not receiving events P0
Webhook signature not verified P1
Missing invoice status handling P1
Lightning node not connected P1
Notification URL missing P1
Missing retry/backoff P2
Config mismatch store vs app P2
Hot wallet without separation P2
Monitoring gaps P2
Optimization/analytics P3
Related
-
/check-lightning
-
Lightning setup review
-
/check-bitcoin
-
On-chain wallet review
-
/check-production
-
Infra readiness
-
/log-production-issues
-
Create issues from findings