Safe by design.

These are controls built into how Speedy works, not promises on a page. Questions from your security team are welcome.

Your account

Passwords are hashed

We store passwords with argon2id. We never store or see the password itself.

One-time codes expire

Codes are six random digits, stored only as a keyed hash, valid for ten minutes, with five attempts and a cooldown before you can ask for another.

Sessions end on their own

Your browser holds a random token and we keep only its hash. A session ends after 30 idle minutes, or 12 hours in all.

Every change is checked

Each state-changing request is checked against an allow-list of origins and a token that belongs to your session.

Your money

No stored balance

Each transfer is funded by its own bank payment, and refunds return to that same account.

A ledger enforced by the database

Postings are balanced and immutable, and the application connects with a least-privilege role.

Safe to retry

Every payment request is idempotent, so a retry or a double tap cannot move money twice.

Prices only we set

Fees, rates and limits are set on our servers. A client cannot supply or change them.

Our controls

Screened before money moves

Recipients are checked before a transfer exists. A flagged transfer stops and nothing is charged.

Two people for sensitive actions

Staff sign in with a password and an authenticator code. Limit changes and case decisions need a second person, enforced by the database.

Webhooks fail closed

Partner webhooks are verified by signature over the raw body. A missing or wrong secret is a rejection.

Account numbers are encrypted

Recipient account numbers are encrypted in the database.

Security questions?

Our team answers security and diligence questions by email.