On this page
- A bare address cannot tell two customers paying the same amount apart; a Fianto session puts a unique reference key on the transfer and matches it to your order_id.
- On a Fianto checkout the amount, the USDC mint and your wallet are written into the transaction by Fianto, and a signed transaction that differs is never broadcast.
- Your server hears order.paid only at finalized, never at the earlier confirmed step; the merchant pays nothing for any of it.
What does a hosted checkout add to a wallet address?
A hosted checkout adds a record around the payment: what was owed, by whom, until when, and whether it arrived. A checkout session is that record. It is one payment page for one of your orders, created by your server (or by a shop or payment link) and hosted by the gateway. A wallet address, by contrast, is only a place money can land. The other jobs a gateway does are in what a crypto payment gateway is.
| Job | Bare wallet address | Fianto hosted checkout |
|---|---|---|
| Which order was paid | Unknown unless the customer tells you | Your own order_ on the session, and a reference key on the transfer |
| The amount | Typed by the customer | Written into the transaction by Fianto, from 0.01 to 1,000,000 USDC with at most 6 decimals |
| Token and network | Whatever the customer sends | USDC on Solana only, checked before the transaction is sent |
| Time limit | None | 5 minutes to 24 hours, 30 minutes by default |
| When it counts as paid | When you decide, from an explorer | At finalized: the order turns PAID and order. is sent |
| A second payment for the same order | You may never notice | order. and a row on Needs attention |
| Who holds the money | Nobody: it lands in your wallet | Nobody: it lands in your wallet, in the same transaction |
The last row is the same on purpose. A non-custodial gateway changes the paperwork around a payment, not where the money goes. What the page looks like and what it costs are on the USDC checkout page.
Why can't a wallet address tell you which order was paid?
A wallet address cannot tell you which order was paid because every transfer to it looks alike: a sender, an amount and a time. Two customers buying the same 25.00 USDC item an hour apart produce two transfers of the same amount, and a sender address says nothing about which order it belongs to. If one of them paid from an exchange account, the sender is the exchange, not the customer.
Solana Pay, the open payment spec for Solana, solves this with a reference: a one-off address added to the transfer instruction. The Solana Pay specification says the wallet "must include them in the order provided as read-only, non-signer keys" in the transfer, and that "the getSignaturesForAddress RPC method can be used locate transactions this way."
Fianto uses the same idea. Every session has its own reference, appended as a read-only account to the transfer of the price to your wallet. Every 60 seconds Fianto looks up transfers carrying the reference of each open session, and keeps looking for 24 hours after a session closes, so even a payment it did not send itself is matched to the right order.
What happens when a customer sends the wrong amount or token?
With a bare address, a wrong amount or the wrong token simply arrives, and sorting it out is your job. The common cases, and what each costs, are in crypto payment mistakes. The customer types the amount, so 2.50 instead of 25.00 is one slip away. Tokens are another trap. Solana's token documentation puts it plainly: a wallet "needs a token account for each token (mint) it wants to hold". Any token can be sent to you, including one that calls itself USDC. Circle lists one mainnet address for its USDC on Solana, EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, in its USDC contract addresses (checked 15 October 2026).
A hosted checkout takes the typing away. On Fianto, the customer's wallet is handed a transaction Fianto built: two compute-budget instructions, a USDC transfer of the price to your wallet and, when the service fee is above zero, a transfer of the fee to Fianto. The wallet only signs. Before broadcasting, Fianto checks the signed transaction instruction by instruction: the fee payer, each transfer's mint, decimals, source, destination and amount, the reference and the blockhash. If anything differs, the transaction is never sent, and the customer is not charged.
When does a USDC payment to an address count as paid?
A USDC payment on Solana is safe to count once its block is finalized, the last of the confirmation states. The Solana RPC documentation defines confirmed as "a block directly voted on by a supermajority of stake, meaning more than two-thirds of the network's active stake," and finalized as "a block the cluster recognizes as finalized with maximum lockout". A wallet notification or an explorer page often shows the earlier state.
With an address, you pick the moment yourself, usually by refreshing an explorer. Fianto splits it by audience: the customer's checkout page shows "Payment received" at confirmed, so nobody stares at a spinner, while your order turns PAID and your server receives order. and checkout. only at finalized. The full sequence is in confirmed vs finalized on Solana.
Why does a checkout session expire?
A checkout session expires so that an old payment page cannot be paid at an old price after you have moved on. An address never expires, which is convenient until a customer pays a quote from last month. A Fianto session's link works until its expires_, between 5 minutes and 24 hours after it was created, 30 minutes if you set nothing. Sessions from a shop or a payment link always get 30 minutes.
- Create again with the same
order_while its session is open, and you get that same session back, with no second page.id - Try to charge an order that is already paid, and the API answers 409
order_.already_ paid - A payment that still finalizes after its session expired pays the order anyway, as long as you have not opened a newer session for it.
One session per order, matched by reference, reported at finalized. No Fianto fee during the beta.
See the hosted checkoutDoes a hosted checkout cost more than a wallet address?
For the merchant, a Fianto checkout costs the same as an address: nothing. You never pay Fianto and never pay a Solana network fee. During the beta there is no Fianto fee at all. After the beta the customer pays a Fianto fee of about 0.1 to 0.5% on top of your price, shown on its own line before they sign, and the amount you set is still what lands in your wallet.
The customer pays the Solana network fee for the transaction they sign, shown on the page as "paid by you, under $0.01". A one-off payment carries no network fee in USDC and needs no account rent. The wallet does need a little SOL for the fee and the minimum balance Solana requires: about 0.00067 SOL as of 15 October 2026, and the checkout names the exact amount if the wallet is short.
When is a plain wallet address enough?
A plain wallet address is enough when a person, not your software, checks each payment. Tips, a contractor paying you back, a friend settling a split bill: you know who is paying, roughly when, and you will look at the wallet anyway. Adding a gateway there adds an approval process and nothing you need.
Pick a hosted checkout once any of these is true: you fulfil orders automatically, two customers could pay the same amount, you need to know a payment is final before shipping, or you want records you can export. Know its limits too. Fianto takes USDC on Solana only, approves each merchant before the first payment, has no test mode, and needs a customer wallet that can sign a transaction without sending it; a wallet that can only sign and send at once is refused with wallet_.
If you want the record without writing code, a USDC payment link opens a fresh checkout session on every click. If you are wiring it into your own site, how to add a Pay with USDC button shows the code, how to accept USDC on Solana walks through the setup, and the payment lifecycle docs list every status a session, order and payment can take.