Payments & settlement
x402 payments, a five-operation chain adapter, HyperEVM as the live rail, and hourly netted payouts.
Payment in Omnious is not a billing system bolted onto an API. It is the x402 protocol: a request that arrives unpaid gets 402 Payment Required with machine-readable payment requirements, and the retry carries a signed USDC authorization in a header. The request pays for itself, in-band, with no account and no API key. See the request path for the flow beat by beat; this page covers where the money actually moves.
The five-operation chain boundary
The router never talks to a chain directly. All chain work flows through a SettlementAdapter with exactly five operations:
quote(amount): build the x402 payment requirements for this chainverify(payment): pre-flight the signature, balance, and replay protectionsettle(payment): execute the transfer, return a transaction referencepayout(to, amount): USDC transfers for provider payouts and refundsanchor(hash): publish an epoch hash for receipt transparency
The auction, metering, and reconciliation code never import a chain SDK; the adapter is the whole boundary. This works because x402 is itself chain-agnostic (a 402 carries a CAIP-2 network identifier and can offer multiple options), so adding a chain is one adapter file plus a config entry, with zero changes to the core. A mock adapter settles instantly for local development and CI.
HyperEVM, the live rail
Production traffic settles in USDC on HyperEVM: eip155:999 on mainnet, eip155:998on testnet. Two schemes are live, and both are gas-sponsored: the customer only ever signs typed data, and the router's treasury submits the transaction and pays the gas.
- EIP-3009
exact. One signed transfer authorization per request for the quoted maximum; settlement runs concurrently with inference, and any overage refunds automatically. - Permit2
upto. Pay-for-use: sign the maximum once, get charged metered actuals at stream end. No overage, no refunds, no dust.
Hourly epochs, netted payouts
Providers are not paid per request. Every hour the epoch closes and each provider receives one netted USDC transfer covering all its awarded requests, minus the router's 7% fee on cleared volume. Refunds above the $0.01 dust floor go out in the same cron, payouts and refunds ride a durable outbox so a failed transfer is retried rather than lost, and the epoch's records are hashed and anchored on-chain (see tamper evidence).
Money is integers
Every amount in the system is integer USDC base units (6 decimals); prices are base units per million tokens. Floats never touch a balance. That single rule is what makes the reconciliation invariant checkable: per epoch, charges minus refunds minus payouts minus fees minus bad debt must equal exactly zero, and with integers "exactly" means exactly.
designs/solana-adapter.md): SPL USDC via @x402/svm, with the facilitator sponsoring fees so customers never need SOL. It becomes worth switching on when demand arrives from agent traffic holding USDC in plain Solana wallets, and it costs the core nothing: one adapter file, one config entry.- router/src/settle/adapter.ts the SettlementAdapter interface, all five operations
- router/src/settle/evm.ts EIP-3009 exact and Permit2 upto on HyperEVM
- router/src/payouts.ts hourly epochs, netted payouts, refunds, the anchor