PaymentResult, delivered to the callback you registered with Checkout.Contract after the operator dismisses the outcome screen. Preparing the terminal ends in exactly one ReadyResult. Both use the same thirteen ErrorCode values.
How a checkout ends
The operator reads the outcome and taps Done before your callback fires, so a secondlaunch never races the first. Try every path in the simulator: the Scenario section picks the outcome and the error code.
PaymentResult
PaymentResult
Authorised. The money will move.
PaymentResult
The issuer or the card refused. The transaction completed correctly and the answer was no, so retrying the same card usually fails the same way.
PaymentResult
Did not complete for a technical reason. This is a fault to fix, not an answer to relay to the customer.
PaymentResult
Ended deliberately before an outcome existed, by the operator, the cardholder at the PIN pad or your app.
raw, a JSON snapshot of the card reader’s response for support triage, and diagnostics, decoded card diagnostics when the reader returned any. Neither ever contains cardholder data.
After a process death
If Android kills your process while the payment screen is up, the restored screen deliversFailed with a message telling you to reconcile against the Rinne API using your requestId. It is deliberately not Cancelled: nobody cancelled anything, and the transaction may well have been captured.
Reconcile before charging the customer again, with a key that holds the transaction.list permission:
requestId.
ReadyResult
Payments.getReady answers with Ready or Failed(code, message). Three codes are worth handling at setup, because each one names who fixes it:
ErrorCode
Thecode on Declined, Failed, Cancelled and ReadyResult.Failed is one of thirteen values, in a fixed order that only ever grows. The managed checkout shows the operator text in the device language and offers Try again only where retrying could work. If you build your own error screen, key it off the code and use ErrorCatalog[code] for a default message, retry hint and retriable flag.
Declined and Failed are different screens on purpose. Showing a network failure as “payment declined” tells the operator to ask for another card when the real problem is connectivity, and offers a retry guaranteed to fail the same way.Next steps
Simulator
Pick any error code and see the screen, the operator text and whether Try again appears.
Device setup
Catch NFC, location and connectivity problems before a customer is waiting.

