To accept USDC payments online, first decide exactly which USDC token representation and blockchain routes your business will support. Then create one payment request for each order, show the customer the token, network, amount, address and expiry together, and use a trusted server-side result to mark the order paid. A manual wallet transfer can work for rare supervised sales. A tracked payment link is safer for invoices sent in chat or email. An API-created invoice is the better fit when a website must match payments and fulfil orders automatically.

DecisionMinimum safe answer
Which asset is accepted?The exact USDC contract or mint configured for an explicitly supported network
Which implementation?Manual transfer, tracked payment link or API invoice, chosen by sales volume and order workflow
What does the customer see?Purpose, exact USDC amount, network, address or QR code, expiry and live status
What marks the order paid?A confirmed, matching transaction connected to the correct invoice
Where do funds settle?A merchant wallet, provider balance or fiat payout selected before launch
What happens when details do not match?Preserve the evidence and send the case to a defined manual review process

Define “USDC” before accepting it

USDC is a dollar-denominated stablecoin issued by Circle on multiple blockchains. Circle describes it as backed by highly liquid cash and cash-equivalent assets and redeemable 1:1 for US dollars through eligible Circle services. It also publishes reserve information and monthly assurance reports on its transparency page. That issuer information helps a business evaluate the asset, but it does not by itself configure a safe checkout.

Every enabled payment route must identify three things: the blockchain, the token contract or mint and the receiving address. A ticker is not enough. Two wallets can display assets named USDC even when one is Circle-issued native USDC and the other is a bridged or wrapped representation. Circle publishes the official USDC contract addresses and explicitly distinguishes native USDC from some bridged versions such as USDC.e. A payment system expecting the native contract must not accept another token merely because its symbol looks correct.

This is also why a merchant should never copy a broad list of Circle-supported blockchains into checkout. Circle may issue USDC on a network that the merchant wallet, exchange or payment provider does not support. Product support is narrower than issuer support. The live checkout configuration, not a general marketing page, must be the final source of truth for customers.

Choose the acceptance model

The same phrase—accept USDC—can describe very different operational models. Choose the model by how orders originate and where the business wants the funds to end up.

ModelBest fitWhat the business still owns
Manual wallet transferA few supervised paymentsInstructions, verification, order matching and exception handling
Tracked payment linkQuotes, client work and sales agreed in chat or emailCreating the invoice, wallet operations, refunds and records
API and hosted checkoutEcommerce, SaaS and online servicesLocal order state, integration, fulfilment and exceptions
Custodial processorA business comfortable with a provider balanceProvider access, withdrawal rules and reconciliation
Converted settlementA business that wants fiat or another assetEligibility, payout timing, conversion cost and accounting

A raw address is the smallest setup, but it carries no commercial context. If two customers send 100 USDC to the same wallet, the blockchain does not know which product, customer or invoice each transfer concerns. A payment link improves the process by giving one obligation its own amount, status and checkout. An API invoice connects that request to the website’s existing order before the customer pays.

Do not automate only because an API is available. A consultant collecting one deposit a month may prefer a payment link. A service selling access while staff are offline needs server-side status and repeat-safe fulfilment. The payment-link guide covers the no-code workflow, while the website payment use case shows the automated path.

Select networks from real customer and wallet behavior

Start with the smallest route set that serves actual customers. For each route, confirm all of the following:

  • the customer’s wallet or exchange can withdraw native USDC over that exact network;
  • the merchant wallet can receive and display the official token;
  • the payment product monitors the same token contract or mint;
  • the merchant knows how it would fund network fees and send a refund;
  • support staff can identify the correct block explorer and route name.

GramPayBot currently supports configured USDC routes on Ethereum, Optimism, BNB Smart Chain, Base, Polygon, Arbitrum and Solana. Not every route with a USDC label is necessarily Circle-issued native USDC: for example, the current BNB Smart Chain contract is not present in Circle’s native-contract list. Treat the product catalog and its exact contract addresses as dated route information, not a permanent issuer claim. Enable only routes visible in the current project configuration and supported by the wallet that will receive the funds. The wallets and networks guide explains how route settings affect checkout.

More networks do not automatically improve conversion. Each one adds another wallet balance, refund path, fee asset and customer-support scenario. A business whose buyers consistently use Base and Solana may operate more reliably with those two routes than with a long list no one has tested.

Create one invoice for one customer obligation

The commercial record should exist before the crypto payment request. Create the ecommerce order, account top-up, subscription purchase or project milestone in the merchant system and assign it an immutable internal ID. Then create the payment invoice and save the returned invoice ID beside the order.

For an API integration, pass the merchant order reference in a machine-readable field such as payload. Use a stable idempotency key when creating the invoice so a timeout and retry cannot generate two active checkouts for the same order. The customer should receive only the current checkout URL. If the price or order changes, cancel or expire the old request and create a deliberate replacement rather than editing context around a reusable address.

This relationship lets the final payment result answer two different questions:

  1. Did a valid USDC transfer reach the expected route?
  2. Which business order is allowed to move forward?

The blockchain answers the first question. The saved order-to-invoice relationship answers the second. The focused guide to matching crypto payments to customer orders explains the full correlation and webhook workflow.

Give the customer one complete instruction

USDC transfers are normally irreversible from the customer’s perspective, so checkout should resolve ambiguity before the wallet asks for approval. Keep these details together:

  • what the payment is for;
  • the exact amount and USDC token label;
  • the full blockchain network name;
  • the complete receiving address and QR code;
  • the time remaining before the invoice expires;
  • the current waiting, paid, expired or cancelled status.

Do not send the address in one message and the network in another. Do not assume the wallet will infer the route from the address: several EVM networks use the same address format. Ask the customer to compare the network and visible destination before signing. If the customer sends from an exchange, the exchange’s withdrawal-network label must correspond to the checkout route.

Circle-issued native USDC commonly uses six decimal places, but another configured representation can use different token decimals; the current GramPayBot BNB Smart Chain route uses 18. The buyer should never perform that unit conversion. Show the exact payable amount returned by the invoice, let the route catalog supply token precision and use decimal arithmetic in business systems. Do not compare money using binary floating-point values or invent an undocumented tolerance.

Verify payment on the server, not in the browser

A checkout return page is user interface, not settlement evidence. The browser can close before confirmation, revisit an old success URL or display manipulated client-side state. A screenshot and a customer-supplied transaction hash are also insufficient on their own: a real hash can refer to the wrong token contract, network, recipient, amount or order.

For a supervised payment, inspect the transaction on the correct network and compare its status, token contract, recipient and amount with the open invoice. The manual verification checklist gives a safe sequence. For an automated website, use an authenticated invoice lookup or a valid signed webhook. Store the transaction hash and payment timestamp with the order so support can reconstruct the result later.

Webhook processing must be idempotent. A delivery system may retry the same event when the first response is slow or lost. Verify the signature over the raw body, persist a stable event or delivery key, acknowledge quickly and ensure the fulfilment operation can commit only once. A repeated paid notification must not ship twice, activate two plans or credit the same account twice.

Decide custody and settlement before comparing fees

Some providers receive the customer’s USDC and later credit an internal balance. Others convert it to fiat. A direct-to-wallet tool can monitor checkout while the transaction goes straight to a public address controlled by the merchant. These are different products even if all of them display a USDC button.

Document the entire funds path:

customer wallet → blockchain route → receiving party → optional conversion → final business balance

With direct-wallet settlement, the merchant controls the wallet and outgoing refunds but also owns key security, network fees, treasury decisions and recordkeeping. The payment service should need only a public receiving address, never a seed phrase or private key. With a custodial or converted model, review eligibility, payout timing, access restrictions, conversion spreads and refund mechanics.

Product-level differences matter. Shopify’s current USDC payment documentation, for example, lists its own supported networks, regional eligibility, payout choices and refund behavior. Those terms describe Shopify—not USDC in general. Evaluate every provider at the same product and account level.

Prepare for late and incorrect transfers

Write exception rules before the first real customer pays. At minimum, cover:

  • native USDC arrives after the invoice expires;
  • the customer sends too little or too much;
  • a different token contract reaches the address;
  • USDC arrives on another supported or unsupported network;
  • the customer pays an older invoice after the order changed;
  • the transaction is detected but has not reached the required confirmation state;
  • the customer requests a refund after funds reached the merchant wallet.

Do not silently convert these situations to paid. Preserve the real transaction evidence and route the case to an authorized reviewer. A wrong-network transfer may require wallet-specific recovery and can be impossible to recover. A direct-to-wallet gateway cannot send a refund from a wallet it does not control; the merchant must decide and execute that operation.

Choose a supported USDC route

Check the complete route matrix before enabling a network. Compare native USDC on Ethereum, Base, Polygon and Arbitrum with the exact asset offered by the sender.

How GramPayBot fits

GramPayBot creates USDC invoices and monitors supported blockchain routes while customer funds go directly to the public wallet configured by the merchant. A seller can create a payment link manually in Telegram or the web cabinet. A website can create an invoice through the API, attach its own order reference in payload, open the returned hosted checkout and receive payment state through the API or signed webhooks.

GramPayBot owns the payment request, checkout and matching transaction status. The merchant owns the product order, wallet, fulfilment, refund policy, treasury and accounting. There is no merchant revenue balance inside GramPayBot and no automatic fiat payout. Start with the API quickstart and implement the signed webhook workflow before granting a product automatically.

Launch with one controlled USDC route

Begin with one product, one network and a low-value real payment. Confirm that checkout displays the intended USDC contract on the selected route, the address belongs to the configured business wallet, the transfer arrives, the invoice reaches paid and the local order retains its original reference and transaction hash. Then test expiry, a duplicated webhook and an incorrect amount without allowing automatic fulfilment.

Expand only after the team can follow the complete chain from customer order to wallet settlement and support an exception without guessing. A good USDC checkout gives the customer one unambiguous instruction and gives the business one order-linked, server-verified result.

Next step

Automate payment verification on your website

Create an invoice for each order, let the buyer pay through hosted checkout and receive an order-linked result.

Explore website payments →