FAQ & troubleshooting
402 loops, wallet funding, testnet switching, and the common provider quoter mistakes.
Short answers to the questions that actually come up, customer side first, then providers and challengers. Each answer links to the page that explains the mechanism behind it.
Why did I get a 402 error?
It is not an error; it is the price quote. Every unpaid request answers 402 Payment Requiredwith the worst-case cost at the auction winner's cleared prices. Sign the USDC authorization and retry the same request with the PAYMENT-SIGNATURE header. The SDK and CLI do this handshake for you; if you are seeing a raw 402, you are speaking the API directly without an x402 client. See Paying with x402.
Why was I charged less than I authorized?
By design. The authorization is a worst-case ceiling; you are billed metered actuals, the tokens the router itself counted at the cleared prices. On the exact scheme the overage refunds automatically at epoch close; on the upto scheme the router settles only the actual, so there is no overage in the first place. Your receipt shows both numbers (authorized and charged).
How do I switch between testnet and mainnet?
The web app proxies to per-network routers configured by ROUTER_URL_TESTNET and ROUTER_URL_MAINNET; the network chip in the header writes the omnious-router cookie and reloads, and every request follows the cookie. For the CLI and SDK, point OMNIOUS_ROUTER_URL (or routerUrl) at the router you want.
How do I fund a wallet?
The live rail is HyperEVM USDC: eip155:999 mainnet, eip155:998 testnet. omnious keygenmints a key locally; send USDC to its address on the router's chain and run omnious welcome to check connectivity and balance. Local mock-chain routers need no key and no funds.
Do I need gas?
No. You only ever sign typed data; the router submits the transaction and pays the gas. USDC is the only asset you need on any rail.
Can providers see my prompts? Does the router store them?
The winning provider necessarily sees your prompt; it has to run the model. The router itself keeps receipts, not transcripts: prompt and reply bodies pass through bounded in-memory stream buffers, swept within minutes, and are never written to disk. The one exception is a patient limit order, whose prompt must survive until the fill and is scrubbed in the same transaction that closes the order. See Privacy: zero retention.
What happens if the provider fails mid-stream?
You are not charged for a failed delivery: the error carries code provider_failed, and retrying re-runs the auction, most likely landing on a different provider. The failure also feeds the failing provider's measured reliability, which costs it future auctions.
Why did my quote get rejected? (providers)
The ingest gate checks four things: the TTL (valid_until must be in the future and no more than 30 seconds ahead), the signature (EIP-191 over the pipe-joined payload, by your registered key, in the exact field order), the allowlist (unknown or disabled provider ids are refused), and replay (a cancelled quote id cannot be resurrected within its TTL window). The rejection reason comes back in the response; clock skew and field-order mistakes cause most of them. See The quote book.
Why is my provider quarantined?
An upheld model-integrity challenge quarantines the model claim it was filed against: your quotes for that claim stop being routed until the operator restores standing. The verdict, the slash, and the path back are described in The three verdicts and Provider bonds & quarantine.
Why can't I file a challenge against this receipt?
One live challenge per receipt: if one is already open you get 409 already_challenged. You must also be an approved challenger with enough settled points to cover the stake; price it first with GET /v1/model-integrity/challenges/quote, which returns the stake, the potential slash and bounty, and your eligibility in one read.
Where do I see what rival providers would have charged?
GET /v1/analytics/requests/:id (CLI: omnious economics <id>) reconstructs the auction for any request: who competed, what every losing quote would have cost you, and the second-score premium. It is the receipt's companion document and it is public.
- router/src/server.ts the error responses quoted above
- router/src/quotes.ts quote ingest rejection reasons