Trust and security

Payments require trust. Flow is built accordingly.

This page says what Flow does with payment data, in plain English, and is careful not to claim more than it does.

Payment data

What goes straight to the processor

Card numbers and bank account numbers are entered into a payment form served by Stripe and are sent from your customer's browser to Stripe. They do not pass through Flow's servers and Flow never stores them.

What Flow stores

Payment amount, status, timestamps, the payer's name and email, a label such as "Visa ending 4242", your references and notes, and the processor's identifiers. Enough to show you a ledger, never enough to charge a card.

PCI, precisely

Stripe's certification

Stripe, which processes payments for Flow merchants, is certified as a PCI DSS Level 1 service provider. That certification is Stripe's, not Flow's.

Flow's responsibility

Flow is designed so that card data never touches it, which keeps Flow's own PCI scope to the smallest category. Flow does not claim PCI Level 1 certification for itself.

Encryption

In transit

Every Flow page, the merchant app, the customer pay page, the API and webhooks are served only over HTTPS (TLS). Plain HTTP is redirected.

At rest

Flow's database holds no card or bank numbers, so there is nothing of that kind to encrypt. Passwords are stored as salted hashes. API keys are stored hashed; the full key is shown once, when you create it.

Account security

Passwords

Hashed with the PHP default algorithm (bcrypt or stronger), never stored in the clear. Minimum 10 characters.

Two-step sign-in

Time-based one-time codes from an authenticator app. Turn it on in Settings. Flow also supports it for the Dark Water console.

Sessions

Cookies are HttpOnly, Secure and SameSite. Signing in issues a fresh session.

Rate limits

Sign-in, sign-up and password reset are throttled per address. Too many tries and you wait.

Sign-in by link for customers

Your customers never set a password. They get a one-time emailed link to see receipts and manage upcoming payments.

Forms

Every form carries an anti-forgery token tied to the session.

API and webhook security

API keys

  • Sent as a bearer token over HTTPS only
  • Stored hashed; revoke and create a new one from the Developers page at any time
  • Charges accept an idempotency key so a retry can never bill twice

Notices to your software

  • Each notice is signed with your notice secret (HMAC-SHA256 over a timestamp and the body)
  • The timestamp lets you reject replays
  • Failed deliveries are retried for a day

Notices from Stripe to Flow are verified the same way, with Stripe's signing secret, before Flow acts on them.

Who does what

Stripe

Moves the money. Verifies businesses as the law requires, holds balances, pays out to your bank, screens for fraud and handles the card-network side of disputes.

Flow

Everything you and your customers touch: sign-up, pay links, invoices, scheduling, receipts, the ledger, the API, and the records that tie each payout to its payments.

You

Keep your sign-in and API keys private, respond to disputes by their deadline, and only take payment for goods and services you provide.

Activity log and reporting a problem

What is logged

Sign-ins, sign-ups, refunds, API key changes and account changes are written to an audit log with the actor, the action, the time and the address it came from.

Found something?

Email [email protected] with "security" in the subject. We read every report and will reply. A dedicated disclosure address and policy are planned.

From invoice to paid.

Create your account, connect your bank, send your first payment link. No monthly fee. No long-term contract. Clear transaction pricing.