We never touch the money. We prove it moved.
Emprise is non-custodial. Funds move directly from your customer's wallet to your wallet, on-chain. Our job is narrower and harder to get wrong: make sure the right address was paid the right amount, then tell you about it safely.
Non-custodial by design
No hot wallet. No balance. No withdrawal surface. Nothing to drain, nothing to freeze, nothing to lose. The customer signs a transaction to your address directly; we read the chain to confirm it landed.
Four invariants we never break
A payment app's security reduces to these. Each one has a concrete, testable control behind it.
Recipient is write-once
The payout address is set server-side when you create a session and can never be changed by a public endpoint, a settle call, or any client input. Payments cannot be redirected.
Paid only when the chain says so
A session is marked paid only after on-chain verification: the right recipient, the right token, enough amount, enough confirmations. The customer's claim is never trusted.
Webhooks are signed
Every outbound webhook carries an HMAC-SHA256 signature with a timestamp. You verify the raw body, reject stale timestamps, and dedupe by event id.
Secrets stay secret
API keys are hashed at rest and never logged. Webhook secrets live encrypted in the database. Public responses return only what the checkout needs to render.
Threats, and how we stop them
Infrastructure and transport
Honest about where we stand
No cardholder data, by design
We never store, process or transmit PANs or cards, so PCI DSS does not currently apply. De-scoping is itself a valid PCI strategy. Adding card or fiat rails would re-enter scope.
Type 2 is the target
Our controls map to the Trust Services Criteria. We will claim SOC 2 only after a CPA engagement and an observation window, not before. This page documents the controls, not a certification.
Found a security issue?
We welcome responsible disclosure. Report it to us and we will respond fast.