Skip to content

Hosted checkout lifecycle

The hosted checkout owns the buyer-facing part of a payment: quoting, asset and network selection, the deposit address, and confirmation tracking. Your system only needs to react to status.

Status Meaning What you do
created Payment exists, buyer has not chosen an asset Nothing
pending Asset and network chosen, deposit address issued Nothing
detected A transaction was seen on chain Nothing — it can still reorg
confirming Accumulating confirmations under the chain’s policy Nothing
underpaid Less than the quoted amount confirmed Wait, or contact the buyer
paid Confirmed on chain Optionally reserve stock
settled Ledger posted, including fees and splits Release the goods
held Under risk review Wait for the operator decision
rejected Refused Do not deliver
expired / canceled Window closed without payment Let the buyer re-order

settled is the only status that means the money is accounted for. paid means the chain agrees; settled means the ledger does, and the ledger is the source of truth.

Between detected and paid the chain can reorganize and the transaction can disappear. FlowPayra applies a per-chain confirmation policy and only advances when the policy is satisfied. Do not ship on detected.

The checkout shows your merchant name and order reference, the exact amount to send, and — directly above the deposit address — the network warning for the selected asset:

Send only USDC on Base. Sending any other asset, or using any other network, will lose the funds permanently.

This matters more than it looks. The same EVM address is valid on Ethereum, Base and BNB Smart Chain; a buyer who sends on the wrong one has burned the money.

Once a transaction is detected, the payment button is replaced by a confirmation status card with a link to the block explorer, and the buyer is told they can close the page.

Set redirect_url when you create the payment. The terminal pages then show a receipt (amount, network, order number) and a button back to your site. Without it the buyer reaches a dead end and has to find their way back on their own.

Set the merchant support_url too, so a rejected or expired payment offers a way to reach you.