Security and control
Built to observe payments,
not control funds.
MainPay is non-custodial. Funds move directly from a payer to a merchant-controlled address; MainPay does not become a party to that transfer.
What MainPay can and cannot do
What we read and store
To monitor a workspace, MainPay reads public receiving addresses and the supported USDC and USDT transfer data associated with them, including transaction hashes, source and destination addresses, stablecoin amounts, network, block time, and confirmations. We store those observations alongside the workspace's operational records, such as invoice or order context, labels, reconciliation state, audit events, and webhook delivery status.
Access and secrets
Passwords are hashed with Argon2 and browser sessions use secure, HTTP-only cookies. API keys are shown once, stored as hashes, scoped to a workspace and mode, and revocable. Webhook signing secrets are shown only when created or rotated; MainPay stores the active signing secret so it can authenticate deliveries with the documented t=,v1= signature scheme. Workspace roles restrict owner-only changes, and accountant access is read-only.
Confirmations and chain changes
Receiving wallets have configurable confirmation thresholds. MainPay records the observed transaction and its confirmation state before treating a payment as confirmed. Chain reorganizations and other chain changes can affect what a provider reports, so MainPay keeps the on-chain transaction evidence attached to the operational record for review; it is not a finality guarantee.
We never need
- Seed phrases or private keys
- Withdrawal-enabled exchange credentials
- Permission to sign, send, or custody funds
Report vulnerabilities privately to security@mainpay.com.