No Fianto fee during the beta. Any fee comes with at least 30 days notice. See pricing
PaymentsWallets9 min read

Wrong amount, wrong token, wrong network: crypto payment mistakes and how to avoid them.

Once a crypto transfer is final, nobody can pull it back: not your wallet, not the network and not Circle, whose USDC terms say "Circle does not have the ability to reverse or recall any transaction once initiated." The only way to get mistaken USDC back is for whoever controls the receiving address to send it, and anyone who offers to "recover" it for a fee is almost certainly running a scam. A checkout that builds the transaction for the customer removes the usual mistakes before the wallet opens: on Fianto the amount, the token, the network and the destination are fixed by the server and checked again after signing.

On this page
Can a crypto payment sent by mistake be reversed?Are crypto recovery services real?What are the most common crypto payment mistakes?How does a signed checkout stop these mistakes?What should you do if you sent USDC to the wrong address?What should a merchant do when a customer pays the wrong amount?SourcesQuestions
TL;DR
  • A finalized USDC transfer cannot be reversed by anyone. Only the owner of the receiving address can send the money back.
  • The FBI warned in August 2023 that recovery scheme fraudsters charge an up-front fee, and that private sector recovery companies cannot issue seizure orders.
  • At Fianto's checkout the customer signs a transaction Fianto built, and Fianto refuses to broadcast it if the token, amount, destination or transfer count differs.

Can a crypto payment sent by mistake be reversed?

A crypto payment sent by mistake cannot be reversed once the network has finalized it. There is no issuer, bank or card network in the middle with the power to claw it back. Circle, which issues USDC, says so in section 13, "Risk Factors & Disclosures", of its USDC terms (marked "Last Updated: December 12, 2025", and written for holders outside the European Economic Area). Under "You accept all consequences of sending USDC" it says: "USDC transactions are not reversible." Under "On-chain transactions irreversible" it puts the losses from sending USDC to an incorrect or unintended address on the user who sent it.

A Solana transaction is all or nothing. Solana's transaction documentation says: "If any instruction fails, the entire transaction fails and all state changes are reverted." So a payment either lands in full at the address it named, or it does not land at all. There is no half-sent state to rescue, and no pending period in which you can cancel it once it is final.

What remains is a request. If the address belongs to a person or a business you can reach, such as the shop you meant to pay or an exchange, you can ask them to send it back. They are under no technical obligation to do it, and nobody else can do it for them.

Are crypto recovery services real?

Crypto recovery services that charge a fee to get lost crypto back are a known fraud pattern, and the FBI has warned about them. Its Internet Crime Complaint Center published a public service announcement on 11 August 2023, "Increase in Companies Falsely Claiming an Ability to Recover Funds Lost in Cryptocurrency Investment Scams". It describes the pattern: "Recovery scheme fraudsters charge an up-front fee and either cease communication with the victim after receiving an initial deposit or produce an incomplete or inaccurate tracing report and request additional fees to recover funds." And it adds: "Private sector recovery companies cannot issue seizure orders to recover cryptocurrency."

The same notice says these fraudsters contact victims directly on social media or messaging platforms, and advertise in the comments under news articles and videos about crypto, in search results and on social media. A real exchange or merchant that can help you will answer through its own support channel, and will never ask for a fee to return your own money.

What are the most common crypto payment mistakes?

The common crypto payment mistakes come from the customer typing or choosing something by hand: the network, the token, the amount or the address. The table compares what each one does when a customer pays a bare wallet address and when they pay through Fianto's hosted checkout.

MistakePaying a bare addressPaying through Fianto's checkout
Wrong networkThe USDC goes out on another chain. Circle's Circle Mint docs, on deposits to a Mint address, warn: "Sending funds on the wrong blockchain results in permanent loss."The page lists only Solana wallets. The backend runs on one cluster, mainnet in production, and checks at start-up that its RPC providers answer with mainnet's genesis hash.
Wrong tokenAny token can be sent to an address, including one that calls itself USDC. You notice only when you check the mint.The USDC mint address is written into the code, not read from a setting. A signed transfer of any other mint is refused (reason wrong_mint).
Wrong amountThe customer types 2.50 instead of 25.00, and 2.50 arrives.The amount comes from the merchant's price or the server's amount. A changed amount is refused (wrong_amount).
Wrong addressOne character copied wrong, or an address swapped by malware, and the money goes to a stranger.The destination is the USDC account of the merchant's receiving wallet, which the merchant proved with a signature. An extra transfer anywhere else is refused (wrong_transfer_count).
Paying twiceBoth transfers arrive; you must notice and refund one.A second transfer for an order already paid is recorded, sent as order.duplicate_payment and listed in Needs attention.

None of this helps once money has left on a transfer the customer built by hand. A checkout only prevents mistakes in transactions it builds. Why a bare address leaves more for you to check is in what a hosted USDC checkout does that a wallet address does not.

How does a signed checkout stop these mistakes?

A signed checkout stops payment mistakes by taking every choice out of the customer's hands and then checking the signed result before it reaches the network. Fianto's backend builds the transaction, the customer's wallet only signs it, and Fianto broadcasts it. In between, the backend decodes what came back and compares its meaning with what it built, because a wallet may re-encode the bytes. These are the checks, in the order the code runs them, with the reason each failure is logged under:

  1. The transaction is under the size limit, decodes, is a legacy transaction and has no bytes the decoded message does not account for (too_large, undecodable, not_legacy, trailing_bytes).
  2. It uses the blockhash Fianto issued for this build, so an old or foreign transaction cannot be replayed (wrong_blockhash).
  3. The customer's own wallet pays the Solana fee (wrong_fee_payer).
  4. Every instruction belongs to the Compute Budget program or the Token program, and every Token instruction is a checked transfer (unexpected_program, unexpected_token_instruction).
  5. There is exactly one transfer to the merchant, plus one to Fianto's treasury only when there is a fee (wrong_transfer_count).
  6. Each transfer moves USDC with USDC's 6 decimals, from the customer's own USDC account (wrong_mint, wrong_source).
  7. The amounts equal the price and the fee, and the merchant transfer carries the payment's reference key (wrong_amount, missing_reference).
  8. The customer's signature is present and valid (missing_signature, bad_signature).

If any check fails, Fianto does not broadcast, and the customer reads the checkout's message for transaction_mismatch. It opens with "The signed payment did not match what we prepared, so we did not send it." and, since the customer has signed by then, goes on to ask them to check their wallet for any earlier approval before paying again. The failed check itself is never shown to the payer: it goes only into Fianto's logs.

Let the checkout build the payment, so the amount, the token and your wallet are never typed by hand.

See the hosted checkout

One condition sits with the merchant: the receiving wallet must already hold a USDC token account, an account that holds one token for one wallet. Without it, Fianto refuses before the customer signs, with merchant_token_account_missing. How money moves end to end is on How money moves in the docs.

What should you do if you sent USDC to the wrong address?

If you sent USDC to the wrong address, work through these steps in order, and stop at the first one that applies:

  1. Find the transaction in your wallet's activity and open it in a Solana explorer. Note the signature, the receiving address, the token and the amount.
  2. Check whether it landed at all. A transaction that failed or never landed moved no USDC, though a failed one still cost its small SOL fee (Solana confirms failed transactions pay fees). Why a transaction fails, and what each checkout error means, is in why a Solana payment failed.
  3. If the receiving address belongs to someone you can reach, such as the shop or an exchange, write to their support with the signature and ask for a return.
  4. If you paid a merchant the wrong amount, ask the merchant. Refunds of USDC are sent by hand from the merchant's own wallet.
  5. If the address belongs to nobody you can identify, treat the money as lost. Ignore anyone who contacts you offering to recover it.

What should a merchant do when a customer pays the wrong amount?

A merchant who receives a wrong or extra payment returns it the same way it came: by sending USDC from the receiving wallet back to the customer's wallet. Fianto has no refund API and never holds the money, so it cannot send a refund for you. A policy to copy and the steps are in how to refund a USDC payment, and why nothing replaces a chargeback is in chargebacks vs crypto refunds.

Through Fianto's checkout a customer cannot underpay, because Fianto never broadcasts a transfer of a different amount. A double payment is still possible. Fianto also looks on chain for transfers that carry a checkout session's reference key, and a second one for an order already paid is recorded, sent to your webhook as order.duplicate_payment with its signature and amount, and shown under Needs attention in the dashboard.

A transfer the customer sends to your wallet by hand, outside the checkout, carries no reference, so Fianto links it to no order. You match it yourself from your wallet's history. The other questions customers ask after paying are in ten questions customers ask when paying in USDC.

Sources
Questions

Questions about crypto payment mistakes.

Can Circle reverse a USDC transfer sent to the wrong address?

No. Circle's USDC terms say it cannot reverse or recall a transaction once initiated, and that the sender bears losses from sending USDC to an incorrect address.

Can I get crypto back if I sent it to the wrong network?

Only if whoever controls the receiving address on that network sends it back, for example an exchange that agrees to help. Circle's Circle Mint docs, writing about deposits to a Mint address, say that sending funds on the wrong blockchain results in permanent loss.

Is a crypto recovery service a scam?

Treat one as a scam. The FBI warned in August 2023 that recovery scheme fraudsters charge an up-front fee and that private sector recovery companies cannot issue seizure orders, and no one can reverse a finalized transfer.

Can a customer pay the wrong amount through Fianto's checkout?

No. Fianto builds the transaction with the exact price, and a signed transaction with a different amount, token or destination is never broadcast.

What happens if a customer pays the same order twice?

Fianto records the second transfer, sends order.duplicate_payment to your webhook and lists it in Needs attention. You refund it by sending USDC back from your wallet.

Read next.

Wallets7 min read

Sign message vs sign transaction: what you are approving in a Solana wallet

Signing a message proves you control a wallet and moves nothing: the signature goes back to the site that asked, never to the network, and costs no fee. Signing a transaction authorises instructions that run on chain, which can move tokens and cost a small network fee once the network processes them. Fianto uses both, on purpose: merchants prove their receiving wallet and customers sign in to the portal with a message, while a payment, a subscription and a cancel are transactions.

Solana8 min read

Why did my Solana payment fail? Common errors in plain English

The usual reasons a Solana payment fails sit in the wallet: too little of the token being sent, too little SOL for the network fee and the minimum balance, no account for that token yet, or a transaction signed too late, after its blockhash expired. A Solana transaction is all or nothing, so a failed one moves no tokens, though one that reached the network and failed still costs its small SOL fee. On a Fianto checkout most of these are caught before your wallet even opens, and the page names the one that stopped you.

Guides9 min read

How to refund a USDC payment and record it, with a refund policy template

To refund a USDC payment taken with Fianto, you send USDC from your own receiving wallet to the customer's wallet, because Fianto never holds the money and has no refund API. That transfer is yours: you sign it and pay its Solana fee in SOL. Fianto charges you nothing for it, and cannot see it either, so you keep the record yourself.

Take the typing out of payments.

Fianto builds each transaction, and checks it again after the customer signs.

New posts are announced on X and Discord.