Crypto payments

Buy a PrivacyFlow subscription with privacy-preserving crypto — invoice lifecycle, supported assets, and the rate-limit lift that comes with paid tier.

PrivacyFlow bills in privacy-preserving crypto. No billing address, no credit card, no KYC. The dashboard’s Billing section issues an invoice, you pay to the displayed address, and on confirmation your account moves to paid tier — which lifts the send rate limit from 600 to 2000 messages per minute.

Open Billing

  1. Sign in to the dashboard.
  2. Open Billing (or Transactions / Invoices, depending on your dashboard version).

Warning

Screenshot placeholder — Billing section overview showing current tier, supported assets, and an “New invoice” button.

Supported assets and prices

The dashboard reads supported crypto assets and their prices from the backend’s /dashboard/configuration endpoint at runtime — the dashboard never hardcodes them. That means the asset list you see may differ from what’s described here; treat the list below as illustrative.

Warning

Illustrative — your dashboard shows current supported assets and prices. The data below is a sample, not a contract.

Asset (sample)NetworkNotes
XMRMoneroNative asset, strongest privacy.
ETHEthereum / Base / Polygon / BSCNative coins on several EVM networks.
USDCmultiple networksStablecoin — predictable fiat value.
USDTmultiple networksStablecoin — predictable fiat value.
TRONTRONNative coin.

For real prices and the current asset list, open your dashboard’s Billing section — the /dashboard/configuration fetch is what populates the UI.

Create an invoice

  1. From Billing, click New Invoice.
  2. Pick the asset you want to pay in.
  3. The dashboard creates the invoice and opens the Crypto Payment Modal.

Warning

Screenshot placeholder — Crypto Payment Modal showing asset, amount, a QR code, and the destination address with a Copy button.

The modal shows:

  • The destination address (copyable).
  • A QR code encoding the address and amount for wallet scanning.
  • The invoice status (pending, confirming, paid, expired, cancelled).
  • A Cancel button if you change your mind before payment.

Invoice lifecycle

StatusMeaning
pendingInvoice created, awaiting payment to the address.
confirmingPayment received, awaiting on-chain confirmations.
paidConfirmed. Paid tier activates within seconds.
expiredInvoice window elapsed with no payment. Create a new one.
cancelledOperator- or user-initiated cancellation.

The dashboard polls /dashboard/invoices/:id/payment-status to update the modal in real time. You can leave the modal open and watch the status flip from confirming to paid.

What paid tier unlocks

The most operationally relevant benefit: the send rate limit rises from 600 to 2000 messages per minute per credential. Polling rate is unchanged.

EndpointFreePaid
GET /api/v1/messages/poll100 req/min100 req/min
POST /api/v1/messages/send600 messages/min2000 messages/min

For a broadcast of 5,000 messages, free-tier finishes in ~8 minutes (10 batches of 50); paid-tier in ~2.5 minutes. The paid tier also removes any per-account caps the operator may set on the free tier.

See rate limiting for how the limits are enforced and why the limit counts messages, not requests.

Cancel an invoice

From the Crypto Payment Modal or the Invoices list, click Cancel. The invoice moves to cancelled and the destination address stops accepting payments. Any crypto already sent before cancellation still confirms per normal chain rules — coordinate cancellation before you pay.

After payment

Once the invoice hits paid, the dashboard flips your account tier in the next /dashboard/user fetch. The new rate limit takes effect on the next /api/v1/messages/send call — no restart, no re-issue of credentials. Existing pf_live_... keys keep working with the higher budget immediately.

Tip

Paid tier applies to your account, not to individual credentials. Every credential issued under a paid account gets the 2000/min send budget. Re-issue keys if you want; rotation isn’t required for the tier change.

Underlying API calls

UI actionAPI route
Billing page loads — supported cryptos + pricesGET /dashboard/api/dashboard/configuration (returns BillingConfiguration; publicly readable, no session required)
Current tier / invoices listGET /dashboard/api/dashboard/invoices
Click “New invoice” → pick asset → generatePOST /dashboard/api/dashboard/invoices with { asset, planId }
Crypto Payment Modal polls for statusGET /dashboard/api/dashboard/invoices/:invoiceId/payment-status (polled until paid)
Click “Cancel”POST /dashboard/api/dashboard/invoices/:invoiceId/cancel with empty body
Get a single invoice by idGET /dashboard/api/dashboard/invoices/:invoiceId

Pricing and supported assets must never be hardcoded — the dashboard pulls them from GET /dashboard/configuration at runtime. See the dashboard’s AGENTS.md “Billing configuration” section for why. The account API reference covers the full route surface.

Last updated: