Getting paid
Hourly epochs, netted payouts minus the 7% fee, durable outboxes, and independent reconciliation.
You never invoice. The router's streaming proxy meters every fill, customers are charged actuals at your cleared prices, and your side of the market is one number per hour: a netted USDC payout.
One netted transfer per epoch
Settlement runs in hourly epochs. When an epoch closes, everything you earned in it nets into a single transfer to your payout_address, minus the router's fee of 7% of cleared volume. There is no per-request settlement noise on your books and no gas cost on your side: payouts arrive as plain USDC transfers on HyperEVM (eip155:999 in production, eip155:998 on testnet), with the treasury paying gas.
The outbox means a payout is never lost
Payouts flow through a durable outbox. If a transfer fails independently of the epoch (a treasury gas hiccup, an RPC blip), the amount is recorded as owed and retried at every subsequent epoch close until it lands. A crash between epochs cannot strand what you are owed: the outbox is persistent state, not an in-memory queue.
Refunds net through the same epoch
Customer-side refunds (overage above the authorized max, and unspent session budgets returned at close) ride the same epoch machinery as first-class flows. They net against the epoch's totals rather than clawing anything back from you: your payout is computed from metered usage records at cleared prices, and refunds are the customer's side of the same ledger.
Reconcile to zero, or something is wrong
The system's money invariant is that every payment, refund, and payout reconciles to zero per epoch, and that money is integers: all amounts are USDC base units, and floats never touch a balance. bun scripts/reconcile.tschecks the invariant independently of the code that moves the money, so you do not have to take the router's word for it. Each epoch's records are also hashed and anchored on-chain, making the books tamper-evident after the fact. More on this under tamper evidence.
Reading your records
Every fill produces a signed usage record you can fetch at GET /v1/receipts/:id (or bun cli/omnious.ts receipt <request_id>), carrying token counts, cleared prices, the fee split, and the payment reference. After an epoch closes, the payouts table holds your netted transfer with its transaction reference and the epoch anchor. The analytics surface adds the economics: GET /v1/analytics/requests/:idshows any fill's full auction story, and your per-provider outcome feed shows what you won, what you were paid up to, and why you lost the rest.
- router/src/payouts.ts the durable payout and refund outbox, epoch close, on-chain anchor
- router/scripts/reconcile.ts the independent reconcile-to-zero check over every epoch
- router/src/billing.ts bill, router fee, and max charge, defined once in integer base units