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.