Skip to main content
The Payment Router transfers USDC from an external wallet to the seller and links the payment to a checkout session on-chain. Locus uses that link to confirm payment and notify the merchant. The hosted checkout handles the contract interaction. Use this page when verifying a payment or building a custom wallet integration.

How external wallet payments work

  1. The buyer approves the router to spend the checkout’s USDC amount.
  2. The buyer calls pay() with the session ID, seller address, and amount.
  3. The router transfers USDC and emits CheckoutPayment.
  4. Locus marks the session as paid and sends the merchant a webhook.

Contract addresses

The router is not deployed on Base Sepolia. USDC on Base Sepolia uses 0x036CbD53842c5426634e7929541eC2318f3dCF7e (chain 84532).

Verify on BaseScan

Open the Payment Router on BaseScan.
  • Events shows CheckoutPayment records with the session, buyer, seller, and amount.
  • Read Contract lets you call sessionPaid(bytes32) to check a specific session.
  • Contract contains the verified source and ABI for direct integrations.

Contract interface

Use pay(bytes32 sessionId, address recipient, uint256 amount) for the standard payment flow. payWithPermit supports an EIP-2612 permit to combine approval and payment. The contract exposes sessionPaid(bytes32) and usdc() for verification. Read the verified contract for the complete interface.

Session ID encoding

Remove the UUID’s dashes, left-align its hex value, and zero-pad it to 32 bytes:

USDC amounts

USDC uses six decimals. A payment of 25.00 USDC is 25000000 base units.