Pay x402 from any chain, any token. Settle instantly in USDC on Base


omni402 is a clearing layer between fragmented user liquidity and x402 USDC invoices. It solves a critical problem in web3 payments: users have tokens scattered across multiple chains, but merchants want to receive payments in a single, stable currency on one chain.
Today, if a merchant wants to accept crypto payments, they need to:
Meanwhile, users are forced to bridge tokens, swap to the right asset, and pay high gas fees—often abandoning the purchase entirely.
omni402 makes this seamless:
For Users: Pay with whatever you have—ARB, ETH, USDC on Arbitrum, or any supported token. No bridging required. One click and you're done.
For Merchants: Sign up with email, get a CDP-managed wallet, and receive instant USDC settlements on Base. No crypto complexity, no seed phrases, just a dashboard showing your payment history.
For Developers: Two lines of code to protect any API endpoint with x402 payments. Wrap your route handler with requirePayment() and you're monetizing.
The settlement pool provides instant liquidity so merchants don't wait for the cross-chain message—they get paid in seconds, not minutes.
omni402 turns any HTTP endpoint into a cross-chain monetizable resource, powered by the x402 protocol standard.
omni402 is built on three main pillars: LayerZero V2 for cross-chain messaging, 1inch Aqua for token swaps, and Coinbase Developer Platform for merchant wallets.
Extends LayerZero's OApp for bidirectional messaging. When a user pays, it:
The central coordinator that:
_lzReceivelzCompose for atomic settlement + confirmationShare-based liquidity pool that enables instant settlements. LPs deposit USDC and earn fees from payments. The pool ensures merchants get paid immediately without waiting for cross-chain finality.
We use the full OApp pattern with both OAppSender and OAppReceiver for round-trip messaging. The executor options include both lzReceive gas (200k) and lzCompose gas (150k) to handle the settlement composition pattern.
The hacky part: we use sendCompose to trigger a self-compose, which allows atomic execution of settlement + return message in a single transaction. This ensures the merchant gets paid and the confirmation gets sent in one atomic operation.
Instead of routing through AMMs with slippage, we use 1inch Aqua's resolver network. The EdgePayment contract stores a pre-configured swap order (strategy hash), and resolvers fill the other side of the trade. This gives users better execution than typical DEX aggregation.
The taker traits IS_EXACT_IN and USE_TRANSFER_FROM_AND_AQUA_PUSH allow the router to pull tokens from our contract while resolvers push USDC output directly to us.
Merchants authenticate with email via CDP Auth and get an embedded wallet automatically. No seed phrases, no MetaMask—just email login. We use @coinbase/cdp-hooks for React integration:
useCoinbaseAuth for authentication stateuseFundWallet for onrampuseWalletBalance to display USDC balanceThe TypeScript SDK provides:
requirePayment() wrapper for Next.js route handlersOmni402Provider context and useOmni402 hookThe client intercepts 402 responses, shows the payment modal, and retries with X-PAYMENT header containing the transaction hash.
Express.js service with Prisma/PostgreSQL that:
PaymentSettled events to update statusBuilt for ETHGlobal Buenos Aires 2025.

