Skip to main content
Each environment ships as one artifact, rinne-sdk-checkout-sandbox or rinne-sdk-checkout-production, and both are released on the same version. Pin the version named in your beta access email, and upgrade when Rinne announces a version as live. Subscribe to this page’s RSS feed to hear about new releases.
October 13, 2026
Declines say who refused. DECLINED_BY_ISSUER now means only that the refusal came back from online. A refusal made on the phone gets its own code, and its transaction is null because nothing reached Rinne:
  • DECLINED_OFFLINE: the card, the phone or watch wallet, or the terminal’s own checks refused without going online.
  • CARD_NOT_SUPPORTED: the card has no application this terminal accepts, such as an American Express card.
Card faults are failures, not declines. They arrive as Failed, and the checkout offers Try again:
  • CARD_ERROR: the card was read, but the exchange with it broke, for example because it was pulled away too early.
  • AUTHORIZATION_ERROR: the authorization data that came back could not be processed.
Clearer codes elsewhere.
  • A fault inside the SDK that stopped a sale used to arrive as Cancelled. It now arrives as Failed with UNKNOWN.
  • A card reader fault while the terminal is being prepared now reports TERMINAL_NOT_READY instead of CARD_READ_TIMEOUT, so the screen no longer asks for a card during setup.
  • PaymentResult.Failed.message and ReadyResult.Failed.message keep the card reader’s cause name alongside the detail.
Logs you can read. The SDK writes its own lines to Logcat under the RinneSDK tag, in every build. Read them with adb logcat -s RinneSDK; see Results and errors.
Check before you upgrade. ErrorCode gains four values, so an exhaustive when over ErrorCode needs a branch for each. Code that expects card faults as Declined now receives them as Failed.
October 8, 2026
  • The antenna guide points at the right end of the phone. On devices that report their antenna position, the marker was drawn mirrored top to bottom.
  • Antenna coordinates are measured from the top-left. Nfc.antennaInfo reports millimeters from the top-left corner as the user faces the screen in portrait. If you draw your own guide from it, do not flip the vertical axis.
October 7, 2026
The first stable version, and the first entry in this changelog.From this version on, versions follow semantic versioning: a fix raises the patch number, a new feature or a new card reader version raises the minor number, and a breaking change raises the major number.

How releases work

A release is a new version of the SDK. The registry serves every published version, and a version stays available after newer ones ship. During the closed beta only the sandbox artifact is published; Rinne provides the production artifact when your integration is approved for launch. A new card reader version inside the SDK needs its card configuration published on Rinne’s side before devices on it can prepare a terminal. Rinne does this before announcing a version, which is why upgrading only to announced versions matters: a build on an unannounced version fails at getReady with EMV_CONFIG_UNAVAILABLE.

Next steps

Results and errors

Every PaymentResult variant and ErrorCode, with the retry rule for each.

Going to production

Pin a version, switch the artifact and run the go-live checklist.