MerchantsSell
Orders and payments
What each order and payment status means in the dashboard, when an order counts as paid, and what to do when USDC arrives that fianto did not accept.
An order is what your server asked a payer to pay: it is created with the first checkout
session for your order_id. A payment is one attempt to pay it: a transaction the payer
signed, which fianto broadcasts to Solana and follows until it is final. One order can have
several payments. You find them under Orders ("Each order your server created, and whether it
was paid.") and Payments ("Every charge, with your order ID on it.").
Scroll sideways to see the whole diagram →
Show as text
- Order: `PENDING` → `PAID` at finalized, or `PENDING` → `EXPIRED` when its session expires.
- `EXPIRED` → `PAID` when a late payment still settles.
- `EXPIRED` → `PENDING` when you create a new session with the same `order_id`.
- A cancelled session leaves the order `PENDING`. An order is never `CANCELED`.
- Payment: `PROCESSING` → `CONFIRMED` → `SUCCEEDED` at finalized.
- A payment can fail from `PROCESSING` or `CONFIRMED`, and `FAILED` → `PROCESSING` if the transfer lands after all.
- A payment whose session was superseded (a newer session for the order, or changed order terms) is recorded `FAILED` at finalized, even though its funds landed. It never shows as `SUCCEEDED` first.
- Payments found by the reference sweep start at `CONFIRMED`.
- `SUCCEEDED` is final. `EXPIRED` and `FAILED` are not.
Order statuses
The dashboard labels are in quotes.
| Status | Meaning | What you can do |
|---|---|---|
PENDING | "Not paid": the order is waiting for a payment. A cancelled checkout session leaves it here, with no end date. | Wait, or have your server create a new session for the same order_id. |
PAID | "Paid": a payment for it finalized on Solana. fianto sends order.paid at this moment. | Fulfil the order. |
EXPIRED | "Expired": its checkout session ran out of time before a payment finalized. | Create a new session with the same order_id: the order goes back to PENDING. A late payment that still settles moves it to PAID. |
EXPIRED is not final: a payment already on its way can still settle and make the order PAID,
and a new session for the same order_id reopens it.
The status filter on Orders also offers "Canceled", but fianto never gives an order that status: a cancelled checkout session leaves its order "Not paid", so that filter shows nothing.
Payment statuses
| Status | Meaning | What you can do |
|---|---|---|
PROCESSING | "Processing": the payer signed, and fianto sent the transaction to Solana. | Wait. |
CONFIRMED | "Confirmed": Solana accepted the transaction, but it is not final yet. Payments that fianto finds on its own (below) start here. | Do not fulfil yet: wait for SUCCEEDED. |
SUCCEEDED | "Succeeded": finalized on Solana. The money is in your wallet. | The order is PAID; fulfil it. |
FAILED | "Failed": fianto did not accept this payment. It can fail from PROCESSING or CONFIRMED. | Check whether money arrived anyway (below) before you tell the payer anything. |
SUCCEEDED is final; FAILED is not. A FAILED payment goes back to PROCESSING if its
transfer lands after all. A payment whose session was superseded, by a newer session for the same
order or by changed order terms, is recorded FAILED at finalized, even though its funds landed;
it never shows as SUCCEEDED first.
When a payment counts as paid
The payer's checkout page shows success as soon as the transaction is confirmed. fianto marks
the payment SUCCEEDED and the order PAID only once it is finalized. It then sends
order.paid, and checkout.session.completed too when the session was still OPEN. So the
payer's success screen is not proof that you were paid: fulfil on PAID, or on the order.paid webhook.
Who pays what
You receive the price. When the service fee is above zero, it is added on top and the payer pays it, so the payer signs for the total. The dashboard says the same on each order: "You receive the subtotal. The service fee is added on top and the payer pays it, so the payer signs for the total."
Failed payments where the money arrived
FAILED does not mean no money moved. A transfer can finalize and put USDC in your wallet but not
match what the payment asked for, for example the wrong amount or fee, so fianto refuses it as
payment. The payment page then shows "Money arrived on this failed payment." On Payments, the
chip "Money arrived on a failed payment" lists every such payment, and Needs attention counts
them.
Never tell a payer nothing was taken without checking
Before you tell a payer their payment failed and nothing moved, open the payment and check whether money arrived. If it did, refund the payer or ask them to pay again from a new payment link.
Duplicate and unmatched transfers
fianto also finds transfers it did not broadcast itself, by looking for the session's reference: every 60 seconds while a session is open, and for 24 hours after it closes. A transfer that carries an order's reference but is not that order's payment is recorded on the order (only transfers that increased your USDC balance, at most 20 per payment link), and the order page says which case it is:
- "Paid twice — refund the payer": the order was already paid, and another transfer arrived for it.
- "A transfer arrived that does not match this order": the amount or the fee was wrong, so it was not accepted and the order is still unpaid.
fianto sends order.duplicate_payment only when the order is already PAID or has another payment
that has not failed. Any other stray transfer is recorded on the order with no webhook.
In both cases the USDC reached your wallet. On Orders, the chip "Unmatched transfer" lists these orders.
Refunds are yours to send
fianto never holds your funds, so it cannot refund. There is no refund API: send the USDC back from your own wallet, to the wallet the transfer came from.
Finding an order or a payment
Search is exact: paste a whole value, not part of one. On Orders, search by the order id
(ORD-12 or fian_ord_…), your own order ID, a payer wallet or a payer email. On Payments,
search by the payment id (PAY-12 or fian_pay_…), a transaction signature, your own order ID, a
payer wallet or a payer email. A payer's email is shown
as "entered by the payer, not verified".
See also
Was this page helpful? Tell us