FLOWPAY
Stablecoin Payments Infrastructure
Global payment infrastructure powered by programmable digital money.

Accept stablecoin payments that reconcile themselves, settle predictably, and behave like a payments API rather than a wallet.
- Payment intents
- Double-entry ledger
- Reorg-safe watchers
- Signed webhooks
- Multi-chain
Merchant accounts, payment links, settlement and treasury for stablecoin payments across Ethereum, Polygon and Solana — with a developer API that behaves like a payments API, not a wallet.
What the product is built around.
FLOWPAY models a payment as an intent with a lifecycle, not a transfer. The intent knows what was owed, what arrived, on which chain, and what still needs to happen — so reconciliation is a property of the system rather than a spreadsheet the merchant maintains.
Payment intents, not addresses
Each payment is a first-class object with an expected amount, accepted chains, expiry and a deterministic lifecycle the merchant can query.
Exactly-once webhooks
Delivery is at-least-once over the wire with an idempotency key, so integrators can be correct without building their own dedup layer.
Settlement as policy
Merchants declare a settlement currency, threshold and schedule. Sweeps and conversions execute against that policy automatically.
What makes this hard.
Accepting stablecoins is technically simple and operationally painful. A merchant does not want a wallet address — they want an invoice that reconciles, a settlement they can forecast, a webhook that fires exactly once, and a refund path that works when the customer paid on the wrong chain.
- 01
Under- and over-payments are common and nothing handles them automatically
- 02
The same customer pays on three different chains and reconciliation breaks
- 03
Webhooks fire more than once, or not at all, and merchants build their own dedup
- 04
Gas volatility makes the true cost of a payment unpredictable
- 05
Treasury is left holding volatile balances with no sweep policy
What the system does.
FLOWPAY models a payment as an intent with a lifecycle instead of a transfer to an address. The intent knows what was owed, what arrived, on which chain and what still has to happen, so reconciliation is a property of the system rather than a spreadsheet the merchant maintains. Under- and over-payments are typed events with resolution paths, and settlement runs against a declared policy.
Payment intents with expiry, tolerance and multi-chain acceptance
Under- and over-payment handled automatically with top-up or refund
Signed, replayable webhooks with idempotency keys so integrators stay correct
Double-entry ledger with enforced invariants — never a live chain read
Settlement by threshold and schedule with cost estimated before the sweep
FLOWPAY, as working interface.
Rendered UI, not a mockup. Switch between screens, and try ⌘K for the command palette.
Volume, success rate and settlement latency across every network.
Volume (30D)
$18.61M
Payments
42,918
Avg settlement
11.4s
Exceptions open
18
Payment volume
30DVolume by network
- Ethereum41.9%
- Polygon33.3%
- Solana24.7%
Success rate
Excludes customer-abandoned intents- Below target≤ 960
- Watch≤ 985
- On target≤ 995
- Exceptional≤ 1000
Recent payments
| Payment | Merchant | Network | Asset | Amount | Fee | Settled | Status |
|---|---|---|---|---|---|---|---|
| pay_8fK2qLmR4x | Northwind Studio | Polygon | USDC | $4,280.00 | $1.28 | 8.2s | Succeeded |
| pay_3vTn9pWcHb | Lumen Commerce | Solana | USDC | $912.40 | $0.06 | 2.1s | Succeeded |
| pay_QzR7yD2sNv | Atlas Freight | Ethereum | USDT | $18,640.00 | $9.42 | 14.8s | Succeeded |
| pay_Lb4mK8tXaW | Corvid Labs | Ethereum | USDC | $2,400.00 | $8.91 | — | Underpaid |
| pay_7hJ5nCvRte | Meridian Goods | Polygon | EURC | €6,120.00 | €1.84 | 9.6s | Succeeded |
| pay_Wm2XpQ9dLk | Tessera Retail | Solana | USDC | $740.00 | $0.05 | — | Pending |
| pay_Yc6BvN3fTq | Northwind Studio | Ethereum | USDC | −$1,200.00 | $7.20 | 21.4s | Refunded |
7 of 42,918 payments in the selected window · amounts shown for illustration
Payment lifecycle — pay_8fK2qLmR4x
- settlement.queued+11.4s
Threshold policy met · included in next sweep to acct_merchant_91
- payment.succeeded+8.2s
Webhook delivered 200 OK in 142ms · idempotency key recorded
- Confirmations reached+6.1s
Polygon · 12 confirmations · finality policy satisfied
- Transfer detected+2.4s
4,280.00 USDC to intent address · amount matched exactly
- payment.created+0.0s
Intent opened · 3 network addresses derived · 30m expiry armed
Exception detail
- Payment
- pay_Lb4mK8tXaW
- Expected
- $2,480.00
- Received
- $2,400.00
- Shortfall
- $80.00
- Tolerance
- 0.50%
- Resolution
- Top-up link sent
- Auto-expire
- in 22m
Treasury allocation
float policy- Ethereum float$1.84M / $2.5M
- Polygon float$0.87M / $1.5M
- Solana float$1.36M / $1.5M
- Settlement account$2.20M
- Gas reserve$41.2K / $160K
Cost per payment
by networkDeveloper API — create a payment
API consoleconst payment = await flowpay.payments.create({ amount: { value: "4280.00", currency: "USD" }, accept: { assets: ["USDC", "USDT"], networks: ["ethereum", "polygon", "solana"], }, reference: "order_10482", expiresIn: "30m", settlement: { to: "acct_merchant_91", policy: "threshold" }, metadata: { customerId: "cus_5512" }, }); // -> payment.id "pay_8fK2qLmR4x" // -> payment.status "requires_payment" // -> payment.checkoutUrl "https://pay.flowpay…/8fK2" // -> payment.addresses { ethereum: "0x…", solana: "…" } flowpay.webhooks.verify(req.body, req.headers, SECRET);Webhook deliveries
- payment.succeededpay_8fK2qLmR4x · 200 OK · attempt 1142ms
- payment.underpaidpay_Lb4mK8tXaW · 200 OK · attempt 1208ms
- settlement.completedset_4kR2 · 200 OK · attempt 196ms
- payment.succeededpay_QzR7yD2sNv · 502 → retry · attempt 3backoff 4s
- refund.completedref_9Xm1 · 200 OK · attempt 1118ms
- payment.expiredpay_2Nb8vKqPdR · 200 OK · attempt 187ms
Interface states
UI statesNo payments yet
Create a payment link or call the API to accept your first payment.
Create payment linkEmpty stateNetwork degraded
Ethereum RPC latency exceeded 8s. New Ethereum intents are paused; Polygon and Solana are unaffected.
How it is put together.
Chain watchers are isolated per network so one degraded RPC provider cannot stall settlement on the others.
- 01
Checkout & Dashboard
Hosted checkout, merchant dashboard and the developer API console.
- Next.js
- React
- TypeScript
- 02
Payments API
Payment intents, refunds, idempotency, signed webhooks and delivery logs.
- Node.js
- REST
- HMAC
- Idempotency keys
- 03
Chain Watchers
Per-network listeners with confirmation policy, reorg handling and backfill.
- Go
- WebSocket
- Reorg-safe cursor
- 04
Settlement Engine
Sweep policy, conversion routing, gas estimation and payout batching.
- Rust
- Queue
- Fixed-point maths
- 05
Ledger
Double-entry ledger recording every movement with balance invariants enforced.
- PostgreSQL
- Double-entry
- Append-only
- 06
Networks
Ethereum, Polygon and Solana with per-network address derivation.
- EVM
- Solana
- HD derivation
What the product does.
The capability set the demonstration is built around.
Payment links
Hosted checkout and shareable links with expiry, multi-chain acceptance and branding.
Merchant accounts
Sub-accounts, role-based access, per-account settlement policy and limits.
Stablecoin acceptance
USDC, USDT and EURC across three networks with automatic chain detection.
Settlement engine
Threshold and schedule-based sweeps with conversion routing and cost estimates.
Treasury
Balance allocation across chains, float management and payout scheduling.
Transaction monitoring
Live payment states, exception queues and address risk screening.
API & webhooks
REST API, typed SDKs, signed webhooks with replay and delivery logs.
Challenges, and the MaatX approach.
The problems that actually decide whether a system like this survives production — and how we address each one.
A customer pays the wrong amount, twice, on a chain you did not expect
Intents accept partial and excess payment within a declared tolerance and emit typed exception events. Over-payment triggers a refund path; under-payment issues a top-up link against the same intent.
Webhooks must be reliable without making integrators build dedup
Every event carries a stable idempotency key and is retried with exponential backoff. Delivery attempts are logged and replayable, so a merchant outage never loses an event.
Reorgs can un-confirm a payment you already told the merchant succeeded
Confirmation policy is per network and per amount band. Watchers track a reorg-safe cursor and emit a compensating event rather than silently mutating a settled payment.
Balances must never be derived from a chain read at display time
All movement is recorded in a double-entry ledger with enforced invariants. Chain state is an input to the ledger, never the answer the merchant sees.
Gas cost makes per-payment economics unpredictable on Ethereum
Settlement batches by threshold and value band, and cost is estimated before a sweep. Low-value payments route to cheaper networks by policy rather than by hope.
The stack behind it.
Payment intents & API
- Node.js
- TypeScript
- REST
- Idempotency keys
- Intent state machine
- HMAC-signed webhooks
- Replayable delivery log
Chain watchers
- Go
- WebSocket subscriptions
- Reorg-safe cursor
- Per-network confirmation policy
- Cursor backfill
- HD address derivation
- Provider failover
Settlement & treasury
- Rust
- Fixed-point arithmetic
- Threshold sweep policy
- Gas estimation
- Payout batching
- Conversion routing
- Per-network float policy
Ledger & reconciliation
- PostgreSQL
- Double-entry ledger
- Append-only journal
- Balance invariants
- Daily reconciliation
- Exception queues
Networks & assets
- Ethereum
- Polygon
- Solana
- EVM
- ERC-20 transfer decoding
- SPL token accounts
- USDC, USDT & EURC
Checkout & dashboard
- Next.js
- React
- TypeScript
- Tailwind CSS
- Hosted checkout links
- QR payment URIs
Platform & operations
- Docker
- Kubernetes
- Redis
- Kafka
- OpenTelemetry
- Structured audit logs
How it grows with the business.
The same system at three stages. Most products should not start at the third — but the architecture should not have to be thrown away to get there.
One chain, one stablecoin, with the intent model and ledger correct from day one.
- Single network and asset
- Hosted checkout and payment links
- Webhook delivery with retries
- Double-entry ledger
Multi-chain acceptance with automated treasury and settlement.
- Three networks with automatic chain detection
- Settlement policy and conversion routing
- Exception queues for under/over-payment
- Developer API, SDKs and console
Platform-grade payments with sub-accounts and reporting.
- Merchant sub-accounts with per-account policy
- Recurring and metered billing on the same primitive
- Reconciliation exports for finance systems
- Regional on/off-ramp partners
Where it could go next.
Directions this system would extend into.
- 01
Recurring and metered billing built on the same intent primitive
- 02
On/off-ramp partners for local-currency settlement
- 03
Programmable escrow and milestone-based release
- 04
Merchant-facing dispute and chargeback-equivalent workflow
- 05
Account abstraction so customers pay without holding gas
Taking stablecoin payments and needing them to reconcile like payments rather than like transfers?
We built FLOWPAY to work through exactly this. Tell us where you are and we will tell you what we would do differently for your constraints.
