How does a USDT payment on Solana work?

There is no deposit address: the buyer's wallet pays your Solana treasury wallet directly. The buyer scans a Solana Pay QR code with Phantom, Solflare or any Solana Pay wallet.

The buyer chooses Solana and USDT on the hosted checkout, so there is no per-network code on your side. Your server learns the outcome from a signed webhook (payment.settled), which is the authoritative signal to fulfil an order.

What does it cost to accept USDT on Solana?

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 Solana treasury wallet. Add a Solana treasury wallet in the dashboard (one wallet per network family).
  3. Enable Solana. Turn on Solana in Settings → Networks of the merchant dashboard so buyers can choose it at checkout.
  4. Create a payment link or checkout session. Issue a no-code payment link from the dashboard, or create a session from your server and open it with the SDK.
  5. Fulfil on the webhook. Verify the HMAC signature on the payment.settled webhook, then release the goods or service.

Open a hosted checkout where buyers can pay USDT on Solana

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
});