Skip to content

Security

Built to move money safely

Pay never holds your funds, and everything it does hold, from provider credentials to sessions, is protected on the assumption that someone will try to steal it.

  • No custody: money stays in your accounts
  • A second factor on every sign-in
  • Credentials encrypted and bound to their record
  • Tenant isolation enforced by the database

Sign-in

Every dashboard session needs a password and a second step: a passkey, an authenticator app or an emailed code. Passwords are hashed with Argon2id, session tokens are stored hashed, and a password change ends every session.

Provider credentials

Consumer secrets, passkeys and cached tokens are encrypted with a key ring and bound to the record they belong to, so a copied value fails to decrypt anywhere else. Keys rotate without breaking payments in flight.

Isolation

Every workspace and project boundary is enforced by PostgreSQL row-level security, not just application code. The application connects as an ordinary role that cannot bypass it.

People and permissions

Six roles, from admin to viewer, decide who can charge, pay out, reconcile or manage keys. Permissions are checked again on the server for every request, and staff actions are written to an audit log.

Security questions

Something else? Ask us.

Can Noria move money out of my account?

Pay only makes the requests your team or your API keys ask for, with the credentials you configured. Noria has no account your money passes through.

How are webhooks protected?

Every webhook is signed with your endpoint's secret and a timestamp. Pay also refuses to deliver to private network addresses in production.

Where do I report a security issue?

Email [email protected] with the details. We respond to every report.

Guides

All guides

Related

Ready to take payments properly?

Tell us what you are building and which providers you use. We set up your workspace and help you go live.