How do Arbitrum payments settle?

Each checkout gets its own deposit address on Arbitrum, created ahead of time. Once the buyer's payment reaches 5 confirmations, it is forwarded automatically to your EVM treasury wallet. Funds are never pooled in an InfraIO Pay balance.

Which tokens can I accept on Arbitrum?

USD Coin (USDC, ERC-20, 6 decimals); Tether USD (USDT, ERC-20, 6 decimals). On EVM networks you can also list a verified ERC-20 of your own from the dashboard.

  • USDC contract: 0xaf88d065e77c8cC2239327C5EDb3A432268e5831
  • USDT contract: 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9

What does it cost to accept payments on Arbitrum?

There is no setup fee, no monthly minimum and no charge on failed, expired or cancelled payments. A platform fee applies only when a payment settles, and it is recalculated automatically from your settled volume over the last 30 days: 0.5% under $50,000, 0.4% from $50,000 to $250,000, and 0.3% from $250,000.

For example, on a $1,000 payment the fee is $5 at 0.5%, $4 at 0.4%, $3 at 0.3%. Above the public floor, custom rates are available by contact.

How do I set it up?

  1. Create a merchant account. Sign up at app.infraio.xyz and verify your email.
  2. Connect a EVM treasury wallet. Add an EVM treasury wallet once; it covers every EVM network.
  3. Enable Arbitrum. Turn on Arbitrum in Settings → Networks so buyers can choose it.
  4. Share a payment link or open a checkout. Create a payment link in the dashboard or open a session with the SDK.

Open a hosted checkout; buyers choose Arbitrum there

import { loadInfraIo } from "@lartech/infraio-checkout-js";

// 1. On your server: POST /b2b/v1/checkout-sessions/quick (HMAC-signed with
//    your secret key) returns { session_key, checkout_url }.
// 2. In the browser, open the hosted checkout with those two values:
const sdk = await loadInfraIo("pk_live_yourkeyhere");

sdk.checkout({
  sessionId: session_key,
  checkoutUrl: checkout_url,
  mode: "popup", // or "redirect" / "embed"
  onSuccess: () => showThanks(), // UX only: fulfil from the webhook
});