On this page
- 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.
| Mistake | Paying a bare address | Paying through Fianto's checkout |
|---|---|---|
| Wrong network | The 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 token | Any 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_). |
| Wrong amount | The 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_). |
| Wrong address | One 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_). |
| Paying twice | Both transfers arrive; you must notice and refund one. | A second transfer for an order already paid is recorded, sent as order. 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:
- 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 - It uses the blockhash Fianto issued for this build, so an old or foreign transaction cannot be replayed (
wrong_).blockhash - The customer's own wallet pays the Solana fee (
wrong_).fee_ payer - 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 - There is exactly one transfer to the merchant, plus one to Fianto's treasury only when there is a fee (
wrong_).transfer_ count - Each transfer moves USDC with USDC's 6 decimals, from the customer's own USDC account (
wrong_,mint wrong_).source - The amounts equal the price and the fee, and the merchant transfer carries the payment's reference key (
wrong_,amount missing_).reference - 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_. 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 checkoutOne 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_. 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:
- 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.
- 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.
- 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.
- If you paid a merchant the wrong amount, ask the merchant. Refunds of USDC are sent by hand from the merchant's own wallet.
- 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. 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.
- Circle: USDC terms, section 13 (on-chain transactions irreversible)
- Circle developer docs: transfer on chain (Circle Mint)
- FBI IC3: companies falsely claiming to recover lost cryptocurrency (11 August 2023)
- Solana documentation: transactions
- Solana: understanding transaction fees (failed transactions still pay)
- Fianto docs: how money moves