# Android SDK Changelog Source: https://docs.y.uno/changelog/android Latest updates and version history for the Yuno Android SDK ## v2.21.0 *July 6, 2026* **Payments** * **Installment dropdown now shows the per-installment value and the total amount**\ Aligned the card installment dropdown with the Web SDK: each option now shows the per-installment value and the total amount (for example '2x of R$ 500,31 - Total R$ 1.000,61'). The same template is applied to every option regardless of whether financial\_costs is present, since its amount is already reflected in the rendered total. If the total is not available the option falls back to the previous per-installment format, and if no amount is available it falls back to the installment count only. *See also: [CORECM-17537](https://yunopayments.atlassian.net/browse/CORECM-17537)* * **NuPay renders expanded in the unfolded payment method list**\ When the unfolded payment method list is enabled, NuPay now expands directly in the list like other alternative payment methods, matching the iOS SDK. The inline form shows the buyer's fields together with the NuPay payment types banner, which loads the available options as soon as the buyer enters their document. With the setting off, NuPay keeps opening its separate form screen as before. *See also: [CORECM-18227](https://yunopayments.atlassian.net/browse/CORECM-18227)* * **NuPay one-click renders expanded in the unfolded payment method list**\ The NuPay one-click experience now also expands directly in the payment method list when the unfolded list is enabled, completing the parity with the iOS SDK. The inline form shows the credit or debit selector and the selectable payment conditions with their installment options; the chosen condition travels with the payment exactly as it does from the full form screen, and paying without choosing a condition is blocked with an inline message. With the setting off, the one-click flow keeps opening its separate form screen as before. *See also: [CORECM-18227](https://yunopayments.atlassian.net/browse/CORECM-18227)* * **Unfolded payment method list for alternative payment methods**\ The payment method list can now show the payment form for alternative payment methods (such as PSE, Nequi, or Boleto) expanded directly in the list, matching the existing behavior for cards and the Web SDK. When a buyer selects one of these methods, its fields unfold inline, and startPayment() charges with the data entered in the list without opening a separate form screen. Saved (enrolled) methods and methods without a form keep their current collapsed behavior. This reuses the existing unfolded payment method list setting and is turned on by Yuno per account; when it is off, the list behaves exactly as before. * **Payment method selection indicator moved to the leading edge of each row**\ The selection indicator in the payment method list now appears at the leading edge of each row (before the payment method logo) instead of the trailing edge, matching the placement used by major checkouts. The position mirrors automatically for right-to-left languages such as Arabic and Urdu, while card number, expiration date, and CVC inputs keep left-to-right formatting. Each row is now also announced to screen readers as a selectable option within the list, improving accessibility. This is a global visual change applied to all merchants by default across Yuno SDKs.\ \[Migration guide →]\(No code changes are required. If your UI tests or visual snapshots assert the position of the selection indicator in the payment method list, update them to expect it at the leading edge of the row.) *See also: [CORECM-17649](https://yunopayments.atlassian.net/browse/CORECM-17649)* * **OTP codes received by SMS can be filled in automatically**\ When a buyer is asked for a one-time password during a payment or enrollment, the SDK can now read the code from the incoming SMS and fill the OTP field for them, matching the experience already offered on iOS. The buyer sees a one-tap system prompt asking for permission before any message is read, so nothing happens without their consent, and a code they have already started typing is never overwritten. The SDK does not request any SMS permissions, works with codes sent from any sender, and silently falls back to manual entry on devices without Google Play services. *See also: [CORECM-18295](https://yunopayments.atlassian.net/browse/CORECM-18295)* * **Secure payment badge copy changed to "Powered by Yuno"**\ The badge shown on checkout and enrollment surfaces now reads "Powered by" followed by the Yuno wordmark logo instead of "Secure payment with YUNO". The copy is translated in every language that already localized the badge; the few locales that never localized it keep their existing English fallback. *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338)* * **Privacy link next to the Powered by Yuno badge**\ A localized "Privacy" link is rendered next to the Powered by Yuno wordmark and opens the privacy policy URL from the account configuration in a Chrome Custom Tab (with an in-app browser fallback); when the configuration provides no URL, the link performs no action. The link is announced to screen readers as a button and is hidden together with the badge when the merchant configuration disables the tag. *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338)* * **Inline data-privacy disclosure removed from all payment forms**\ The "By paying, you agree to the Personal Data Processing Policy" sentence no longer appears anywhere: it is removed from the one-step, enrolled-card, and step-by-step card forms and from every alternative payment method form. The privacy disclosure is now the "Privacy" link rendered next to the Powered by Yuno badge on the payment form and list surfaces. Mid-action legacy screens (OTP and bank-instruction views, which never carried the inline disclosure) keep the badge without the link.\ \[Migration guide →]\(If UI tests assert the terms\_and\_conditions\_text test tag, remove that assertion; the tag no longer exists on any form.) *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338)* * **privacy\_tag\_displayed consent signal on completion telemetry**\ The SDK completion telemetry now includes params.privacy\_tag\_displayed=true when the Powered by Yuno badge actually rendered during the session (the parameter is omitted when the badge was hidden), and enrollment completion now emits the enrollCheckoutSdk\_completed event with enrollment\_status. This supports privacy-compliance reporting; merchant-facing behavior and integration contracts are unchanged. *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338) · [CORECM-17340](https://yunopayments.atlassian.net/browse/CORECM-17340)* * **Powered by Yuno badge below the payment method list and on render forms**\ The payment method list component now shows the Powered by Yuno badge with the Privacy link once, centered below the full list of methods (never inside each method row or expanded form). Forms rendered with a merchant-side pay button (render flows) also show the badge below the form, where the removed inline disclosure used to appear. Both placements follow the existing secure-payment-tag merchant setting: disabling it hides the badge and the link everywhere. *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338)* * **Host app no longer crashes when a Google Pay Pix result arrives after the checkout screen is closed**\ Fixed a crash that could occur during Google Pay Pix payments when the payment availability or payment result callback arrived after the user had already left the checkout screen (for example by navigating back while the payment was processing). The SDK now silently ignores results delivered after the screen is gone instead of raising an exception in the host app. * **Account type and account holder type fields for ACH bank transfers**\ The ACH bank-transfer form now shows two additional dropdowns — account type (checking or savings) and account holder type (individual or company) — rendered between the routing number and the beneficiary name. In addition, the whole bank-transfer block (account number, routing number, account type, account holder type, beneficiary name) now renders at the top of the form, before the customer fields, for any payment method whose configuration requires those bank fields. The new dropdowns appear only when the merchant configuration requires them, and the selected values are sent with the bank\_transfer data on both the create-payment token and the enrollment request. Forms whose configuration requires none of the bank-transfer fields are unchanged. *See also: [CORECM-18130](https://yunopayments.atlassian.net/browse/CORECM-18130)* **Enrollment** * **enrollment\_status no longer dropped from enrollment telemetry**\ The event reporter silently dropped params.enrollment\_status when rebuilding event payloads, so enrollStatus\_\* events reached the backend without it. The field is now forwarded. *See also: [CORECM-17338](https://yunopayments.atlassian.net/browse/CORECM-17338)* ## v2.20.1 *July 28, 2026* **Payments** * **Google Pay Pix late-callback crash**\ Fixed a host-app crash when a Google Pay Pix result arrived after the checkout screen was closed — late callbacks are now safely ignored. ## v2.20.0 *July 22, 2026* **Payments** * **onInstallmentSelected card callback (Web parity)**\ `startCheckout` now accepts an optional `onInstallmentSelected` callback that fires every time the shopper selects or changes an installment option in the card form — including the default pre-selection at render and recalculations after a BIN change — so merchants can keep the cart total in sync with the selected installment. The payload mirrors the Web SDK's `OnInstallmentSelectedArgs`: `installment` (Int), `label` (String), `amount` as strings, `additionalData` (reserved), and `isMerchantInstallment` (nullable, reserved for the merchant-installments feature). When installments stop being available after a selection was reported (e.g. the shopper switches to a card without installments), the callback fires once with null so the merchant knows the previous installment information is no longer valid. Fully backwards compatible: with no callback registered there is no behavior change, and an exception inside the merchant's callback never affects the payment flow. *See also: [CORECM-18470](https://yunopayments.atlassian.net/browse/CORECM-18470)* ## v2.19.1 *July 28, 2026* **Payments** * **Google Pay Pix late-callback crash**\ Fixed a host-app crash when a Google Pay Pix result arrived after the checkout screen was closed — late callbacks are now safely ignored. ## v2.19.0 *July 9, 2026* **Payments** * **Card number length is now validated per card scheme**\ Card numbers are now validated against the expected length for each card scheme, on top of the existing checks, so a number with an invalid length is caught as the customer types and again on submit, before the payment is sent. * **Saved cards now show a compact summary instead of full card artwork**\ Saved cards now display a compact summary — brand logo, brand name, last 4 digits, cardholder name, and expiry date — instead of the large card artwork, keeping the CVV field visible without scrolling. * **Stricter card expiry date validation with auto-formatting**\ The card expiry field now auto-formats the date as it is typed, shows a clear "Card has expired" message for past dates, and better distinguishes invalid months. * **Stronger document and phone field validation**\ Document and phone fields now use numeric-only keyboards where applicable, support many more national document types, show clearer error messages, and reliably prefill saved values without overwriting what the customer has typed. * **Barcodes on flexible payment actions now render in landscape**\ Fixed an issue where barcodes on flexible payment actions (such as Boleto and INDOMARET) did not display in landscape with the correct proportions. They now match iOS and Web, making them clearer and easier to scan. QR-based methods are unchanged. * **Click to Pay no longer stalls without a callback URL**\ Fixed an issue where Click to Pay stalled when the checkout session was created without a callback URL. The payment now continues seamlessly with the standard flow. * **Google Pay payments now include the customer's language for 3DS**\ Fixed an issue where Google Pay payments left the customer's language empty in the browser information used for 3DS authentication and risk evaluation. The language is now correctly included. * **Card payments with an installment plan now return the one-time token**\ Fixed a regression where card payments with an installment plan did not correctly return the one-time token, preventing these payments from being completed. * **Card number field no longer advances too early for longer card numbers**\ Fixed an issue where the card number field moved focus to the next field too early for cards that accept more than one length, preventing customers from finishing typing a longer number. ## v2.18.0 *July 5, 2026* **Payments** * **Card type toggle no longer shows in the unfolded card form when credit\_card\_only\_processing is enabled**\ Fixed an issue where the credit/debit card type toggle was displayed for Brazilian cards in the unfolded card form (payment method list) even when the merchant had credit\_card\_only\_processing enabled. The full-screen card form received the flag through its call chain, but the unfolded call site did not propagate it, so the composable fell back to its default and always showed the toggle. The visibility check now also resolves the flag directly from the SDK settings, so every card form honors it regardless of the call site. * **Installment dropdown now shows the per-installment value and the total amount**\ Aligned the card installment dropdown with the Web SDK: each option now shows the per-installment value and the total amount (for example '2x of R$ 500,31 - Total R$ 1.000,61'). The same template is applied to every option regardless of whether financial\_costs is present, since its amount is already reflected in the rendered total. If the total is not available the option falls back to the previous per-installment format, and if no amount is available it falls back to the installment count only. *See also: [CORECM-17537](https://yunopayments.atlassian.net/browse/CORECM-17537)* ## v2.17.3 *June 30, 2026* **Payments** * **Host app no longer fails when a payment return deeplink cannot be opened**\ Fixed an issue so that WebViews no longer fail when trying to open a deeplink if the target app is not installed. ## v2.17.2 *June 26, 2026* **Payments** * **Merchant callbacks registered before initialize are no longer lost**\ Fixed a regression where one-time-token and payment-state callbacks were silently dropped for integrations that register their callbacks once and then call Yuno.initialize afterwards (for example cross-platform wrappers that register in the host Activity's onCreate and initialize later). Initialization was unconditionally clearing the previously registered callbacks, so the merchant never received the token or the final/cancellation status even though the payment completed. Initialization no longer clears these callbacks; native integrations that re-register on each call are unaffected. * **startPayment and startPaymentLite accept an optional payment-state callback**\ Added an optional callbackPaymentState parameter to startPayment and startPaymentLite, aligning them with startPaymentSeamlessLite and continuePayment. Integrators can now re-supply the payment-state callback on each call, giving a per-call registration path for the state delivered through the start-payment flow, such as the cancellation reported when the user dismisses the payment sheet. The parameter is optional and defaults to null, so existing callers are unaffected. ## v2.17.1 *June 22, 2026* **Payments** * **Card payments with an installment plan now return the one-time token**\ Fixed a regression where selecting a card with an installment plan produced no one-time token on the merchant callback, so the payment could not be completed. The token endpoint response was being rejected while parsing because the installment amount is delivered as a money object (currency + value); the SDK now reads it correctly and surfaces the token through callbackOTT / callBackTokenWithInformation as before. Other payment methods were not affected. ## v2.17.0 *June 12, 2026* **Payments** * **Headless SDK: resume card payments with continueCardPayment**\ Merchants integrating the Headless SDK can now resume a CARD payment created from their backend by calling `continueCardPayment`. The SDK internally executes any pending action — such as the 3DS challenge — waits for the final result, and delivers every payment state and sub-state through a callback, so merchants keep full control of their checkout UI without rendering the challenge themselves. The method works in pure headless integrations: no prior Yuno checkout UI flow is required. * **Removed getThreeDSecureChallenge from the Headless SDK**\ The headless `getThreeDSecureChallenge` method and its `ThreeDSecureChallengeResponse` type were removed. It returned the raw 3DS challenge URL and required merchants to render and complete the challenge themselves. Migrate to `continueCardPayment`, which executes the challenge internally and reports the resulting payment states through a callback.\ [Migration guide →](https://docs.y.uno/docs/sdks/headless-android/checkout) ## v2.16.2 *June 22, 2026* **Payments** * **Card payments with an installment plan now return the one-time token**\ Fixed a regression where selecting a card with an installment plan produced no one-time token on the merchant callback, so the payment could not be completed. The token endpoint response was being rejected while parsing because the installment amount is delivered as a money object (currency + value); the SDK now reads it correctly and surfaces the token through callbackOTT / callBackTokenWithInformation as before. Other payment methods were not affected. ## v2.16.1 *June 2, 2026* **Payments** * **Back gesture/button now cancels the 3DS challenge in render mode**\ In render mode, pressing the back button or using the back gesture during a 3D Secure challenge now closes the challenge and returns a cancellation result (CANCELED\_BY\_USER) to the merchant, matching iOS. Previously the back press was ignored and the payment hung until the server-side challenge timeout. The challenge WebView history is no longer walked on back (which could leave a blank screen); back always cancels. ## v2.16.0 *May 13, 2026* **3DS** * **Native 3DS via the optional Yuno3DSNetcetera module**\ A new optional companion module that runs native 3DS challenges and device data collection inside your app. Add the dependency alongside the core SDK and it gets picked up automatically — no extra wiring. Published as Yuno3DSNetcetera 1.0.1 on JFrog and compatible with the core SDK starting at 2.16.0. **Forms** * **Real-time form validation**\ Card and alternative payment method forms now validate each field as the buyer types, instead of only at submit. Errors are shown inline, on the field, the moment the input becomes invalid. * **New compact card form (server-driven slimmerFormEnabled flag)**\ When the `slimmerFormEnabled` flag is turned on for your account, the card form (new card, alternative methods and enrolled card) switches to a more compact visual style: card and address fields render as grouped rows with a single consolidated error message per group. When the flag is off, the previous visual is preserved exactly as is. * **Auto-advance on the enrolled card form**\ When the buyer enters valid data in the enrolled card flow, focus now jumps to the next field automatically, matching the behavior already present in the new-card form. * **Google Autofill on card fields**\ Card number, cardholder name, expiration and CVV fields are now eligible for Google Autofill, so buyers can fill them in with a saved card from Google on Android. **Google Pay** * **Google Pay: collect billing address, shipping address and cardholder name**\ Google Pay now requests billing address, shipping address and cardholder name from the buyer whenever the selected payment method requires them, picking the right address format automatically (name only vs. full address). The collected values are forwarded to the backend together with the wallet payload. * **Google Pay: collect buyer email and phone**\ Google Pay now requests the buyer's email and phone whenever the payment method requires them, and the values are forwarded to the backend as part of the customer payer. **Checkout UI** * **Hide the 'secure' badge via flag**\ The 'secure' badge shown in the checkout UI can now be hidden through a server-driven flag. **Anti-fraud** * **ClearSale device fingerprint**\ On previous versions the ClearSale anti-fraud fingerprint silently failed to register the buyer's device. The fingerprint is now collected and submitted correctly. **Payments** * **Correct installment plan selected when the backend ships per-installment ids**\ In some configurations the wrong installment plan could be selected when the backend returned both a generic code and a per-installment id. The SDK now consistently uses the per-installment id, so the buyer's chosen plan matches what is sent to the backend. * **Every code is shown on payment-code screens**\ On payment methods where the post-payment screen presents more than one code to the buyer (for example a barcode plus a digital line), only the first one was being rendered. All codes returned by the backend are now displayed. * **Visible separator on the payment-code screen**\ On the post-payment code screen (PIX, OXXO, boleto, and similar flows), the horizontal line that separates the code area from the copy / download buttons was rendered in a color so close to the background that it was effectively invisible. It now uses a contrasting tone in both light and dark mode. ## v2.15.1 *May 19, 2026* * **Flutter Plugin Lifecycle Crash**\ Fixed a crash caused by Flutter plugin lifecycle incompatibility with the Android SDK on process death. ## v2.15.0 *May 8, 2026* * **Flexible Actions in Enrollment**\ Enrollment now supports the same dynamic action screens used in payments, including PIN, image, payment code, OTP, and info screens. * **Installment Details on Tokenization**\ When a card is tokenized with installments selected, the installment information — plan, rate, amount, and selected option — is now returned alongside the one-time token. ## v2.14.0 *April 30, 2026* * **Separate Billing and Shipping Address Forms**\ Added separate billing and shipping address sections with a same-as-shipping checkbox, including a `BILLING_ONLY` section type and refined field ordering and focus behavior. * **Auto-Advance Between Card Fields**\ Card form now auto-advances focus to the next field on valid input, including correct handling when the CVV field is hidden, when the save-card checkbox is present, and inside the unfolded card form. * **Dynamic CVV Limit for Enrolled Cards**\ The CVV input now applies the correct length limit for enrolled cards based on the card's `securityCodeLength` instead of the default 3-digit limit. * **Seamless Flow Automation Mode**\ Added a seamless checkout flow tailored for automation mode to support end-to-end testing scenarios. * **3DS WebView Loading Indicator**\ Added a loading progress indicator to the 3DS `WebView` to communicate state during authentication. * **MVVM and Architecture Cleanup**\ Refactored to MVVM using use cases and `StateFlow`, migrated `BehaviorSubject` usages to `StateFlow`, decomposed `ContinueCheckoutFragment`, removed the service locator, and purified the domain layer by removing `Parcelable` and Android framework dependencies. No public API changes required. * **Customer Session for Enrollment Card Info**\ The card-info API now receives `customer_session` in enrollment flows for improved fraud and risk signals. No integration changes required. * **Enrolled Card Flow Address Sections**\ Migrated the enrolled card flow to use the new billing and shipping address sections, prefilling shipping with billing when empty. * **Shipping and Billing Validation Focus**\ Submit now scrolls to and focuses the first invalid shipping or billing field, and the keyboard `Next` button correctly advances through address fields. * **Installments Dropdown Amount**\ The installments dropdown now shows the amount for items that don't have `financial_costs`, ensuring consistent display. * **CheckoutModel Singleton Update**\ Fixed `updateCheckoutSession` replacing the `CheckoutModel` singleton with a copy, which broke captured references across the SDK. * **Edge-to-Edge in SeamlessCheckoutActivity**\ Applied the edge-to-edge fix to `SeamlessCheckoutActivity` and fixed double system-bars padding after the WebView and 3DS flows on Samsung devices. * **Custom Font Family Coverage**\ Merchant-defined `YunoConfig.styles.fontFamily` is now applied across all SDK components. * **Mercado Pago Fingerprint Obfuscation**\ Serialized Mercado Pago SDK fingerprint fields and added consumer ProGuard rules so fingerprinting survives R8 obfuscation in merchant release builds. * **WebSocket Reconnection in 3DS Flow**\ Fixed WebSocket reconnection after the app returns from the background during a 3DS flow. * **Billing and Shipping Checkbox Autofill**\ Fixed the same-as-shipping checkbox autofill behavior based on prefilled customer data. * **Locale Translations**\ Added missing translations for Hindi (`hi`), Bengali (`bn`), Malayalam (`ml`), and Urdu (`ur`) locales. ## v2.13.4 *April 20, 2026* * **Font Family Customization**\ Merchant-defined `fontFamily` set in `YunoConfig.styles` is now applied across all SDK components. No API changes required. ## v2.13.3 *April 5, 2026* * **WebView State**\ Improved loading state handling during WebView transitions for a smoother checkout experience. No API changes required. ## v2.13.2 *March 20, 2026* * **3DS Redirect Handling**\ Enhanced 3DS redirect handling for broader provider compatibility. No API changes required. ## v2.13.1 *March 5, 2026* * **Loader Timing Behavior**\ Adjusted loader timing behavior in extended payment flows for a more consistent user experience. No API changes required. ## v2.13.0 *February 15, 2026* * **Keeploader Support**\ Added integration support for Keeploader. Contact your Yuno technical account manager to enable this feature for your account. ## v2.12.1 *April 29, 2026* * **WebSocket Alignment with iOS**\ Backported the WebSocket alignment hotfix from the 2.6 line: the socket connection now forwards `code`, `public-api-key`, `x-version`, and `x-platform`, and propagates the payment code on reconnect. ## v2.12.0 *January 10, 2026* **Enhancements** * **Dynamic Regional Base URLs**\ The SDK now selects its base URL dynamically based on the region prefix, improving routing reliability for multi-region deployments. No API changes required. * **Alphanumeric CNPJ Validation**\ Added support for alphanumeric CNPJ validation in Brazilian payment flows. No API changes required. * **Dynamic CVV Length by Card Type**\ The SDK now fetches the maximum CVV length per card type from the API and maps per-brand `security_code_length` values. No API changes required. * **Cardholder Name Limit Increase**\ The maximum allowed length for `cardholderName` has been increased from 50 to 255 characters. No API changes required. * **OTT Payment Method Type Display**\ The `payment_parent_method_type` field is now displayed in the OTT component and included in the OTT response. No API changes required. * **Dynamic Action Warning Banner**\ A warning banner has been added to the dynamic action screen to surface important messaging to users during payment flows. No API changes required. * **Headless Flow Coroutines Migration**\ Headless payment flows have been migrated from callbacks to Kotlin coroutines for improved performance and reliability. No API changes required. **Bug Fixes** * **WebView Toolbar Overlap on Android 15**\ Fixed a layout issue where the `WebViewActivity` toolbar overlapped the system status bar on devices running Android 15 and above. No API changes required. * **PSE Issuers Null Response Crash**\ Fixed a crash that occurred when the PSE issuers endpoint returned a null or empty response. No API changes required. * **CVV State Desync on Brand Switch**\ Fixed a CVV state desynchronization issue that occurred when switching card brands in the step-by-step card form. No API changes required. * **Enrolled Card Form Skip Bug**\ Fixed a bug where an enrolled card skipped the form entry step when `billingAddress` or `cardholderName` were required fields. No API changes required. * **Empty Form on All-False Fields**\ Fixed a bug where the card form rendered as empty when all `FieldsRequired` flags were set to false. No API changes required. ## v2.11.3 *March 31, 2026* * **Mercado Pago Fingerprint R8 Obfuscation**\ Added `@SerializedName` annotations to Mercado Pago fingerprint classes to prevent R8 from obfuscating field names, which was causing declined transactions in merchant release builds. ## v2.11.2 *December 18, 2025* * **Cardholder Name Visibility Control**\ The cardholder name field is now shown or hidden based on the backend response, replacing the previous static display logic. No API changes required. ## v2.11.1 *December 1, 2025* * **Punto Pago Kiosk Disclaimer**\ Added a disclaimer message to the Punto Pago kiosk screen to communicate relevant payment terms to users. No API changes required. * **Cartes Bancaires UI Updates**\ Updated the visual presentation of the Cartes Bancaires payment option to align with current design standards. No API changes required. ## v2.11.0 *November 10, 2025* * **CheckoutBuilder Migration**\ Removed `cardFlow` from `YunoConfig`. Card flow configuration is now handled exclusively through the Dashboard Checkout Builder. Update your integration before upgrading.\ [Migration guide →](/changelog/migration-guides/android/v2-10-to-v2-11) ## v2.10.2 *February 26, 2026* * **Seamless Flow Crash**\ Fixed a crash in the seamless checkout flow. * **URL Download Null Handling**\ Fixed crashes when a URL download fails or returns null, improving robustness of asset and resource fetching. * **Android 16 Edge-to-Edge Overlap**\ Backported the Android 16 edge-to-edge fix from 2.9.4: corrected UI overlap caused by edge-to-edge layout changes. * **Payment Method List Enabled State**\ Backported the enabled-state fix from 2.9.4 so payment methods in `PaymentMethodListViewModel` are correctly enabled or disabled based on availability. ## v2.10.1 *February 10, 2026* * **Mercado Libre SDK Dependency Removed**\ Backported the Mercado Libre SDK dependency removal from the 2.9.3 hotfix: `PaypalMagnesFraud` now uses a remote dependency instead of the embedded library. ## v2.10.0 *January 27, 2026* * **Payment Selected Callback**\ Added a payment-selected callback to the payment method list composable so merchants can react when the user chooses a payment method. * **Size Callback for Payment Method List**\ Added a size callback to the payment method list composable, letting merchants adapt their layout to the rendered list dimensions. * **Arabic Language Support**\ Added Arabic translations across the SDK, including enrollment status screens, with proper plural handling. ## v2.9.4 *February 12, 2026* * **Android 16 Edge-to-Edge Overlap**\ Fixed UI overlap on Android 16 caused by edge-to-edge changes in `BaseActivity`, `ContinueCheckoutActivity`, and `ScaffoldComponent`. * **Payment Method List Enabled State**\ Fixed enabled-state conditions in `PaymentMethodListViewModel` so payment methods are correctly enabled or disabled based on availability. ## v2.9.3 *February 3, 2026* * **Mercado Libre SDK Dependency Removed**\ Removed the bundled Mercado Libre SDK dependency and updated `PaypalMagnesFraud` to use the remote dependency instead of the embedded library, reducing SDK size and easing dependency management. ## v2.9.2 *January 22, 2026* * **Enrollment Status Polling**\ Improved `GetStatusEnrollmentViewModel` and `EnrollmentHeadlessViewModel` status handling for more reliable enrollment result delivery in headless flows. No API changes required. ## v2.9.1 *January 19, 2026* * **Bundled PayPal Magnes and Mercado Pago JARs**\ Removed the embedded `magnes-paypal.jar` and `sdk-3.1.0.jar` binaries together with the local `PaypalMagnesFraud` and `MercadoPagoFraud` providers and their initialization paths. Fingerprinting is now provided through remote dependencies, reducing SDK size. ## v2.9.0 *September 15, 2025* * **subPaymentState Parameter**\ Added a `subPaymentState` parameter to the `callbackPaymentState` callback in `startCheckout()` and `continuePayment()`, providing finer-grained payment status reporting. No API changes required. * **Google Pay in startPayment**\ Google Pay is now supported in the `startPayment` flow in addition to `startCheckout`. No API changes required. ## v2.8.1 *August 20, 2025* * **Google Pay Card Type Field**\ Added a new card type field to the Google Pay response object to improve card identification in payment flows. No API changes required. ## v2.8.0 *August 5, 2025* * **Card Scanning via OCR**\ Added card scanning (OCR) functionality powered by Google Pay's solution, allowing users to scan their credit or debit cards using the device camera during checkout. No additional integration changes required beyond enabling the feature. ## v2.7.0 *July 10, 2025* * **Architecture Improvements**\ Internal architecture improvements to improve SDK stability and maintainability. No API changes required. * **EdgeToEdge WebView Layout**\ Fixed an EdgeToEdge rendering issue in `WebViewActivity` that caused layout overlap on devices with edge-to-edge display mode enabled. No API changes required. ## v2.6.7 *May 12, 2026* * **WebSocket Alignment with iOS**\ Aligned the Android `SocketManager` behavior with iOS by forwarding `code`, `public-api-key`, `x-version`, and `x-platform` on socket connect and propagating the payment code on reconnect. Improves stability for payment-code driven flows. ## v2.6.6 *November 3, 2025* * **Click to Pay Passkey Support**\ Added passkey support for the Click to Pay flow, including `FLAG_ACTIVITY_CLEAR_TASK` handling for the in-app browser session. * **WebView Edge-to-Edge Rendering**\ Fixed an edge-to-edge rendering issue affecting `WebView` content on devices using the newer Android display model. ## v2.6.5 *October 27, 2025* * **Internal Release Pipeline Updates**\ Maintenance release with internal build and versioning updates. No merchant-facing API changes. ## v2.6.4 *November 13, 2025* * **Google Pay PIX Direct Flow**\ Added support for the Google Pay PIX direct flow, enabling merchants to offer PIX payments through the Google Pay integration. * **Google Pay PIX merchantName**\ Fixed the `merchantName` parameter being passed incorrectly in the Google Pay PIX flow. ## v2.6.0 *June 10, 2025* * **Google Pay PIX Direct**\ Added support for Google Pay PIX direct integration, enabling PIX payments via the Google Pay flow. No API changes required. ## v2.5.0 *April 25, 2025* * **Brazil Hybrid Card Support**\ Added support for Brazil hybrid cards, which are processed as credit by default and can be saved for future use. No API changes required. * **Chinese Localization (zh-CN)**\ Added complete Chinese Simplified (zh-CN) localization across payment flows, error messages, loaders, and APM screens. No API changes required. * **External Browser for APM Links**\ APM payment links now open in the device's external browser, improving compatibility and security for third-party payment flows. No API changes required. ## v2.4.2 *March 20, 2025* * **Default Credit Processing for Hybrid Cards**\ Hybrid cards in Brazil are now processed as credit by default in both payment and enrollment flows, and cards can be saved. This behavior is country-gated; ensure your 3DS flow is compatible before upgrading. ## v2.4.0 *March 5, 2025* * **OTP Screen Visibility in APM Render Mode**\ Fixed an issue where the OTP screen in APM render mode was cut off, making the digit input fields invisible to the user. No API changes required. * **Checkout Builder Endpoint Updates**\ Updated Checkout Builder endpoint signatures and aligned styling and action rendering with the latest builder schema. No API changes required. * **Name Fields in Card Forms**\ The `first_name` and `last_name` input fields are now included in the One Step, Step-by-Step, and Enrolled Payment card forms when required by the payment configuration. No API changes required. ## v2.3.0 *February 5, 2025* * **Geolocation in customer\_payer**\ Added support for `latitude` and `longitude` fields in `customer_payer` to enable geolocation data collection for fraud analysis. Pass the coordinates when initializing checkout. * **renderMode Enrollment Support**\ Added `renderMode` support for enrollment flows in Mobile Lite, enabling manual rendering control via Checkout Builder. No API changes required. * **CVV Validation Improvements**\ CVV validation for UATP cards is no longer applied when the CVV field is hidden in One Step and Step-by-Step forms. The CVV tooltip no longer reappears when the keyboard is dismissed. No API changes required. * **Mandatory Expiration Date for Voucher Brands**\ The `expirationDate` field is now mandatory for voucher brands that require it (Sodexo, VR, Elo, Alelo, Ticket), determined via card-iin detection. No API changes required. ## v2.2.2 *January 15, 2025* * **Luhn Validation Restored**\ Reverted card validation to use Luhn algorithm for all card types. This change restores the previous validation behavior and improves consistency across card brands. No API changes required. ## v2.2.1 *January 5, 2025* * **Minor Fixes and Updates**\ Applied minor bug fixes and internal stability updates. No API changes required. ## v2.2.0 *December 10, 2024* * **SVG Icon Support for Brands**\ Added SVG icon support in form headers across full, lite, seamless, and list modes for brands including Sodexo, Elo, Alelo, Bradexco, and Cartes Bancaires. No API changes required. * **PayPal Enrollment Support**\ Added support for enrolling PayPal as a payment method through the SDK enrollment flow. No API changes required. ## v2.1.0 *November 10, 2024* * **13 New Localization Languages**\ Added support for 13 new languages: Indonesian, Malaysian, Thai, Filipino, Traditional Chinese, French, Polish, Italian, German, Russian, Turkish, Dutch, and Swedish. No API changes required. * **PagBank Integration**\ Integrated PagBank as a new payment method, launched via Chrome Custom Tab. No API changes required. * **Enhanced Enrolled Card Fields**\ Enrolled card entries now expand instantly to show all payment fields in an unfolded state, improving checkout UX. No API changes required. ## v2.0.0 *October 1, 2024* * **NuPay Payment Conditions**\ Added NuPay payment conditions and installment options including debit, credit, and additional limit flows. No API changes required. * **Render Integration for Loader Control**\ Added a render integration mode that allows merchants to manually control SDK loader visibility during payment flows. No API changes required. * **Astropay Enrollment**\ Added support for enrolling Astropay as a payment method through the SDK enrollment flow. No API changes required. ## v1.24.0 *August 15, 2024* * **MODO APM**\ Added support for MODO as an alternative payment method via deeplink flow. * **Mercado Pago External Browser**\ Mercado Pago Checkout Pro now opens in the device's external browser instead of a WebView. No integration changes required. * **Mercado Pago WebView Flow**\ The in-SDK WebView flow for Mercado Pago Checkout Pro is deprecated and will be removed in a future version. Migrate to the external browser flow, which is now the default behavior. ## v1.20.2 *April 10, 2024* * **Token With Information Callback**\ Added a new `tokenWithInformation` callback to surface card token data during payment flows. No API changes required. * **NuPay Redirect Issue**\ Fixed an issue where NuPay payment redirects did not complete correctly. No API changes required. * **CVV Validation in Enrollment**\ Fixed incorrect CVV validation logic during the card enrollment flow. No API changes required. ## v1.17.0 *January 20, 2024* * **Nubank Flow Improvements**\ Improved the Nubank payment flow for a more reliable and consistent user experience. No API changes required. ## v1.16.0 *December 5, 2023* * **3DS FAC Fraud Engine**\ Added support for the FAC fraud engine in 3DS authentication flows. Contact your Yuno account manager to enable this feature. ## v1.15.1 *November 15, 2023* * **Java Version Compatibility**\ Fixed a compatibility issue affecting builds targeting specific Java versions. No API changes required. ## v1.15.0 *November 1, 2023* * **Cards and Nubank UI/UX**\ Improved the visual design and user experience for card payment forms and the Nubank flow. No API changes required. * **Chile RUT Validation**\ Improved RUT (Chilean tax ID) validation logic to handle edge cases more accurately. No API changes required. ## v1.14.0 *October 10, 2023* * **Nubank CNPJ Field Removed**\ Removed the CNPJ input field from the Nubank payment flow to streamline the checkout experience. No API changes required. ## v1.13.0 *September 15, 2023* * **Card Forms Design and UX**\ Refreshed the design and improved the user experience across all card payment forms. No API changes required. ## v1.12.2 *August 25, 2023* * **3DS Netcetera Fraud Engine**\ Added support for the Netcetera fraud engine in 3DS authentication flows. Contact your Yuno account manager to enable this feature. ## v1.12.1 *August 10, 2023* * **MercadoPago SDK Performance**\ Improved MercadoPago SDK initialization and rendering performance. No API changes required. ## v1.12.0 *July 25, 2023* * **PIX Santander Payment Method**\ Added support for PIX payments via Santander as a new payment method option. No API changes required. ## v1.11.4 *July 10, 2023* * **MercadoPago SDK Performance**\ Further performance improvements to the embedded MercadoPago SDK. No API changes required. ## v1.11.3 *June 25, 2023* * **Style Overrides**\ Fixed an issue where custom style overrides were not being applied correctly across SDK components. No API changes required. ## v1.11.2 *June 10, 2023* * **Card Flow Expiration Date UX**\ Improved the expiration date input experience in card payment flows for more intuitive data entry. No API changes required. ## v1.11.1 *May 25, 2023* * **Card Flow Improvements**\ General improvements to the card payment flow for stability and usability. No API changes required. ## v1.11.0 *May 10, 2023* * **DeUna Payment Method**\ Added support for DeUna as a new payment method option. No API changes required. ## v1.10.1 *April 20, 2023* * **SDK and Card Flow Performance**\ Performance improvements across the SDK core and card payment flows. No API changes required. ## v1.10.0 *April 5, 2023* * **Pluxe Payment Method**\ Added support for Pluxe as a new payment method option. No API changes required. * **Google Pay Flow Improvements**\ Improved Google Pay flow reliability and user experience. No API changes required. ## v1.8.0 *February 15, 2023* * **Headless 3DS Challenge URL**\ Added a headless flow to retrieve the 3DS challenge URL for custom 3DS integration scenarios. No API changes required. ## v1.7.0 *January 20, 2023* * **Headless OTT and 3DS Flow**\ Added a headless flow to generate a one-time token (OTT) and retrieve the 3DS challenge URL, enabling fully custom payment UI implementations. No API changes required. ## v1.6.1 *December 15, 2022* * **Antifraud OTT Generation Block**\ Fixed an issue where the antifraud module was incorrectly blocking one-time token generation. No API changes required. * **showPaymentStatus Argument Added**\ Added `showPaymentStatus` boolean argument to `startPaymentLite` and `startPayment` to control whether the SDK displays the error screen after a failed payment. Pass `false` to suppress the SDK error screen and handle it yourself. ## v1.6.0 *December 1, 2022* * **Mercado Pago Antifraud**\ Added Mercado Pago antifraud integration to enhance fraud prevention for Mercado Pago payment flows. No API changes required. * **Click to Pay Flow Improvements**\ Improved the Click to Pay flow for better reliability and user experience. No API changes required. ## v1.5.14-HF *November 20, 2022* * **OTT with Card Info**\ Added a function to create a one-time token that includes full card information during both Enrollment and Payment flows. No API changes required. * **Location Permissions Crash**\ Fixed a crash that occurred when location permissions were not granted by the user. No API changes required. ## v1.5.14 *November 10, 2022* * **Step-by-Step and One-Step Card Improvements**\ Improved the step-by-step and one-step card payment flows for better reliability and user experience. No API changes required. ## v1.5.13 *October 25, 2022* * **Mercado Pago Wallet Enrollment**\ Added support for enrolling Mercado Pago Wallet via deeplink and Chrome Custom Tab. No API changes required. * **3DS and Cybersource Fraud Engines**\ Added support for 3DS and Cybersource fraud engines to strengthen fraud prevention in card payment flows. Contact your Yuno account manager to enable these features. ## v1.5.12 *October 10, 2022* * **Card Payments Flow Improvements**\ Improved the card payments flow for stability and reliability. No API changes required. * **SecureFields Component Consolidation**\ Replaced the separate `CardExpiryDate` `EditText` and `TextField` `ItemView` (CVV) components with a single `CardDataStackView` component for SecureFields integration. Update your layout to use `CardDataStackView`. ## v1.5.11 *September 25, 2022* * **Discover Card Validation**\ Fixed card number validation for Discover cards that was incorrectly rejecting valid card numbers. No API changes required. ## v1.5.0 *September 1, 2022* * **Antifraud for Cards Flow**\ Added antifraud integration for card payment flows to improve fraud detection during checkout. Contact your Yuno account manager to enable this feature. * **Click 2 Pay Payment Method**\ Added support for Click 2 Pay as a new payment method option. No API changes required. * **Supported Language Methods**\ Added programmatic language selection methods, allowing the SDK locale to be set at runtime. No API changes required. * **SDK Design Refresh**\ Introduced an updated SDK visual design across payment and enrollment screens. No API changes required. ## v1.4.12 *August 20, 2022* * **Card Payments Flow Improvements**\ Improved the card payments flow for better stability and user experience. No API changes required. ## v1.4.11 *August 5, 2022* * **Card Enrollment Flow Improvements**\ Improved the card enrollment flow for better reliability and user experience. No API changes required. ## v1.4.10 *July 20, 2022* * **Google Pay Flow Improvements**\ Improved Google Pay flow performance and reliability. No API changes required. * **SDK State After App Kill**\ Fixed an issue where the SDK failed to restore its state correctly after the host app was killed by the system. No API changes required. ## v1.4.9 *July 5, 2022* **New Payment Methods** * **Google Pay Payment Method**\ Added Google Pay as a supported payment method. No API changes required. * **Voucher Card Payment Method**\ Added support for VOUCHER card payments. No API changes required. * **SafetyPay Payment Method**\ Added support for SafetyPay as a payment method. No API changes required. * **Efecty Payment Method**\ Added support for Efecty as a payment method. No API changes required. * **Nequi Payment Method**\ Added support for Nequi as a payment method. No API changes required. * **Yappy Payment Method**\ Added support for Yappy as a payment method. No API changes required. * **Sencillito Payment Method**\ Added support for Sencillito as a payment method. No API changes required. * **Card Payment Installments**\ Added installments support for card payments, allowing customers to split payments into multiple installments. No API changes required. * **Antifraud Session ID Generation**\ Added `sessionId` generation for antifraud providers via `startCheckout()`. No API changes required. * **Persistent Loader Option**\ Added an option to persist the SDK loader between payment steps for a smoother transition experience. No API changes required. * **Step-by-Step Enrollment CVV Fields**\ Fixed missing CVV and expiry fields in the step-by-step card enrollment flow. No API changes required. ## v1.4.8 *June 20, 2022* * **Google Pay Flow Improvements**\ Improved Google Pay flow performance and reliability. No API changes required. ## v1.4.7 *June 5, 2022* * **Step-by-Step Enrollment CVV Fields**\ Fixed missing CVV and expiry fields in the step-by-step card enrollment flow. No API changes required. ## v1.4.6 *May 25, 2022* * **Voucher Card Payment Method**\ Added support for VOUCHER card payments. No API changes required. * **Google Pay Flow Improvements**\ Improved Google Pay flow performance and reliability. No API changes required. ## v1.4.5 *May 10, 2022* * **Card and PIX Flow Design**\ Improved the visual design of card step-by-step and PIX payment flows. No API changes required. ## v1.4.4 *April 25, 2022* * **3DS Flow Improvements for Cards**\ Improved the 3DS authentication flow for card payments for better reliability and compatibility. No API changes required. ## v1.4.3 *April 10, 2022* * **Card Step-by-Step Field Navigation**\ Improved field navigation and focus handling in the step-by-step card form for a smoother data entry experience. No API changes required. ## v1.4.2 *March 25, 2022* * **Card Step-by-Step Design**\ Improved the visual design of the step-by-step card payment form. No API changes required. ## v1.4.1 *March 10, 2022* * **Google Pay Payment Method**\ Added Google Pay as a supported payment method. No API changes required. * **Sencillito Payment Method**\ Added support for Sencillito as a payment method. No API changes required. ## v1.4.0 *February 20, 2022* **New Payment Methods** * **SafetyPay Payment Method**\ Added support for SafetyPay as a payment method. No API changes required. * **Efecty Payment Method**\ Added support for Efecty as a payment method. No API changes required. * **Nequi Payment Method**\ Added support for Nequi as a payment method. No API changes required. * **Yappy Payment Method**\ Added support for Yappy as a payment method. No API changes required. * **Card Payment Installments**\ Added installments support for card payments, allowing customers to split payments into multiple installments. No API changes required. * **Antifraud Session ID Generation**\ Added `sessionId` generation for antifraud providers via `startCheckout()`. No API changes required. * **Persistent Loader Option**\ Added an option to persist the SDK loader between payment steps for a smoother transition experience. No API changes required. ## v1.3.9 *February 5, 2022* * **Loading Screen Design**\ Added a new loading screen design for a more polished SDK experience. No API changes required. * **Mercado Pago Checkout Pro Formless**\ Mercado Pago Checkout Pro no longer requires filling out a form before redirecting, simplifying the checkout experience. No API changes required. * **Card Step-by-Step Flow Fix**\ Fixed an issue in the step-by-step card payment flow that caused incorrect behavior in certain scenarios. No API changes required. ## v1.3.8 *January 20, 2022* * **Null Customer Document Crash**\ Fixed a crash that occurred when the customer object had a null document field. No API changes required. ## v1.3.7 *January 5, 2022* * **Card Flows Improvements**\ General improvements to card payment and enrollment flows for better stability and user experience. No API changes required. ## v1.3.6 *December 15, 2021* * **Dynamic CVV Requirement for Enrolled Cards**\ Removed the static flag to require CVV on enrolled cards. CVV requirement is now determined dynamically based on the payment method configuration. No API changes required. ## v1.3.5 *December 1, 2021* * **Cash Payment Method**\ Added support for CASH as a payment method option. No API changes required. * **Bank Transfer Payment Method**\ Added support for BANK\_TRANSFER as a payment method option. No API changes required. ## v1.3.4 *November 15, 2021* * **Unlimint Payment Method**\ Added support for Unlimint as a payment method option. No API changes required. * **PagSeguro Payment Method**\ Added support for PagSeguro as a payment method option. No API changes required. ## v1.3.3 *November 1, 2021* * **Step-by-Step Card Form Design**\ Fixed visual design issues in the step-by-step card payment form. No API changes required. ## v1.3.2 *October 15, 2021* **New Payment Methods** * **Tarjeta Clave Payment Method**\ Added support for Tarjeta Clave as a payment method option. No API changes required. * **Kushki Payment Method**\ Added support for Kushki as a payment method option. No API changes required. * **Khipu Payment Method**\ Added support for Khipu as a payment method option. No API changes required. * **CVV Request Flag for Enrolled Cards**\ Added `requestSecurityCode` to `YunoConfig` to enable CVV requests for enrolled card payments at SDK initialization. Set `requestSecurityCode = true` in your `YunoConfig` to prompt users for CVV when paying with enrolled cards. ```kotlin theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} data class YunoConfig( val cardFlow: CardFormType = CardFormType.ONE_STEP, val saveCardEnabled: Boolean = false, val requestSecurityCode: Boolean = false ) ``` * **OTP Screen Expiration Timer**\ Added a countdown timer to the OTP screen to communicate payment expiration time to users. No API changes required. * **EnrollmentMethodsListView Component**\ Added `EnrollmentMethodsListView()` component to display payment methods available for enrollment. No API changes required. ## v1.3.1 *October 1, 2021* * **Paga con Rappi Payment Method**\ Added support for Paga con Rappi as a payment method option. No API changes required. ## v1.3.0 *September 15, 2021* **New Payment Methods** * **Arcus Cash Payment Method**\ Added support for Arcus Cash as a payment method option. No API changes required. * **Daviplata Payment Method**\ Added support for Daviplata as a payment method option. No API changes required. * **CoDi Payment Method**\ Added support for CoDi as a payment method option. No API changes required. * **PayValida Payment Method**\ Added support for PayValida as a payment method option. No API changes required. * **Save Card via YunoConfig**\ Added `saveCardEnabled` to `YunoConfig` to enable or disable the Save Card option during payment. Set `saveCardEnabled = true` in your `YunoConfig` during `initialize` to allow users to save their cards. ```kotlin theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} data class YunoConfig( val cardFlow: CardFormType = CardFormType.ONE_STEP, val saveCardEnabled: Boolean = false ) ``` ## v1.2.5 *September 1, 2021* * **Payment and Enrollment Cancel State**\ Fixed incorrect state reported when a user cancels during payment or enrollment flows. No API changes required. ## v1.2.4 *August 15, 2021* * **SPEI Payment Method**\ Added support for SPEI as a payment method option. No API changes required. * **Step-by-Step Card Enrollment and Payment**\ Added a step-by-step card form for both Enrollment and Payment flows, allowing users to enter card data field by field. No API changes required. ## v1.2.2 *August 1, 2021* * **Enrollment State Callback**\ Added an enrollment state callback to `startEnrollment`, allowing you to respond to enrollment lifecycle events without using `onActivityResult`. No API changes required. * **Payment State Callback in continuePayment**\ Added a payment state callback to `continuePayment`, allowing you to handle payment continuation events without using `onActivityResult`. No API changes required. * **One-Time Token Callback in startPayment**\ Added a one-time token callback to `startPayment`, allowing you to receive the OTT directly without using `onActivityResult`. No API changes required. ## v1.2.1 *July 20, 2021* * **Spanish Typo in Card Payment**\ Fixed a typo in the Spanish localization for the card payment screen title. No API changes required. * **Document Number Field Error Message**\ Fixed an incorrect error message displayed on the document number input field. No API changes required. ## v1.2.0 *July 5, 2021* * **startPayment Callback Migration**\ Added a direct callback parameter to `startPayment` to replace `onActivityResult` for receiving payment results. Update your integration to use the new callback parameter instead of `onActivityResult`. * **initEnrollment Callback Migration**\ Added `initEnrollment` method with a direct callback to replace `onActivityResult` for receiving enrollment results. Update your integration to use `initEnrollment` with the callback parameter instead of `onActivityResult`. ## v1.1.1 *June 20, 2021* * **Production Environment Tag Hidden**\ Fixed an issue where the environment label was displayed for production API keys. The tag is now hidden in production builds. No API changes required. ## v1.1.0 *June 5, 2021* **New Features** * **Credit Card Enrollment Flow**\ Added a full credit card enrollment flow to the SDK, allowing users to save cards for future payments. No API changes required. * **EnrollmentPaymentMethodListView Component**\ Added `EnrollmentPaymentMethodListView()` and `UnEnrolledPaymentMethodListView()` components to display enrolled and un-enrolled payment methods separately. No API changes required. * **PaymentMethodListView onSelected Event**\ Added an `onSelected` event to `PaymentMethodListView` for responding to user payment method selection. No API changes required. * **startEnrollment Requires Country Code**\ `startEnrollment` now requires a country code parameter (e.g., `"CO"`). Add the country code argument to all `startEnrollment` calls in your integration. * **testResult Options Removed**\ Removed `testResult` configuration options from the SDK. Remove any references to `testResult` from your integration code. * **Expiration Date Validation**\ Improved expiration date validation in the Credit Card form to reject invalid dates more accurately. No API changes required. ## v1.0.11 *May 20, 2021* * **Enrollment UX After External App**\ Fixed a UX issue in the enrollment flow that occurred after returning from an external app interaction, such as a bank app redirect. No API changes required. ## v1.0.10 *May 10, 2021* * **404 Error After Enrollment**\ Fixed a 404 error that was triggered after completing the card enrollment flow. No API changes required. ## v1.0.9 *April 25, 2021* * **Infinite Loader in Payment Lite Flow**\ Fixed an issue where the loader spinner would not dismiss during the payment lite flow, blocking user interaction. No API changes required. ## v1.0.8 *April 10, 2021* * **Replaced Moshi with Gson**\ Replaced the Moshi JSON serialization dependency with Gson to reduce SDK size and improve compatibility. No API changes required. ## v1.0.7 *March 25, 2021* * **Android Hint Type on Attrs**\ Updated the Android hint type declaration on attributes that use resource references to ensure proper rendering across API levels. No API changes required. ## v1.0.6 *March 10, 2021* * **Payment Method Item Design**\ Fixed visual design issues with payment method list items in the full SDK variant. No API changes required. * **Phone Field Visibility**\ Fixed an issue where the phone number input field was incorrectly hidden in some payment flows. No API changes required. ## v1.0.5 *February 25, 2021* * **SafetyPay Payment Method**\ Added support for SafetyPay as a payment method option. No API changes required. * **WebSocket Payment State Notifications**\ Added WebSocket support for real-time payment state notifications during the checkout flow. No API changes required. * **CustomerForm Regex Validators**\ Fixed regex validation errors in the CustomerForm that rejected valid input on certain fields. No API changes required. ## v1.0.4 *February 10, 2021* * **Transaction Status Set to Pending on Start**\ The transaction status is now set to pending immediately upon payment initiation, providing more accurate state tracking. No API changes required. ## v1.0.3 *January 25, 2021* * **Internal Error State Callback**\ Added an internal error state callback to surface SDK-level errors to the integrating application. No API changes required. ## v1.0.2 *January 15, 2021* * **CVV Regex Reset on Card Number Delete**\ Fixed an issue where the CVV regex validator was not reset when the card number was deleted in the payment form, causing invalid CVV validation states. No API changes required. ## v1.0.1 *January 5, 2021* * **Bank Transfer and Card Payment Filter**\ Added a payment type filter to allow displaying only bank transfer or card payment methods in the payment list view. No API changes required. * **Payment View Models Testing**\ Added testing features for payment view models to facilitate integration testing. No API changes required. * **PIX and NuPay Payment Type Name**\ Fixed incorrect payment type names displayed for PIX and NuPay methods in the payment list. No API changes required. * **UTC Timezone in DateExtension**\ Updated `DateExtension` to use UTC timezone for all date formatting operations to ensure consistent date handling across regions. No API changes required. ## v1.0.0 *December 15, 2020* **Initial Release** * **Payment Methods**\ Initial release of the Yuno Android SDK with support for multiple payment methods including Mercado Pago Checkout Pro and debit/credit card payments. * **Mercado Pago Enrollment**\ Added support for Mercado Pago method enrollment in the initial SDK release. No API changes required. * **Debit and Credit Card Payments**\ Added support for debit and credit card payments with full card form UI. No API changes required. * **Initial Bug Fixes**\ Fixed initial issues including city text field hint, PIX type in payments flow, card information on `startCheckout`, and English translation in the payment form title. No API changes required. # API Changelog Source: https://docs.y.uno/changelog/api Latest updates to the Yuno Payments API and platform features ## v2026-07 *July 11, 2026* **Security** * **PCI Proxy**\ You can now send stored card data to any third-party API through Yuno's PCI DSS Level 1 environment using the new `/v1/pci-proxy/forward` endpoint, without bringing your systems into PCI scope. *See also: [PCI Proxy overview](/docs/security-and-compliance/pci-proxy/overview)* ## v2025-06 *June 30, 2025* * **Optional first and last name for customers**\ The `first_name` and `last_name` fields are now optional when creating a customer via the API. If a payment provider requires them, the SDK form will prompt the user. If you are not using the Yuno SDK, ensure these fields are provided at payment creation time when required by the provider. *See also: [Create customer reference](/reference/create-customer)* **Security** * **3DS SCA exemption support**\ A new optional field `strong_customer_authentication_exemptions` is now available under `payment_method.detail.card.three_d_secure`. Yuno also propagates exemption recommendations from your fraud provider through the full payment route to the 3DS gateway, and the exemption type appears in the payment response, GET API, and webhooks. *See also: [SCA exemptions guide](/docs/sca-exemptions)* **Payments** * **Airline trip type field**\ A new `type` enum field has been added inside `additional_data.airline` to specify the trip type: `ONE_WAY`, `ROUNDTRIP`, or `MULTIPLE_DESTINATIONS`. No integration changes required if you do not use airline data. *See also: [Create payment reference](/reference/create-payment)* * **Airline leg ordering fields**\ Two new integer fields, `order` and `route_order`, have been added inside `additional_data.airline.legs` to describe the order of legs within a route and across routes respectively. No integration changes required if you do not use airline leg data. *See also: [Create payment reference](/reference/create-payment)* * **Transportation data struct**\ A new `transportations` array of objects is available inside `additional_data` for non-airline travel bookings such as bus, train, ship, tram, and car. Each entry supports legs, passengers, and tickets sub-objects with departure/arrival details. *See also: [Create payment reference](/reference/create-payment)* ## v2025-05 *May 31, 2025* **Security** * **Network token enrollment for vaulted cards**\ When the network tokens feature is enabled, Yuno now generates network tokens for all cards enrolled and stored in the Vault. One-time-use cards are excluded. This aligns with Visa and Mastercard network tokenization standards and improves recurring payment security and reliability. *See also: [Network tokens guide](/docs/network-tokens)* **Subscriptions** * **Subscription billing date control**\ A new `billing_date` struct is available when creating a subscription, letting you define billing timing as `PREPAID`, `POSTDATE`, or a specific `DAY` of the month. This field is mutually exclusive with the `frequency` object. *See also: [Subscriptions guide](/docs/subscriptions)* **Payments** * **Payment method expiration date field**\ A new `expirates_at` timestamp field is now returned inside `payment_method_detail.wallet` for asynchronous payment methods that support it. Availability depends on provider support. *See also: [Create payment reference](/reference/create-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "payment_method": { "type": "NU_PAY", "payment_method_detail": { "wallet": { "expirates_at": "2025-05-14T15:06:48.383418Z" } } } ``` * **Customer geolocation in payments**\ A new `geolocation` object with `latitude` and `longitude` fields is now available inside `customer_payer` when creating a payment. *See also: [Create payment reference](/reference/create-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "customer_payer": { "id": "b080db73-b12d-4710-a604-d659bce26f01", "geolocation": { "latitude": "-34.4720", "longitude": "-58.5300" } } ``` * **Cancel PENDING APM payments**\ You can now cancel a `PENDING` payment created with an alternative payment method (APM) via the cancel endpoint. Previously this was restricted to card transactions only. Feature availability depends on provider support. *See also: [Cancel payment reference](/reference/cancel-payment)* **Webhooks** * **Subscription webhook URL support**\ You can now define a `webhook_url` in the Developers section of the dashboard to receive subscription lifecycle events. Different event types produce distinct webhook payloads. *See also: [Webhooks documentation](/docs/configure-webhooks)* ## v2025-04 *April 30, 2025* **Security** * **3DS setup service removed**\ The separate setup service call for the 3DS direct implementation is no longer required. Data collection and setup are now handled automatically inside payment creation, simplifying the integration flow. *See also: [3D Secure guide](/docs/security-and-compliance/3d-secure)* **Payments** * **Extended airline leg fields**\ New fields have been added inside `additional_data.airline.legs`: `arrival_airport_country`, `arrival_airport_city`, `departure_airport_country`, and `departure_airport_city`. Also, a `booking_system_code` and `booking_system_name` are now available inside `airline.tickets[].issue`. No integration changes required if you do not use airline data. *See also: [Create payment reference](/reference/create-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "airline": { "legs": [ { "arrival_airport": "AMS", "arrival_airport_country": "AR", "arrival_airport_city": "BUE", "departure_airport": "EZE", "departure_airport_country": "AR", "departure_airport_city": "BUE" } ], "tickets": [ { "issue": { "booking_system_code": "TT01", "booking_system_name": "booking system" } } ] } } ``` ## v2025-03 *March 31, 2025* **Payments** * **Discounts array in order data**\ A new `discounts` array of objects is available inside `additional_data.order`. Each discount entry supports `id`, `name`, and `unit_amount` fields. *See also: [Payment amount details guide](/docs/payment-amount-details#discounts)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "order": { "discounts": [ { "id": "XYZ", "name": "Offer", "unit_amount": "100" } ] } } ``` * **Monitors flag in routing rules**\ A new boolean field `monitors` has been added inside the `routing_rules` object in the payment response, indicating whether a transaction was processed through the Monitors feature. No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "routing_rules": { "smart_routing": false, "monitors": true, "condition": { "id": 133892, "name": null, "description": null } } ``` **Refunds** * **Customer info in refund requests**\ A new `customer_payer` object is now accepted in refund requests, allowing you to pass additional customer data (e.g., `document`) to providers that require it. *See also: [Refund payment reference](/reference/refund-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "description": "Duplicate", "reason": "REQUESTED_BY_CUSTOMER", "merchant_reference": "AAB01-432245", "customer_payer": { "document": { "document_type": "DNI", "document_number": "38919283" } } } ``` ## v2025-02 *February 28, 2025* **Webhooks** * **OAuth2 authentication for webhooks**\ Webhooks now support OAuth2 authentication. Configure `authentication_url`, `client_secret_key`, `client_id`, and `grant_type` in the Developers/Webhooks dashboard section so Yuno can obtain tokens for secure webhook delivery. *See also: [Configure webhooks guide](/docs/configure-webhooks)* * **Dedicated URL for chargeback webhooks**\ You can now configure a dedicated webhook URL specifically for chargeback events. Previously, chargebacks were bundled with the Purchase trigger. Update your webhook configuration in the dashboard to use the new dedicated chargeback URL. *See also: [Configure webhooks guide](/docs/configure-webhooks)* ## v2025-01 *January 31, 2025* **Payments** * **Ticket data in payment orders**\ A new `tickets` array of objects is available inside `additional_data.order`, supporting fields like `id`, `name`, `description`, `type`, `amount`, and a nested `event` object with address details. *See also: [Payment API reference](/reference/payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "order": { "tickets": [ { "id": "XYZ", "name": "Music", "type": "VIRTUAL", "amount": { "currency": "COP", "value": 5000 }, "event": { "id": "ADMKASLMD", "name": "Music festival", "type": "FESTIVAL", "date": "1990-02-28" } } ] } } ``` **Subscriptions** * **Subscription initial payment validation**\ A new boolean field `initial_payment_validation` is available when creating a subscription. Set to `true` to continue the subscription only after a successful first payment, or `false` to continue regardless of the first payment outcome. *See also: [Create subscription reference](/reference/create-subscription)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "initial_payment_validation": true } ``` ## v2024-12 *December 31, 2024* **Payments** * **Card type selection for vaulted tokens**\ When using a vaulted token for payment, you can now specify `card_data.type` as `CREDIT` or `DEBIT` inside `payment_method.detail.card`. Useful for markets like Brazil where the same card can be used for both transaction types. *See also: [Payment API reference](/reference/create-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "payment_method": { "type": "CARD", "vaulted_token": "e2961d37-9898-4bac-8408-cc9f02c11cc2", "detail": { "card": { "card_data": { "type": "DEBIT" } } } } ``` * **Account funding transaction details**\ A new `account_funding` object is available inside `additional_data`, supporting `sender` and `beneficiary` sub-objects with name, email, and document fields required for Account Funding Transactions (AFT). *See also: [AFT guide](/docs/account-funding-transactions-afts)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "account_funding": { "sender": { "first_name": "John", "last_name": "Doe", "email": "john.doe@mail.com" }, "beneficiary": { "first_name": "Chris", "last_name": "Martin", "document": { "document_number": "38192019", "document_type": "CC" } } } } ``` * **Network transaction ID for stored credentials**\ A new `network_transaction_id` field is now available inside `payment_method.detail.card.stored_credentials`. Recommended for subscription payments with enrolled cards to ensure traceability across the payment lifecycle. *See also: [Stored credentials guide](/docs/stored-credentials)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "payment_method": { "type": "CARD", "vaulted_token": "eb8caa17-6407-457b-960e-125d8d7a90c1", "detail": { "card": { "stored_credentials": { "reason": "CARD_ON_FILE", "usage": "USED", "network_transaction_id": "583103536844189" } } } } ``` * **Smart routing flag in payment response**\ A new boolean field `smart_routing` has been added inside the `routing_rules` object in the payment response, indicating whether the transaction was processed through the smart routing feature. No integration changes required. *See also: [Payment API reference](/reference/create-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "routing_rules": { "smart_routing": false, "condition": { "id": 133892, "name": null, "description": null } } ``` **Subscriptions** * **Trial period for subscriptions**\ A new `trial_period` object is available when creating a subscription. Define `billing_cycles` and a reduced `amount` to offer partial or full (free) trial periods before full billing begins. *See also: [Create subscription reference](/reference/create-subscription)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "trial_period": { "billing_cycles": "1", "amount": { "currency": "COP", "value": 2500 } } ``` ## v2024-11 *November 30, 2024* **Payments** * **Card expiration fields in transaction response**\ Two new fields, `expiration_month` and `expiration_year`, are now returned inside `transactions.card_data` in the payment response. No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "card_data": { "holder_name": "Paco", "iin": "48710499", "brand": "VISA", "fingerprint": "71000db4-f8e7-4ea0-a2cc-9d9ebb76a955", "expiration_month": 3, "expiration_year": 30 } ``` * **Recipients for split marketplace payments**\ A new Recipients API allows you to register recipients with multiple provider mappings before sending split payments. Use `recipient_id` in the `split_marketplace` array instead of provider-specific IDs when multiple providers are involved. *See also: [Split payments marketplace guide](/docs/payment-features/split-payments-marketplace)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "split_marketplace": [ { "amount": { "currency": "BRL", "value": 500 }, "recipient_id": "09d8bad7-4efe-47e2-b9ee-f4028460bab1", "type": "PURCHASE" }, { "amount": { "currency": "BRL", "value": 500 }, "recipient_id": "d94e02c1-cc47-4e60-a20a-2b17fe58992d", "type": "PURCHASE" } ] ``` **Refunds** * **Receipt support for refund transactions**\ Refund requests now accept a `response_additional_data.receipt` boolean and an optional `receipt_language` field. When set, a receipt URL is returned in `payment.transaction.receipt_url` after the refund is processed. *See also: [Refund payment reference](/reference/refund-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "description": "Duplicate", "reason": "REQUESTED_BY_CUSTOMER", "merchant_reference": "AAB01-432245", "response_additional_data": { "receipt": true, "receipt_language": "ES" } } ``` **Subscriptions** * **Items data for subscriptions**\ A new `additional_data.order.items` array is now available when creating a subscription, allowing you to pass item-level details (category, id, name, quantity, unit\_amount) to providers. *See also: [Create subscription reference](/reference/create-subscription)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "order": { "items": [ { "category": "art", "id": "AA01", "name": "Test item", "quantity": 1, "unit_amount": 10 } ] } } ``` **Payouts** * **Payouts to vaulted tokens**\ The Payouts API now supports sending payouts directly to enrolled credit or debit cards using a `vaulted_token` inside `withdrawal_method`. Provider support required. *See also: [Create payout reference](/reference/create-payout)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "withdrawal_method": { "type": "CARD", "provider_id": "UNLIMINT", "vaulted_token": "your-vaulted-token" } ``` ## v2024-10 *October 31, 2024* **Subscriptions** * **Smart retry scheme for subscriptions**\ Subscription declined transactions now support Smart Retries using machine learning to determine optimal retry timing. The retry schedule follows seven attempts over 96 hours. Configure via the Subscriptions dashboard. *See also: [Transaction retries guide](/docs/payment-features/transaction-retries)* **Payments** * **Parent payment method type field**\ A new `parent_payment_method_type` field is returned inside `transactions.payment_method` indicating the wallet provider (`APPLE_PAY`, `GOOGLE_PAY`, or `CLICK_TO_PAY`) used in a direct wallet integration. No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "transactions": { "payment_method": { "vaulted_token": "29b44e45-57fe-41b0-81c8-586deeb699b2", "type": "CARD", "parent_payment_method_type": "CLICK_TO_PAY" } } ``` * **Connection ID in transaction data**\ A new `connection_data.id` field is returned inside each transaction object, providing the unique identifier of the payment connection used to process the transaction. No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "connection_data": { "id": "88292fd3-bf5b-4b23-bb95-7186ba4e7f88" } ``` * **Receipt support for cancel transactions**\ Cancel requests now accept a `response_additional_data.receipt` boolean. When set, a receipt URL is returned in `payment.transaction.receipt_url` after the cancellation is processed. *See also: [Cancel payment reference](/reference/cancel-payment)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "description": "Duplicate", "reason": "REQUESTED_BY_CUSTOMER", "merchant_reference": "AAB01-432245", "response_additional_data": { "receipt": true } } ``` * **Shipping object in payment request**\ A new `shipping` object is available when creating a payment, supporting fields `type`, `description`, `carrier`, and `deliver_at` to specify shipment details. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "shipping": { "type": "STANDARD", "description": "Test shipment", "carrier": "UPS", "deliver_at": "2024-09-17T20:43:54.786342Z" } ``` ## v2024-09 *September 30, 2024* **Payments** * **Payment link enrollment flow**\ Payment links now support card enrollment on successful payment. Set `one_time_use=true` and `vault_on_success=true` when creating a payment link to generate a new `vaulted_token` for the customer upon payment success. *See also: [Enroll cards with payment links guide](/docs/enroll-cards-with-payment-link)* * **Split marketplace payments**\ A new `split_marketplace` array is now available in the payment request, allowing merchants to divide a payment among multiple recipients with configurable amounts, types (`PURCHASE`, `COMMISSION`), and liability settings. Provider support required. *See also: [Split marketplace guide](/docs/split-payments-marketplace)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "split_marketplace": [ { "provider_recipient_id": "recipient_123", "type": "PURCHASE", "amount": { "value": 7500, "currency": "COP" }, "liability": { "processing_fee": "MERCHANT", "chargebacks": false } }, { "provider_recipient_id": "recipient_456", "type": "COMMISSION", "amount": { "percentage": 30, "currency": "COP" }, "liability": { "processing_fee": "RECIPIENT", "chargebacks": true } } ] ``` ## v2024-08 *August 31, 2024* **Subscriptions** * **Subscription agreement ID field**\ A new `subscription_agreement_id` field is available inside `payment_method.detail.card.stored_credentials`, required by certain markets and processors (e.g., Mexico) to include the agreement ID with the customer in subscription-related payments. *See also: [Stored credentials guide](/docs/stored-credentials#subscription-agreement)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "payment_method": { "type": "CARD", "vaulted_token": "eb8caa17-6407-457b-960e-125d8d7a90c1", "detail": { "card": { "stored_credentials": { "reason": "CARD_ON_FILE", "usage": "USED", "subscription_agreement_id": "AA0001" } } } } ``` **Payouts** * **Referenced payouts from transactions**\ Payouts to card payment methods now support a `original_transaction_id` field inside `withdrawal_method`, enabling merchants to initiate a payout using card data from a prior transaction without needing PCI compliance. *See also: [Payouts guide](/docs/payouts)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "withdrawal_method": { "type": "STP_PAYOUT", "provider_id": "STP", "original_transaction_id": "9104911d-5df9-429e-8488-ad41abea1a4b" } ``` **Payments** * **Currency conversion in payments**\ A new `currency_conversion` object is available inside the `amount` struct, allowing you to pass `provider_currency_conversion_id`, `cardholder_currency`, and `cardholder_amount` for dual-currency settlement. Contact your technical account manager to enable. *See also: [Currency conversion guide](/docs/currency-conversion)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "amount": { "currency": "COP", "value": 5000, "currency_conversion": { "provider_currency_conversion_id": "AAA01SADOIAJSDLAKSJM", "cardholder_currency": "ARS", "cardholder_amount": 1146.55 } } ``` * **ISO 8583 response code and message**\ Two new fields, `iso8583_response_code` and `iso8583_response_message`, are now returned inside `transactions.provider_data`, providing the direct ISO 8583 response from the provider. ABECS codes are also surfaced in these fields for Brazilian providers. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "provider_data": { "id": "ADYEN", "transaction_id": "FLX4WSXF7SFZDV65", "iso8583_response_code": "05", "iso8583_response_message": "Approved or completed successfully" } ``` * **Cancel or refund payment by payment ID**\ A new endpoint allows you to cancel or refund a payment by providing only the `payment_id`, without needing the `transaction_id`. The existing transaction-level endpoint remains available. *See also: [Cancel or refund payment reference](/reference/cancel-or-refund-a-payment)* ## v2024-07 *July 31, 2024* **Payments** * **Wallet cryptogram for native pay**\ A new `cryptogram` field is available inside `payment_method.detail.wallet` when creating a payment, enabling direct Apple Pay and Google Pay API integrations without using the Yuno SDK. *See also: [Apple Pay direct integration guide](/docs/apple-pay-direct-integration)* * **Taxes array in order data**\ A new `taxes` array of objects is available inside `additional_data.order`, supporting multiple tax lines per payment. The prior top-level `tax` object remains supported but the new array is recommended for better tax management. *See also: [Payment amount details guide](/docs/payment-amount-details#taxes)* **Refunds** * **Simplified mode for refund retries**\ The `simplified_mode: true` flag is now supported in refund requests. Yuno will return a `DECLINED` status and automatically retry the refund up to five times within 24 hours, keeping the payment in `PENDING`/`RETRY_IN_PROCESS` status. *See also: [Transaction retries guide](/docs/transaction-retries)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "simplified_mode": true, "reason": "REQUESTED_BY_CUSTOMER", "merchant_reference": "AA01" } ``` ## v2024-06 *June 30, 2024* **Payouts** * **Payouts product launch**\ Yuno Payouts is now available as a new API product for sending funds to beneficiaries (users, merchants, providers, customers) across banks, cards, and wallets through multiple providers. Refer to the payouts documentation to get started. *See also: [Payouts guide](/docs/payouts)* **Payments** * **Payment method fingerprint field**\ A new `fingerprint` field is returned in the payment method object and in the payment response for card transactions. It uniquely identifies a card across multiple `vaulted_tokens` within your organization. *See also: [Enroll payment methods guide](/docs/enroll-payment-methods#step-5-retrieve-payment-methods)* ## v2024-05 *May 31, 2024* **Payments** * **Simplified mode for capture retries**\ A new `simplified_mode` boolean is available in capture requests. When set to `true`, Yuno returns a `SUCCEEDED` status immediately and automatically retries failed transactions up to five times within a 24-hour period. *See also: [Transaction retries guide](/docs/transaction-retries)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "amount": { "currency": "COP", "value": "5000" }, "simplified_mode": true, "reason": "PRODUCT_CONFIRMED", "merchant_reference": "AA01" } ``` * **Benefit type field for Pluxee payments**\ A new `benefity_type` field has been added to the payment object for the Pluxee payment method in Chile. Required when using the `DIRECT` workflow. *See also: [Payment object reference](/reference/the-payment-object)* ## v2024-04 *April 30, 2024* * **Routing rules in payment response**\ A new `routing_rules` object is now returned in the payment response, containing a `condition` sub-object with the `id`, `name`, and `description` of the routing rule applied during payment creation. No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "routing_rules": { "condition": { "id": 76152, "name": "PAYMENTS_COLOMBIA", "description": "This condition is set for payments made only in Colombia" } } ``` ## v2024-03 *March 31, 2024* **Payments** * **Merchant customer created at field**\ A new `merchant_customer_created_at` field (ISO 8601 format) is available in the Customer and `customer_payer` objects, representing the date the customer registered on the merchant platform. *See also: [Customer object reference](/reference/the-customer-object)* * **Installments plan in checkout session**\ A new `installments.plan` array and `installments.plan_id` field are available in the checkout session object, allowing you to specify a custom installments plan per session. If omitted, the account-level plan is used. *See also: [Create checkout session reference](/reference/create-checkout-session)* * **Callback URL for payment links**\ A new `callback_url` field is available when creating a payment link, specifying the URL the customer is redirected to after completing payment. *See also: [Payment link object reference](/reference/the-payment-link-object)* ## v2024-02 *February 29, 2024* * **Neighborhood field in address objects**\ A new `neighborhood` field (3–255 characters) has been added to `shipping_address` and `billing_address` in the Customer object. *See also: [Customer object reference](/reference/the-customer-object)* **Payments** * **Transactions history array**\ A new `transactions_history` array is now returned in the payment object, listing all transactions associated with a payment including those across multiple provider routes. *See also: [Payment object reference](/reference/the-payment-object)* * **Tip amount field in order data**\ A new `tip_amount` field is available inside `additional_data.order`. This is informational only — the tip amount is already included in the total transaction value and is not added separately. *See also: [Payment amount details guide](/docs/payment-amount-details)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "additional_data": { "order": { "tip_amount": 50.00 } } ``` * **In-progress capture error message**\ The API now returns a specific error response when a capture is attempted while another capture is already in progress: `INVALID_STATUS` with message "Invalid transaction status. Transaction already in progress". No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "code": "INVALID_STATUS", "messages": [ "Invalid transaction status. Transaction already in progress" ] } ``` ## v2024-01 *January 31, 2024* * **Provider data fields in transaction**\ Three new fields are now returned inside `transactions.provider_data`: `response_code` (provider outcome code), `third_party_account_id` (processor account ID), and `third_party_transaction_id` (processor transaction ID). No integration changes required. *See also: [Payment object reference](/reference/the-payment-object)* **Security** * **Stored credentials support**\ Yuno now supports Visa and Mastercard stored credentials rules, allowing merchants to mark payments as Customer Initiated Transactions (CIT) or Merchant Initiated Transactions (MIT) via the `stored_credentials` struct inside `payment_method.detail.card`. *See also: [Stored credentials guide](/docs/stored-credentials)* # Flutter SDK Changelog Source: https://docs.y.uno/changelog/flutter Latest updates and version history for the Yuno Flutter SDK ## v1.0.17 * **Update Android SDK Version**\ Native Android SDK updated to version 2.17.3. ## v1.0.16 * **Native Android SDK Update**\ Updated the native Android SDK to version 2.17.2. ## v1.0.15 * **Android OTT and Payment Status Delivery**\ Resolved an issue where the Android one-time token and payment status were not delivered to the app when using native Android SDK 2.15.0 or newer. * **Native SDK Updates**\ Updated native Android SDK to version 2.17.1 and iOS SDK to version 2.18.0. ## v1.0.14 * **Android SDK Update**\ Updated the native Android SDK to version 2.15.1. ## v1.0.13 * **Updated Android SDK**\ The native Android SDK has been updated to version 2.15.0. * **Updated iOS SDK**\ The native iOS SDK has been updated to version 2.16.0. ## v1.0.12 * **Android SDK Update**\ Updated the native Android SDK to version 2.13.4. * **Cross-Platform Appearance Configuration**\ Added a shared appearance configuration that lets integrators customize the SDK look and feel across Android and iOS from a single setting. * **Platform-Specific Appearance Overrides**\ Added platform-specific appearance settings that take priority over the shared appearance configuration, letting integrators tailor the look and feel per platform. * **Android Font Name Normalization**\ Android automatically normalizes font names so integrators can reference fonts using their natural name (for example, Dancing Script). ## v1.0.11 * **Native Android SDK Version Update**\ Updated the native Android SDK dependency to the latest version. No API changes required. ## v1.0.10 * **Native Android SDK Version Update**\ Updated the native Android SDK dependency to the latest version. No API changes required. ## v1.0.9 * **Hindi, Bengali, Malayalam, and Urdu Support**\ Added support for Hindi, Bengali, Malayalam, and Urdu languages. No additional configuration is required to enable these languages. * **Updated Android SDK**\ The native Android SDK has been updated to version 2.13.0. * **Updated iOS SDK**\ The native iOS SDK has been updated to version 2.14.1. ## v1.0.8 * **Native SDK Versions Update**\ Updated the native Android and iOS SDK dependencies to their latest versions. No API changes required. ## v1.0.5 * **Transparent Button Colors**\ Fixed an issue where button colors appeared as clear or transparent when not explicitly configured. ## v1.0.4 * **Dependency Updates**\ Updated internal dependencies to resolve compatibility conflicts. No integration changes required. ## v1.0.3 * **Updated Android SDK**\ The native Android SDK has been updated to version 2.10.0. * **Updated iOS SDK**\ The native iOS SDK has been updated to version 2.11.1. ## v1.0.2 * **Updated Android SDK**\ The native Android SDK has been updated to version 2.8.1. * **Updated iOS SDK**\ The native iOS SDK has been updated to version 2.9.0. * **Kotlin 2.x Compatibility**\ Fixed Android compatibility with Kotlin 2.x and the Compose Compiler plugin. ## v1.0.1 * **Android SDK Version Correction**\ Corrected the native Android SDK version to 2.6.5. ## v1.0.0 * **Native SDK Versions Update**\ Updated the native Android and iOS SDK dependencies to their latest versions. # Changelog Overview Source: https://docs.y.uno/changelog/index Stay up to date with the latest changes across all Yuno SDKs and plugins ## Types of changes * : for new features. * : for changes in existing functionality. * : for soon-to-be removed features. * : for now removed features. * : for any bug fixes. * : in case of vulnerabilities. * : for changes that require merchant adaptation. # iOS SDK Changelog Source: https://docs.y.uno/changelog/ios Latest updates and version history for the Yuno iOS SDK ## v2.21.2 *August 4, 2026* * **One-Time Token Creation**\ All fields in the headless `detail` object are now optional. ## v2.21.1 *July 28, 2026* * **Saved-Card Checkout Behavior**\ The saved-card checkout now correctly collapses the expanded area when no additional information is required, such as when no installment plans are available. ## v2.21.0 *July 23, 2026* * **Installment Selection Callback**\ Introduced an optional callback to notify merchants whenever an installment option is selected or changed in the card form. This helps in keeping the cart total in sync with the selected installment options. ## v2.20.0 *July 8, 2026* * **Standard Click to Pay Flow**\ The payment process will now fall back to the standard Click to Pay flow if a checkout session with Passkey enabled lacks a callback URL. * **Card Number Validation**\ Improved card number validation according to specific card schemes. * **Document Number Validation**\ Enhanced validation for document numbers with country-specific rules and clearer error messages. * **Expiry Date Smart Parser**\ Introduced a smart parser for expiry dates that auto-prefixes '0', formats '1X' as '01/X', and caps input at four digits, along with a dedicated error for expired cards. * **Instruction Icon Display**\ Empty or null icons in the instruction view are now respected, aligning iOS behavior with Web and Android when no icon is provided. * **Installment ID in Payment Requests**\ The payment request now includes the selected installment ID, defaulting to the plan ID if the installment ID is empty. * **Saved-Card Checkout Layout**\ Saved-card checkout now shows a compact card summary instead of the large card image, so the CVV field is visible without scrolling. ## v2.19.0 *July 6, 2026* * **Installments Dropdown Display**\ The total amount is now shown for each option in the installments dropdown. ## v2.18.0 *June 12, 2026* * **Headless Resume Card Payment**\ Introduced a new method to resume a server-side created card payment, handle remaining actions such as post-3DS challenge, and deliver results through a closure. ## v2.17.2 *June 10, 2026* * **Bug Fix with Card Forms**\ Resolved a crash issue that occurred with unfolded card forms when using multiple payment methods. ## v2.17.1 *June 2, 2026* * **Render Mode and Apple Pay Form Issues**\ Resolved issues with the render mode loader and the Apple Pay form view to ensure proper functionality. ## v2.17.0 *May 25, 2026* * **Netcetera Native 3DS SDK Support**\ Introduced support for the Netcetera Native 3DS SDK, enabling enhanced security for transactions. * **Slim Form Variant**\ A new form layout is available that consolidates card information and address sections into a more compact format. This is available as an opt-in setting. * **Secure Payment Badge Visibility**\ Added an opt-in setting to hide the "Secure payment with YUNO" badge, providing greater flexibility in UI customization. ## v2.16.0 *May 8, 2026* * **Flexible Actions in Enrollment**\ Enrollment now supports the same dynamic action screens used in payments, including PIN, image, payment code, OTP, and info screens. ## v2.15.0 *April 10, 2026* **Form Experience** * **Optional Delegate viewController**\ `delegate.viewController` is now optional, simplifying integrations that do not need to provide a presenting controller. No changes required if you are already setting it. * **Auto-advance**\ The form now auto-advances to the next field when input is valid, reducing keystrokes during checkout. No configuration required. * **Glass Keyboard Toolbar**\ Added a keyboard toolbar with a glass effect for iOS 26. The toolbar appears automatically on iOS 26 and has no effect on earlier versions. * **Expiration Date Single Source**\ Removed redundant `@Published` `expirationMonth` and `expirationYear` properties. Expiration date now has a single canonical source, eliminating potential state inconsistencies. **Address & Contact Collection** * **Apple Pay Contact Fields**\ The Apple Pay sheet now requests billing/shipping address, name, email, and phone based on the merchant's required fields configuration. Driven by Dashboard settings — no code changes required. * **Shipping Address Support**\ Card and APM forms now support shipping address entry, including a billing/shipping toggle and field validation. **Enrollment & Validation Fixes** * **CVV Length for Enrolled Cards**\ Fixed the CVV field character limit for enrolled cards: the field now enforces the correct length from `securityCodeLength` in the enrollment data. Previously the default 3-digit limit was always applied. * **Validate IIN Session Header**\ The validate IIN endpoint now sends `customer_session` instead of `checkout_session` during enrollment. This fixes a validation error that occurred when the session type was mismatched. ## v2.14.2 *March 25, 2026* * **Render Flow Form Hang**\ Fixed an issue where the render flow could hang on the form view when the form was disabled. ## v2.14.1 *March 10, 2026* * **Card Expiration Year Mismatch**\ Fixed an inconsistency in the card form expiration year value. ## v2.14.0 *February 25, 2026* * **Apple Pay Flow Order**\ Apple Pay is now triggered before the OTT step for a faster checkout experience. * **Free Trial Support**\ Added support for free trial transactions. * **Loader Dismiss Behavior**\ Fixed the loader dismissal so that it properly closes the last presented view controller, preventing stuck screens after loading finishes. * **Hindi, Bengali, Malayalam and Urdu Localization**\ Added Hindi, Bengali, Malayalam and Urdu language support, including Right-to-Left layout for Urdu. * **Country Data Endpoint Migration**\ Migrated country data lookups to the checkout country-data endpoint with session headers. No integration changes required. ## v2.13.0 *January 30, 2026* * **Dynamic CVV Max Length**\ The CVV field now enforces a dynamic maximum length based on the `securityCodeLength` value returned by the API. Previously the field always used a fixed 3-digit limit. * **Card IIN Endpoint Migration**\ Migrated card IIN lookups to the `card-info` endpoint with checkout session headers. Dynamic co-badged card brand selection is now supported. No integration changes required. * **Platform Identification API**\ Added a public `setPlatform` method and sub-platform header to all requests. Use `setPlatform` when integrating the SDK inside a wrapper framework. * **Punto Pago Warning Banner**\ Added a warning banner for the Punto Pago kiosk disclaimer. Activated automatically for eligible payment methods — no integration changes required. * **Cardholder Name Max Length**\ Increased the cardholder name field maximum length from 50 to 255 characters. No integration changes required. * **Alphanumeric CNPJ Validation**\ The CNPJ field now accepts alphanumeric input to support the updated Brazilian tax ID format. No integration changes required. * **API Key Region Support**\ Added region parsing from the API key. The SDK now routes requests to the correct regional endpoint automatically. * **OKTO PIX Payment**\ Fixed PIX payments through OKTO so that the payment method is correctly sent in the issuers request and bank-transfer form validation accepts the right field combinations. ## v2.12.3 *January 20, 2026* * **Cardholder Name Now Optional**\ The cardholder name field is now optional in card forms. Forms no longer block submission when this field is empty. ## v2.12.2 *January 8, 2026* * **Data Race in Payment Methods List**\ Resolved a data race condition in the payment methods list loading function. This fix eliminates intermittent crashes on devices running concurrent background tasks. ## v2.12.1 *December 20, 2025* * **Apple Pay in Render Mode**\ Fixed an Apple Pay initialization issue that prevented the payment sheet from appearing in render mode. Apple Pay now initializes correctly in all integration modes. ## v2.12.0 *December 5, 2025* * **cardFormType Removed from Initialization**\ Removed `cardFormType` from SDK initialization. Card form type must now be configured in the Dashboard Checkout Builder. Update your integration before upgrading.\ [Migration guide →](/changelog/migration-guides/ios/v2-11-to-v2-12) * **3DS in Enrollment**\ Added 3D Secure authentication support during card enrollment flows. * **3DS Fallback Behavior**\ Added fallback handling for 3DS authentication when the primary path is unavailable. * **Luhn Card Number Verification**\ Card numbers are now validated with the Luhn algorithm before submission, surfacing invalid numbers earlier in the form. * **Co-Badged Card Choice UI**\ Added a card-brand selector when the entered card supports more than one network, letting customers choose which network to use. * **Installments Financial Cost Table**\ Added a financial cost table to the installments view so customers can see total cost details per plan. * **Substatus from WebSocket**\ Payment notifications delivered via WebSocket now include the substatus value, enabling finer-grained status handling in the host app. * **Headless Enrollment Raw Status**\ Headless enrollment now returns the raw backend status instead of a mapped enum value, giving integrators direct access to provider-specific states. * **Card Form Placeholder Font**\ Fixed an issue where card form placeholders did not pick up the custom font configured through Appearance. ## v2.11.3 *December 1, 2025* * **RTL Driven By SDK Language**\ Right-to-Left layout is now applied based on the SDK language setting instead of the device language, giving merchants direct control over checkout direction. ## v2.11.1 *November 20, 2025* * **Bug Fixes and Stability**\ Various bug fixes and stability improvements. No API changes required. ## v2.11.0 *November 5, 2025* * **Podspec Configuration Updates**\ Updated podspec configuration for improved CocoaPods compatibility. No API changes required. * **Bug Fixes and Stability**\ Various bug fixes and stability improvements. No API changes required. * **RTL Layout and Arabic Language**\ Added Right-to-Left layout support and Arabic localization for checkout screens. * **Brand Field in Headless**\ The brand field is now mapped and surfaced through the headless integration. ## v2.10.1 *October 20, 2025* * **Updated Package Checksum**\ Updated the Swift Package Manager checksum. Re-resolve your package dependencies after upgrading. ## v2.10.0 *October 5, 2025* * **Bug Fixes and Stability**\ Various bug fixes and stability improvements. No API changes required. * **Architecture Improvements**\ Internal architecture refactoring for improved maintainability. No API changes required. * **Payment and Enrollment in a Single Flow**\ Added support for combining payment and enrollment in the same checkout flow. * **CEP Address Auto-Fill**\ Added support for calling CEP services to auto-fill Brazilian address fields from a postal code. * **Notification URL in Apple Pay Token**\ The Apple Pay payment token payload now includes the notification URL. ## v2.9.0 *September 10, 2025* * **Cards Expiring This Month Allowed**\ Cards expiring in the current month and year are now accepted at checkout. Previously these cards were incorrectly rejected as expired. * **Click to Pay Passkey Support**\ Added Click to Pay passkey authentication support. Activated automatically for eligible transactions — no integration changes required. * **PayPal Installments**\ Added support for PayPal installments payment flow. Activated automatically when PayPal installments is configured for your account. * **Dark Mode Support**\ The SDK UI now adapts to the system dark mode setting. No configuration required; the SDK follows the device appearance automatically. * **Dark Mode in Dropdowns**\ Fixed dropdown components so they render correctly in dark mode. * **Processing Status on Close**\ The SDK now reports a processing status when the customer closes an action screen mid-flow. * **CEP Neighborhood Handling**\ Fixed CEP address auto-fill so the neighborhood field is populated correctly. ## v2.8.1 *August 20, 2025* * **Hide Debit Cards When Credit Only**\ Debit cards are now hidden from the payment methods list when the merchant has enabled credit-only mode. No integration changes required. * **Click to Pay Passkey for Render Mode**\ Click to Pay passkey authentication is now supported in render mode. No integration changes required. ## v2.8.0 *August 5, 2025* * **ACH Field Enrollment**\ Added ACH bank account fields to the enrollment form. No integration changes required; the fields appear automatically when ACH enrollment is configured. * **Settings Migration v1 to v2**\ SDK settings have been migrated from the v1 schema to v2. Existing settings are migrated automatically on first launch after upgrading. * **Secondary Background Color in Flexible Actions**\ Flexible actions now support a secondary background color for improved UI customization. Configure via the `YunoConfig.styles` object. * **Full Payment List Styling**\ Added styling support to the full payment list view. Configure appearance via the `YunoConfig.styles` object. * **Traditional Chinese Date Format**\ Added Traditional Chinese (zh-TW) date format for the MM/YY expiration field. * **Payment Full Notifications**\ Fixed an incorrect notification surfaced in the payment-full flow. * **Duplicate Events in Payment Full**\ Fixed duplicate events emitted when the payment-full list was used in its unfolded state. * **Duplicate Merchant Notifications**\ Fixed a duplicate notification sent to the merchant when an action view finished with an expire or cancel result. ## v2.7.1 *July 20, 2025* * **Click to Pay with Passkey**\ Added Click to Pay authentication with passkey support. Activated automatically for eligible transactions — no integration changes required. * **Pending Status Enrollment Notification**\ The SDK now notifies the host app of pending status during enrollment when redirecting to a deeplink. Listen for the `pending` status in your enrollment callback. * **NuPay Copy**\ Fixed an incorrect copy string in the NuPay payment method UI. ## v2.7.0 *July 5, 2025* * **ClearSale Web Integration**\ Integrated ClearSale fraud prevention via web integration. Activated automatically when ClearSale is configured for your account — no integration changes required. ## v2.6.0 *June 20, 2025* * **Navigation Toolbar for Keyboard**\ Added a navigation toolbar that appears above the keyboard in payment and enrollment forms. The toolbar provides previous/next field navigation and a dismiss button. ## v2.5.0 *June 5, 2025* * **Recurring Apple Pay Support**\ Added support for recurring Apple Pay subscriptions. The SDK handles the recurring payment sheet automatically when the checkout is configured for subscriptions. * **Simplified Chinese and Traditional Chinese**\ Added Simplified Chinese (zh-CN) and Traditional Chinese (zh-TW) language support. Activated automatically based on the device language setting. * **iPad Screen Support**\ The payment forms now adapt to iPad screen sizes with an optimized layout. No integration changes required. * **OCR Card Scanning**\ Added OCR card scanning to automatically populate card number, expiry, and cardholder name fields from the device camera. The button appears automatically in the card form when the device supports it. * **ELO Card Icon**\ Added the ELO brand icon to card form and payment list. Displayed automatically when an ELO card is detected. * **Coinflow Chargeback Protection**\ Integrated Coinflow chargeback protection. Activated automatically for eligible transactions — no integration changes required. ## v2.4.2 *May 28, 2025* * **Call Settings in Enrollment**\ The SDK now calls the settings service during enrollment initialization. No integration changes required. * **Credit-Only Enrollment Mode**\ Added support for restricting enrollment to credit cards only. Configure via your Dashboard payment method settings. ## v2.4.0 *May 20, 2025* * **Deprecated startCheckout Method**\ Removed the deprecated `startCheckout(with: self)` method. Use the async `startCheckout` API instead. See the migration guide for details. * **getPaymentMethodView Async Replacement**\ Replaced `getPaymentMethodView` with an async version that returns the view via a completion handler. Update call sites to use the new async signature. * **startPaymentRender Replacement**\ Replaced `startPaymentRender` with a new render flow method. Update call sites to use the new method name. * **startPaymentLite Replacement**\ Replaced `startPaymentLite` with an updated version. Update call sites to use the new method name. * **Missing Apple Pay Values**\ Added missing values in the `/payment/complete` service call for Apple Pay. This resolves payment failures that occurred for some Apple Pay transactions. * **Nuvei 3DS Support**\ Integrated Nuvei 3DS challenge handling. Activated automatically for eligible Nuvei transactions — no integration changes required. * **Styling Object Update**\ Updated the `YunoConfig.styles` object structure. Review the styling documentation if you customize SDK appearance. * **Banner View Payment Action**\ Added banner view support within the payment action view for flexible actions. No integration changes required. ## v2.3.0 *May 18, 2025* * **Text Component Identifier Separation**\ Separated view block identifiers into specific text components for improved customization. Review custom text configurations if your integration overrides identifier labels. * **NuPay Banner Text Weight**\ NuPay banner messages are now displayed in bold for improved readability. No integration changes required. * **CVV and Expiry Field Proportions**\ Adjusted the width proportions of the CVV and expiration date fields in the card form for a more balanced layout. No integration changes required. * **External Browser Redirect**\ Redirects now open in the external browser when the backend flag is set, instead of always using an in-app web view. No integration changes required. ## v2.2.2 *May 16, 2025* * **Luhn Validation**\ Added Luhn algorithm validation to the card number field. Cards with invalid Luhn checksums are now rejected before submission, reducing server-side errors. ## v2.2.1 *May 17, 2025* * **Bug Fixes and Stability**\ Various bug fixes and stability improvements. No API changes required. ## v2.2.0 *May 16, 2025* * **PayPal Enrollment**\ Added PayPal enrollment support. Users can now save their PayPal account during the enrollment flow. ## v2.1.0 *May 15, 2025* * **Color Codable Initializers Hidden**\ Color `Codable` initializers are no longer part of the public API. If you were using these initializers directly, switch to the documented color configuration methods. * **Sodexo Expiration Date Validation**\ Added expiration date validation specific to Sodexo brand cards. No integration changes required. * **Redirect Payment Action Support**\ Added support for the redirect payment action type, enabling redirect-based APMs to operate through the flexible actions flow. ## v2.0.0 *May 15, 2025* * **NuPay Installments**\ Added support for NuPay installments payment flow. * **Flexible Actions Migration**\ Migrated legacy Alternative Payment Methods (APMs) to the flexible actions architecture. Merchants using APMs should verify their payment flows after upgrading. * **Mercado Pago 3DS**\ Integrated Mercado Pago 3DS for enhanced fraud protection. Activated automatically for eligible transactions — no integration changes required. * **Socket Connection Support**\ Added WebSocket connection support based on a backend feature flag. No integration changes required. * **Airwallex Anti-fraud Integration**\ Integrated Airwallex anti-fraud detection. Activated automatically for eligible transactions — no integration changes required. * **3DS Unlimit Support**\ Added 3DS challenge support for Unlimit payment method. Activated automatically — no integration changes required. ## v1.25.0 *April 1, 2025* * **Astropay Enrollment Support**\ Added support for Astropay card enrollment. Users can now save their Astropay account during the enrollment flow. * **Redirect-Type Enrollment**\ Added support for redirect-type enrollment flows. The SDK now handles the redirect and returns the enrollment result to the host app. ## v1.24.2 *March 20, 2025* * **Loader Recursive Presentation**\ Enhanced loader display with recursive view controller presentation for more reliable loading indicators in complex navigation stacks. ## v1.24.1 *March 15, 2025* * **Full Payment View Size Notification**\ Added a notification for the full payment view size. Use this to adjust your container layout when the SDK view changes height. ## v1.24.0 *March 5, 2025* * **Mercado Pago Checkout Pro Browser**\ Mercado Pago Checkout Pro now opens in an in-app browser instead of a web view. No integration changes required. * **Preselected Payment Methods**\ Added support for preselecting a payment method programmatically. Pass the payment method token when starting checkout to skip the payment list. * **Full Payment List Migrated to SwiftUI**\ The full payment list UI has been migrated to SwiftUI for improved performance and customization. No API changes required. * **Flexible Actions Styling and QR Button**\ Added styling support and a QR button to flexible actions. Configure via `YunoConfig.styles`. * **3DS Loading URL Support**\ Added support for loading external URLs during 3DS challenges. No integration changes required. ## v1.23.2 *February 20, 2025* * **cancelByUser Notification for Enrollment**\ The SDK now sends a `cancelByUser` notification when the user closes enrollment forms. Handle this event in your enrollment callback to update your UI accordingly. ## v1.23.1 *February 15, 2025* * **cancelByUser Notification for Apple Pay**\ The SDK now sends a `cancelByUser` notification when the user closes the Apple Pay modal. Handle this event in your payment callback to update your UI accordingly. ## v1.23.0 *February 5, 2025* * **Generic Enrollment Forms and WebSocket**\ Added support for generic enrollment forms and WebSocket connectivity. Tested with Bancolombia button integration. ## v1.22.1 *January 20, 2025* * **Embedded Web View Publisher**\ Fixed an issue where embedded web views did not return `anyPublisher` directly. No integration changes required. ## v1.22.0 *January 5, 2025* * **Nationality Removed from Required Fields**\ Nationality has been removed from the required fields list. Forms no longer request this field during enrollment. * **OTP View in Flexible Actions**\ Added an OTP (one-time password) input view within the flexible actions flow. Activated automatically for payment methods requiring OTP verification. * **x-sdk-type Request Header**\ Added `x-sdk-type` to all outbound request headers for improved platform telemetry. No integration changes required. * **Enrolled Card Support in Dynamic SDK**\ Added enrolled card handling to the dynamic SDK. Enrolled cards can now be used in dynamic payment flows. * **Authorized Substatus Notification**\ Added notification for the authorized payment substatus. Handle this event to take action when a payment is authorized but not yet captured. ## v1.21.2 *December 20, 2024* * **Enrollment Cancellables Memory Leak**\ Added `anyCancellables` to `YunoEnrollmentHeadlessImpl` to prevent memory leaks in long-running enrollment sessions. ## v1.21.1 *December 15, 2024* * **Koin Dependency Removed**\ Removed the Koin dependency from the SDK package. This reduces binary size and eliminates potential conflicts with apps that include Koin independently. ## v1.21.0 *December 5, 2024* * **Xendit Indoramart Payment Method**\ Added support for Xendit - Indoramart payment method. Activated automatically when configured for your account. * **MetricKit Performance Monitoring**\ Integrated MetricKit and `URLSessionTaskMetrics` for performance monitoring and diagnostics. Metrics are collected automatically — no integration changes required. * **Combined Payment and Enrollment Flow**\ Added support for a combined payment and enrollment flow. Users can enroll a payment method and complete a payment in a single session. * **Dynamic Actions Image Support**\ Added IMAGE action type support to the dynamic actions framework. No integration changes required. ## v1.20.0 *November 20, 2024* * **Koin SDK Integration**\ Integrated the Koin SDK package for Koin PIX Parcelado support. Add the Koin dependency to your project if you plan to use Koin payment methods. * **Koin PIX Parcelado**\ Added Koin PIX Parcelado installment payment support including socket-based status updates, OTP handling, and in-review status display. * **Click to Pay Token Storage**\ Added saving and sending of Click to Pay (C2P) tokens in user defaults. C2P is activated via a feature flag — no integration changes required. * **Delayed Provider Response Screen**\ Added a delayed provider response screen for payment methods that take additional time to confirm. No integration changes required. ## v1.19.3 *November 5, 2024* * **NuPay Redirect Payment**\ Added NuPay redirect payment flow support. The SDK now handles the redirect and returns the payment result to the host app. ## v1.19.2 *October 28, 2024* * **Socket on Authorized Substatus**\ The SDK now opens a socket connection when the payment substatus is `authorized`, enabling real-time status updates for authorized-but-pending payments. ## v1.19.1 *October 20, 2024* * **Document Required Field in Enrollment**\ Added document number as a required field in enrollment forms when specified by the payment method configuration. No integration changes required. ## v1.19.0 *October 5, 2024* * **Inswitch Cash Payment**\ Added support for Inswitch cash payment method. Activated automatically when configured for your account. * **Inswitch Bank Transfer**\ Added support for Inswitch bank transfer payment method. Activated automatically when configured for your account. * **Xendit QRIS Payment Method**\ Added support for Xendit QRIS payment method. Activated automatically when configured for your account. ## v1.18.0 *September 10, 2024* * **SDK Seamless Integration**\ Added SDK seamless integration mode for a frictionless checkout experience. Contact your Yuno technical account manager to enable this feature. * **RUT Validation and Masks**\ Added Chilean RUT validation and input mask to document fields. Activated automatically for CLP transactions. * **Dynamic SDK Cleanup**\ Removed `OptionalStateValue` and `YunoDynamicConnection` class from the dynamic SDK. Internal refactoring — no API changes required. ## v1.17.0 *August 15, 2024* * **Copy Voucher in Enrollment Flow**\ Added a copy button for voucher codes in the enrollment flow. Users can now copy the voucher code directly from the enrollment screen. * **Dynamic SDK Conditional Dependencies**\ Added dependencies for dynamic SDK condition evaluation. No integration changes required. * **Dynamic SDK Text Field Restrictions**\ Restricted allowed characters in dynamic SDK text fields for CARD and APM types to improve input validation. No integration changes required. ## v1.16.0 *July 20, 2024* * **FAC 3DS Action**\ Added FAC 3DS action support. Activated automatically for eligible FAC transactions — no integration changes required. * **Enrolled Card Form in Dynamic SDK**\ Added enrolled card form support to the dynamic SDK. Enrolled cards can now be managed through dynamic SDK flows. * **Step-by-Step Card Form in Dynamic SDK**\ Implemented step-by-step card form in the dynamic SDK. The multi-step card entry flow is now available in dynamic integrations. * **Backend-Driven Icons and View Names**\ Icons and view names in the dynamic SDK are now fetched from the backend. No integration changes required. ## v1.15.0 *June 20, 2024* * **Step-by-Step Dynamic SDK**\ Implemented step-by-step card form functionality in the dynamic SDK. The multi-step flow guides users through card entry one field at a time. * **RUT Validation**\ Added Chilean RUT document validation. Validation is applied automatically to RUT fields in payment and enrollment forms. * **Dynamic SDK Analytics**\ Added analytics event tracking for dynamic SDK flows. Events are sent automatically — no integration changes required. * **Accessibility Identifiers for Automation**\ Added accessibility identifiers to the sample app for UI automation testing. No production integration changes required. ## v1.9.0 *April 10, 2024* * **Loader and Service Timeout**\ Added loader display during service calls and configurable service timeout. No integration changes required. * **Analytics Event Flow**\ Improved the analytics event flow for more accurate and complete event reporting. No integration changes required. ## v1.6.2 *February 15, 2024* * **Background Payment Status Query**\ Added automatic payment status query when the app returns from background. This ensures the SDK has the latest payment state after the user completes a redirect flow. ## v1.1.19 *January 10, 2024* * **Mercado Pago Checkout Pro Caching**\ Resolved a caching issue in Mercado Pago Checkout Pro that caused stale payment sessions to be reused. The SDK now always fetches a fresh session. * **Daviplata Document Type Filtering**\ Implemented document type filtering in the Daviplata enrollment form. Only supported document types are shown, reducing user errors. ## v1.1.18 *December 20, 2023* * **Loader Persistence Support**\ Added support for persisting the loader between navigation steps. No integration changes required. ## v1.1.17 *December 5, 2023* * **Terms and Conditions Opening Bug**\ Fixed a bug that prevented the terms and conditions link from opening correctly. The link now opens in the in-app browser as expected. * **CheckboxColor in Yuno Appearance**\ Added a `checkboxColor` field to the `Yuno.Appearance` object. Use this to customize the checkbox color in forms. * **Payment Method Form Improvements**\ Improved the payment method form layout and usability. No API changes required. ## v1.1.16 *November 20, 2023* * **Card Form Improvements**\ Multiple improvements to the card form UI and validation. No API changes required. ## v1.1.15 *November 5, 2023* * **Required Fields in Card Form**\ Added required field enforcement to the card form. Fields marked as required by the payment method configuration now block form submission when empty. ## v1.1.14 *October 20, 2023* * **Openpay Payment Method**\ Added support for Openpay payment method. Activated automatically when configured for your account. * **One-Step Card Form Customization**\ Added customization options for the one-step card form. Configure appearance via the `Yuno.Appearance` object. ## v1.1.13 *October 5, 2023* * **New Payment Method Types**\ Added support for additional payment method types. New methods are activated automatically when configured for your account. ## v1.1.12 *September 20, 2023* * **PagSeguro Checkout Support**\ Added support for PagSeguro checkout payment method. Activated automatically when configured for your account. * **UNLIMINT Checkout Support**\ Added support for UNLIMINT checkout payment method. Activated automatically when configured for your account. ## v1.1.11 *September 5, 2023* * **Multistep Card Form Improvements**\ Multiple improvements to the multistep card form flow and validation. No API changes required. ## v1.1.9 *August 10, 2023* * **Yuno Appearance Initialization Bug**\ Fixed a bug where `Yuno.Appearance` object initialization could fail under certain configurations. The object now initializes correctly in all cases. * **Dlocal Redirect Payment Method**\ Added support for Dlocal redirect payment method. Activated automatically when configured for your account. * **Khipu Payment Method**\ Added support for Khipu payment method. Activated automatically when configured for your account. * **Dlocal PSE Payment Method**\ Added support for Dlocal PSE payment method. Activated automatically when configured for your account. * **Multiple Step Card Form Improvements**\ Multiple improvements to the multiple-step card form validation and navigation. No API changes required. ## v1.1.8 *July 20, 2023* * **Multiple Step Card Form Improvements**\ Multiple improvements to the multiple-step card entry flow. No API changes required. ## v1.1.7 *July 5, 2023* * **Tarjeta Clave Payment Method**\ Added support for Tarjeta Clave payment method. Activated automatically when configured for your account. * **Kushki Payment Method**\ Added support for Kushki payment method. Activated automatically when configured for your account. * **Daviplata UX Improvements**\ Improved the Daviplata payment form user experience. No API changes required. * **Diners Card Form Improvements**\ Improved the Diners card entry experience in the card form. No API changes required. ## v1.1.3 *May 15, 2023* * **Multi-Step Card Form Option**\ Added multi-step card form as an alternative to the single-step form. Configure via `cardFormType` in SDK initialization. ## v1.1.0 *April 10, 2023* * **Swift Package Manager Support**\ Added Swift Package Manager distribution. You can now integrate the SDK using either Swift Package Manager or CocoaPods. ## v1.0.17 *March 20, 2023* * **Card Form General Improvements**\ General improvements to the card form including layout, validation, and accessibility. No API changes required. ## v1.0.16 *March 5, 2023* * **Card Form Wording Improvements**\ Updated card form field labels and error messages for clarity. No API changes required. ## v1.0.9 *February 1, 2023* * **PIX and NuPay Async Payments**\ Added async payment support for PIX and NuPay. The SDK now polls for status and notifies the host app when the payment completes. * **Card Enrollment Support**\ Added card enrollment to allow users to save cards for future payments. * **Wibond Payment Method**\ Added support for Wibond payment method. Activated automatically when configured for your account. * **MercadoPago Wallet Support**\ Added support for MercadoPago Wallet payment method. Activated automatically when configured for your account. # Android SDK: From v1.1 to v1.2 (Legacy) Source: https://docs.y.uno/changelog/migration-guides/android/v1-1-to-v1-2 Historical migration guide for Android SDK v1.1 to v1.2 # Migrating from v1.1 to v1.2 This guide covers a historical version change. For the current cardFlow migration, see [Migrating to Android SDK v2.11](/changelog/migration-guides/android/v2-10-to-v2-11). The `cardFlow` configuration has been moved to the Dashboard. ### 1. Remove Code Configuration Remove the following line from your `YunoConfig`: ```kotlin theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} cardFlow = CardFormType.ONE_STEP ``` ### 2. Update Dashboard Configure your desired card flow in the **Checkout Builder** on the Yuno Dashboard. # Android SDK: Migrating to v2.11 Source: https://docs.y.uno/changelog/migration-guides/android/v2-10-to-v2-11 How to upgrade from Android SDK v2.10.x to v2.11.0 # Migrating to Android SDK v2.11 Version 2.11.0 removes the `cardFlow` parameter from `YunoConfig`. Card flow configuration moves to the Yuno Dashboard. ## What changed The `cardFlow` parameter on `YunoConfig` has been removed. Passing it will cause a **compile error** after upgrading. ## Steps ### 1. Remove `cardFlow` from YunoConfig **Before:** ```kotlin theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} val config = YunoConfig( apiKey = "your_api_key", cardFlow = CardFormType.ONE_STEP ) ``` **After:** ```kotlin theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} val config = YunoConfig( apiKey = "your_api_key" ) ``` ### 2. Configure card flow in the Dashboard Open **Dashboard → Checkout → Builder** and select your card flow: * **One Step** — all card fields on a single screen * **Multi Step** — card fields across multiple screens The Dashboard setting applies to all SDK instances for your account. # iOS SDK: From v1.1 to v1.2 (Legacy) Source: https://docs.y.uno/changelog/migration-guides/ios/v1-1-to-v1-2 Historical migration guide for iOS SDK v1.1 to v1.2 # Migrating from v1.1 to v1.2 This guide covers a historical version change. For the current cardFormType migration, see [Migrating to iOS SDK v2.12](/changelog/migration-guides/ios/v2-11-to-v2-12). The `cardFormType` configuration is now managed via the Dashboard. ### 1. Update Initialization Remove `cardFormType` from your `Yuno.initialize()` call. ### 2. Dashboard Sync Ensure your Checkout Builder settings match your desired UI flow. # iOS SDK: Migrating to v2.12 Source: https://docs.y.uno/changelog/migration-guides/ios/v2-11-to-v2-12 How to upgrade from iOS SDK v2.11.x to v2.12.0 # Migrating to iOS SDK v2.12 Version 2.12.0 removes the `cardFormType` parameter from `Yuno.initialize()`. Card form type configuration moves to the Yuno Dashboard. ## What changed The `cardFormType` parameter on `Yuno.initialize()` has been removed. Passing it will cause a **compile error** after upgrading. ## Steps ### 1. Remove `cardFormType` from Yuno.initialize() **Before:** ```swift theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} Yuno.initialize(apiKey: "your_api_key", cardFormType: .oneStep) ``` **After:** ```swift theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} Yuno.initialize(apiKey: "your_api_key") // Configure in Dashboard → Checkout → Builder ``` ### 2. Configure card form type in the Dashboard Open **Dashboard → Checkout → Builder** and select your card form type: * **One Step** — all card fields on a single screen * **Multi Step** — card fields across multiple screens The Dashboard setting applies to all SDK instances for your account. # Web SDK: Migrating to v1.1 Source: https://docs.y.uno/changelog/migration-guides/web/v1-0-to-v1-1 How to upgrade from Web SDK v1.0 to v1.1.0 # Migrating to Web SDK v1.1 Version 1.1.0 makes `initialize()`, `mountCheckout()`, and `startCheckout()` asynchronous and introduces `continuePayment()` as a required step for dynamic payment flows (3DS, PayPal redirects, and similar). ## What changed * `Yuno.initialize()`, `yuno.mountCheckout()`, and `yuno.startCheckout()` now return Promises and must be awaited. * `continuePayment()` is now required when `sdk_action_required: true` is returned from the payment API. * Separate 3DS setup service calls are no longer needed — 3DS setup is now integrated into payment creation. ## Steps ### 1. Update the script tag ```html theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} ``` ### 2. Await all SDK method calls **Before:** ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = Yuno.initialize(publicApiKey, config) yuno.mountCheckout({ checkoutSession, elementSelector: '#root', countryCode: 'US' }) yuno.startCheckout({ checkoutSession, countryCode: 'US' }) ``` **After:** ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await Yuno.initialize(publicApiKey, config) await yuno.mountCheckout({ checkoutSession, elementSelector: '#root', countryCode: 'US' }) await yuno.startCheckout({ checkoutSession, countryCode: 'US' }) ``` ### 3. Implement `continuePayment` for dynamic flows After creating a payment via your backend, check whether the SDK needs to continue the flow (e.g. 3DS challenge, PayPal redirect): ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // After payment creation if (paymentResponse.sdk_action_required) { const result = await yuno.continuePayment({ checkoutSession, showPaymentStatus: true, yunoPaymentResult, yunoError, countryCode: 'US', }) // result may contain a redirect object; handle appropriately } ``` If `sdk_action_required` is not `true`, no call to `continuePayment` is needed. ### 4. Remove separate 3DS setup calls If your v1.0 integration called a separate 3DS setup service before payment creation, remove that call. In v1.1, 3DS data collection is handled automatically during payment creation. ## Checklist * [ ] Updated script tag to v1.1 * [ ] Added `await` to `Yuno.initialize()`, `yuno.mountCheckout()`, and `yuno.startCheckout()` * [ ] Implemented `continuePayment()` handling for dynamic flows * [ ] Confirmed `yunoPaymentResult()` callback is properly configured * [ ] Removed any standalone 3DS setup service calls # Web SDK: Migrating to v1.2 Source: https://docs.y.uno/changelog/migration-guides/web/v1-1-to-v1-2 How to upgrade from Web SDK v1.1 to v1.2.0 # Migrating to Web SDK v1.2 Version 1.2.0 is a **non-breaking** release. No changes are required for existing v1.1 integrations. ## What changed ### Optional `options` parameter in `Yuno.initialize()` `Yuno.initialize()` now accepts an optional `options` configuration object as a second argument. Existing calls without this argument continue to work without modification. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // v1.1 — still valid in v1.2 const yuno = await Yuno.initialize(publicApiKey) // v1.2 — optional options parameter const yuno = await Yuno.initialize(publicApiKey, { // additional options here }) ``` ### Extended `continuePayment` parameters `continuePayment()` now accepts additional optional parameters: `checkoutSession`, `showPaymentStatus`, `yunoPaymentResult`, `yunoError`, `countryCode`, and `language`. All parameters are optional — existing calls with fewer arguments continue to work. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // v1.1 usage — still valid in v1.2 await yuno.continuePayment() // v1.2 — additional optional params available await yuno.continuePayment({ checkoutSession, showPaymentStatus: true, yunoPaymentResult, yunoError, countryCode: 'US', language: 'en', }) ``` ## Steps ### 1. Update the script tag ```html theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} ``` ### 2. (Optional) Adopt new parameters No code changes are required. If you want to take advantage of the new optional parameters, update your `initialize()` and `continuePayment()` calls as shown above. ## Checklist * [ ] Updated script tag to v1.2 * [ ] (Optional) Added `options` parameter to `Yuno.initialize()` if needed * [ ] (Optional) Extended `continuePayment()` with additional params if needed # Web SDK: Migrating to v1.5 Source: https://docs.y.uno/changelog/migration-guides/web/v1-4-to-v1-5 How to upgrade from Web SDK v1.4 to v1.5.0 # Migrating to Web SDK v1.5 Version 1.5.0 changes how Google Pay and Apple Pay are rendered in the **Lite SDK**. Full SDK integrations are not affected. ## What changed In v1.5.0, Lite SDK users must explicitly call `mountExternalButtons()` to render Google Pay and Apple Pay buttons. These payment methods no longer render automatically as radio buttons within the payment method list. Full SDK integrations have **no breaking changes** — Google Pay and Apple Pay will automatically display as direct buttons instead of radio buttons, requiring no code changes. ## Who is affected * **Lite SDK users**: action required (see steps below) * **Full SDK users**: no action required ## Steps (Lite SDK only) ### 1. Update the script tag ```html theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} ``` ### 2. Add HTML elements for wallet buttons Add container elements in your HTML where you want the buttons to appear: ```html theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}}
``` ### 3. Call `mountExternalButtons()` after `startCheckout` **Before:** ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // Lite SDK — wallet buttons rendered automatically await yuno.startCheckout({ checkoutSession, countryCode, elementSelector: '#root' }) ``` **After:** ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // Explicitly mount wallet buttons after startCheckout await yuno.startCheckout({ checkoutSession, countryCode, elementSelector: '#root' }) await yuno.mountExternalButtons([ { paymentMethodType: 'APPLE_PAY', elementSelector: '#apple-pay', }, { paymentMethodType: 'GOOGLE_PAY', elementSelector: '#google-pay', }, ]) ``` ### 4. (Optional) Unmount buttons when needed To unmount a single button: ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} yuno.unmountExternalButton('APPLE_PAY') ``` To unmount all external buttons at once: ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} yuno.unmountAllExternalButtons() ``` # VTEX Plugin Changelog Source: https://docs.y.uno/changelog/plugins/vtex Latest updates and version history for the Yuno VTEX Plugin ## v4.2.335 *July 29, 2026* **Payments** * **Samsung Pay support**\ Shoppers can now pay with Samsung Pay at checkout, alongside the existing digital wallets. The connector routes Samsung Pay authorizations to the wallet flow so the payment app can render the Samsung Pay button and complete the payment through Yuno. ## v4.2.333 *July 27, 2026* **Payments** * **Per-storefront seller website in payment metadata**\ Payments now report the storefront the order actually came from instead of the store's default host, improving reporting and reconciliation for merchants running multiple storefronts on one account. A new "Sales Channel Domains" affiliation setting optionally maps each sales channel to its public domain (for example `2:b2b.example.com;18:members.example.com`); unmapped channels fall back to the order's storefront host, and stores without the setting keep working with no configuration changes. * **VTEX order sequence as processor transaction reference**\ A new affiliation setting, Send Order Sequence as Merchant Reference, makes payments carry the VTEX order sequence as the merchant reference, so payment providers configured with a custom transaction identification (such as Mercado Pago) receive the sequence as the external reference shown in their panel, matching pre-migration VTEX behavior. The setting is off by default; when it is disabled or the sequence is unavailable the reference falls back to the VTEX Order ID, and connections without the custom identification option are unaffected. ## v4.2.331 *July 22, 2026* **Order Modifications** * **Additional charges for modified orders**\ When an order's total increases after checkout — VTEX order modifications, such as items sold by weight — the connector now charges the difference automatically using the card saved on the original order, with the shopper absent and no security code. Enable it per affiliation with the new "Vault Card for Order Modification" setting (requires "Create Customer" to also be enabled); orders and affiliations without it are unaffected. ## v4.2.324 *July 14, 2026* **Subscriptions** * **Recurring subscription charges are now linked to the original authorization**\ The connector securely stores a card reference after the first successful subscription charge and reuses it on every recurring charge, so the network transaction id of the original authorization reaches the issuer and merchant-initiated charges are approved at a significantly higher rate. ## v4.2.323 *July 14, 2026* **Payments** * **Subscription cards are now saved for recurring charges**\ On the first charge of a VTEX subscription order, the connector now requests secure storage of the card on successful payment, so subsequent recurring charges can reuse the stored card instead of failing for lack of a saved payment method. ## v4.2.307 *June 11, 2026* * **VTEX subscription (recurring) order support**\ Adds support for orders created with VTEX subscriptions. The first charge keeps the security code as today, while subsequent recurring charges are authorized without a security code and flagged to the gateway as stored-credential transactions, so automatic renewals no longer fail. Regular checkout is unchanged. ## v4.2.304 *May 28, 2026* **Configuration** * **CIELO\_CYBERSOURCE\_FRAUD antifraud provider for split orders**\ Adds CIELO\_CYBERSOURCE\_FRAUD as an accepted value in the Antifraud Providers for Split Orders setting, alongside RISKIFIED, CYBERSOURCE, and SIGNIFYD. ## v4.2.302 *May 26, 2026* * **Split-order payment support**\ Adds payment support for VTEX orders that get split into multiple suborders (carts combining products from different sellers or franchises). Each suborder now settles at the gateway with a shared antifraud session, instead of only the first one being paid. **Configuration** * **Antifraud providers for split orders setting**\ Adds a configuration field so merchants can choose which antifraud providers (RISKIFIED, CYBERSOURCE, SIGNIFYD) receive the shared session. Defaults to RISKIFIED + CYBERSOURCE when left empty. ## v4.2.301 *May 20, 2026* **Observability** * **Less noise in error monitoring for expected outcomes**\ Expected outcomes (cancellation denials, callback retries) are now recorded at debug level instead of as errors. Internal observability change — no impact on merchant-facing flows. ## v4.2.300 *May 13, 2026* **Performance & Latency** * **Optimize authorize hot path**\ Reduces authorization latency by parallelizing previously sequential calls, coalescing duplicate in-flight requests, and tightening the data flow around preflight, persistence, and Yuno API calls. Functional behaviour is preserved end-to-end. ## v4.2.299 *May 11, 2026* **Apple Pay** * **Installments-plan endpoint**\ Exposes a new endpoint that returns the configured installments plan for an affiliation, used by Apple Pay and Google Pay to render the correct installment options at checkout. ## v4.2.298 *April 27, 2026* **Configuration** * **Choose Yuno vs provider transaction ID**\ Adds a Transaction Identification From setting so merchants can choose whether the Yuno TID (default) or the underlying provider TID is returned to VTEX. ## v4.2.297 *April 15, 2026* **Configuration** * **Transaction Identification From custom field**\ Adds a Transaction Identification From option in the VTEX Admin so merchants can pick between the Yuno TID and the underlying provider TID for the transaction reference. ## v4.2.296 *April 14, 2026* **Configuration** * **Re-add Payment Mode field to configuration**\ Restores the Payment Mode configuration with the same two options as before: Payment App (default) and Redirect (legacy). ## v4.2.295 *April 12, 2026* **Configuration** * **Remove Payment Mode setting (later restored)**\ Temporarily removes the Payment Mode configuration field. The setting is restored in the following release. ## v4.2.294 *April 10, 2026* **Configuration** * **Payment Mode setting for legacy redirect**\ Adds a Payment Mode configuration so merchants can choose between the default Payment App flow and the legacy redirect flow. ## v4.2.293 *April 10, 2026* **Dependency Updates** * **Upgrade diff and cookie to patch CVE-2026-24001 and CVE-2024-47764**\ Patches two reported third-party vulnerabilities: a denial-of-service in the diff library and a cookie attribute injection in cookie. ## v4.2.292 *April 6, 2026* * **Recognize VTEX IO transient errors**\ Treats common transient infrastructure errors (timeouts, dropped connections, refused connections) as recoverable so the authorization stays pending instead of failing immediately. ## v4.2.290 *March 31, 2026* **Apple Pay** * **Preflight payments for Apple Pay and Google Pay**\ Adds pre-created checkout sessions for Apple Pay and Google Pay so the wallet sheet can be opened immediately when the buyer clicks pay. ## v4.2.288 *March 26, 2026* **Multi-Account** * **Route franchise sub-account payments to the correct account**\ On franchise sub-accounts the connector now routes the payment using the order's merchant identifier instead of the parent account hostname, so payments reach the correct sub-account. ## v4.2.287 *March 18, 2026* **Reliability** * **Retry-payment-validation endpoint**\ Adds an endpoint that resolves "phantom" orders by retrying the payment validation, restoring the simple fire-and-forget callback behaviour. ## v4.2.286 *March 17, 2026* **Dependency Updates** * **Patch qs vulnerability (CVE-2026-2391)**\ Patches a reported vulnerability in the qs query-string dependency. ## v4.2.285 *March 12, 2026* * **External-button action for Yuno SDK v1.5**\ Adds an external-button action option that targets Yuno SDK v1.5, used for payment methods that render their own UI outside the SDK. ## v4.2.284 *March 10, 2026* **Dependency Updates** * **Pin minimatch and koa**\ Locks minimatch and koa to patched versions to close reported regular-expression and request-handling vulnerabilities. ## v4.2.283 *March 4, 2026* **Dependency Updates** * **Pin qs to 6.14.2**\ Locks qs to the patched version across both root and node workspaces to close a reported vulnerability. ## v4.2.282 *February 27, 2026* **Customer & Address** * **Customer payer city for Chile**\ Reads the city from the neighborhood field for Chilean orders, where VTEX populates the city there, so payments are no longer declined for missing city data. ## v4.2.281 *February 25, 2026* **Dependency Updates** * **Upgrade vulnerable dependencies**\ Bulk upgrade addressing several reported third-party dependency vulnerabilities. **Pagaleve** * **OTT metadata headers and Pagaleve close-button toggle**\ Sends OTT metadata headers to the secure-proxy and adds a toggle for the Pagaleve Transparente checkout to hide the VTEX close button. ## v4.2.280 *February 23, 2026* **Configuration** * **Order placed page URL setting**\ Adds a configuration option for the VTEX order-placed page URL and forwards it through the pending-authorization flow. **Dependency Updates** * **Patch js-yaml vulnerability**\ Forces js-yaml to a patched version to close CVE-2024-4068. ## v4.2.277 *January 14, 2026* **Performance & Latency** * **Per-client caching for VTEX APIs**\ Adds in-memory caches across VTEX clients (Account, Affiliations, Catalog, Master Data) to cut redundant API calls and reduce checkout latency. ## v4.2.273 *January 7, 2026* **Tax IDs** * **Per-merchant tax ID mapping**\ Adds merchant-aware tax ID (CNPJ) mapping so each payment is tagged with the correct ID and merchant metadata for downstream reconciliation. ## v4.2.272 *January 6, 2026* **Tax IDs** * **Add default CNPJ for testing**\ Provides a default merchant tax ID (CNPJ) when the configured affiliation has none, so testing flows can run without manual setup. ## v4.2.271 *January 5, 2026* **Pagaleve** * **Update Pagaleve parcelado integration tag**\ Updates the configuration tag for Pagaleve installment-Pix so the connector targets the latest provider integration. ## v4.2.267 *December 24, 2025* **Payment Metadata** * **Map VTEX fields to Cybersource MDD metadata**\ Maps additional VTEX order fields into Yuno metadata so Cybersource MDD (Merchant Defined Data) rules can use them for fraud screening. ## v4.2.266 *December 24, 2025* **Pagaleve** * **Pagaleve Transparente for Pix parcelado**\ Adds Pagaleve Transparente as a supported method for both Pix and installment-Pix flows. ## v4.2.264 *December 24, 2025* **Click to Pay** * **Hide installments for Click to Pay**\ Hides the installments option when the buyer is paying with Click to Pay, where instalments are not supported by the upstream networks. ## v4.2.263 *December 15, 2025* **Cancellation Flow** * **Validate transactions before cancel**\ Validates that VTEX transactions exist on the order before triggering the cancellation flow, preventing spurious failures. ## v4.2.262 *December 12, 2025* **PicPay** * **Restore PicPay support**\ Restores PicPay as a supported payment method after it was unintentionally removed. ## v4.2.260 *December 11, 2025* * **Group-order handling**\ Treats VTEX order groups as a single payment, avoiding partial-payment artifacts when several orders are placed together. **Apple Pay** * **Apple Pay installment plans**\ Adds installment-plan support for Apple Pay so the merchant's configured installment options appear in the Apple Pay sheet. ## v4.2.258 *December 9, 2025* **Mercado Pago** * **Add Mercado Pago Checkout Pro**\ Adds Mercado Pago Checkout Pro as a redirect-style payment method. Existing Monnet and PicPay redirect flows are unified onto the same shared flow and forward additional payment metadata, including the merchant domain. ## v4.2.252 *November 27, 2025* **Card Payments** * **Defense-mode fallback for delayed card payments**\ Falls back to direct card processing (defense mode) when the standard flow is delayed by fraud screening, completing the payment without losing the order. ## v4.2.251 *November 20, 2025* **Mercado Pago** * **Mercado Pago Checkout Pro**\ Adds Mercado Pago Checkout Pro as a supported redirect-style payment method. ## v4.2.250 *November 19, 2025* **Card Payments** * **Show status page when a Gift Card is present**\ Renders the standard status page when the order includes a gift-card payment, preventing the connector from short-circuiting the flow. ## v4.2.248 *November 12, 2025* **Configuration** * **Create-customer toggle**\ Adds an optional Create Customer setting so the connector can register the buyer in Yuno's customer registry before the first payment. ## v4.2.247 *November 11, 2025* **Fulfillment** * **Verify tracking\_id and tracking\_url in fulfillment events**\ Validates tracking\_id and tracking\_url before forwarding carrier fulfillment events to Yuno so updates with missing values are skipped gracefully. ## v4.2.244 *October 31, 2025* **Pix** * **NSU on Pix responses**\ Includes the NSU transaction identifier in the Pix response so it can be reconciled with the bank. ## v4.2.242 *October 22, 2025* * **Skip redundant payment-status call**\ Skips the payment-status check when the local state is already PENDING, reducing redundant gateway round-trips. **Card Payments** * **Card IIN lookup and dynamic card type detection**\ Looks up the card BIN (IIN) at checkout so the connector can detect the card brand and whether it is credit or debit dynamically, instead of relying on a static configuration. * **Soft Descriptor configuration**\ Adds a Soft Descriptor configuration field so merchants can control the text that appears on the customer's card statement. ## v4.2.241 *September 24, 2025* **Payment Metadata** * **Send payment reference in metadata**\ Sends the merchant payment reference along with the payment metadata so it can be used for downstream reconciliation. **Dependency Updates** * **Patch brace-expansion dependency**\ Upgrades the brace-expansion dependency to a patched version to close a reported vulnerability. * **Pin brace-expansion across transitive paths**\ Pins brace-expansion across all transitive paths so only the patched version is resolved. ## v4.2.240 *September 4, 2025* * **Update koa dependency**\ Upgrades the Koa server framework to a newer release line. * **Revert Koa upgrade**\ Rolls back the Koa framework upgrade shipped in the previous release while compatibility issues are resolved. ## v4.2.238 *July 31, 2025* * **Non-blocking hostname lookup**\ Removes blocking I/O from the connector's hostname lookup so a slow DNS response can't stall the request. **Webhooks** * **Support webhook v2**\ Adds support for webhook v2. ## v4.2.235 *July 7, 2025* **PSE** * **PSE for Colombia**\ Adds PSE (Pagos Seguros en Línea) as a supported payment method for Colombian merchants, using the bank-redirect flow. ## v4.2.234 *July 7, 2025* **PCI & Secure Proxy** * **Proxy authorization header on PCI calls**\ Adds the Proxy-Authorization header on outbound calls that traverse the VTEX IO proxy, fixing 407 responses on tokenized requests. ## v4.2.231 *June 27, 2025* * **Forward proxy and protocol headers**\ Forwards the original VTEX request headers (X-Forwarded-Proto and Port) so downstream services see the merchant's protocol correctly. ## v4.2.230 *June 18, 2025* * **Uppercase platform identifier**\ Normalizes the platform identifier sent to Yuno to upper-case, aligning with the gateway's expected enum value. ## v4.2.229 *June 11, 2025* **Reliability** * **Axios request timeout**\ Adds an explicit timeout to the Axios HTTP client so hanging connections fail fast instead of stalling the payment. **Dependency Updates** * **Patch tar-fs vulnerability**\ Upgrades the tar-fs dependency to a patched version to close a reported security advisory. ## v4.2.227 *May 14, 2025* * **Update dependencies**\ Bumps several third-party dependencies to their latest patched versions, including the Koa server framework. ## v4.2.226 *May 13, 2025* **Capture** * **Use the VTEX-supplied amount on capture**\ Captures the exact amount that VTEX sends with the capture request, instead of recomputing it from the original order total. This prevents capture mismatches when the order total has changed (partial refunds, gift cards, marketplace splits). ## v4.2.225 *May 7, 2025* **Reliability** * **Log retry-limit exhaustion**\ Adds a clear log entry when the connector exhausts the retry budget for an outbound request, easing on-call diagnosis. ## v4.2.223 *April 30, 2025* **Fulfillment** * **Additional shipping-type mappings**\ Extends the fulfillment mapping with extra shipping types (such as store pickup and marketplace handoff) so more order flows are reported back to the gateway. ## v4.2.222 *April 29, 2025* **Payment Metadata** * **Total cart value as metadata**\ Includes the total cart value as metadata on each payment, useful for risk scoring and reporting. ## v4.2.221 *April 29, 2025* * **Preserve original order dates**\ Stops overriding the original order dates when updating a payment, preserving the merchant-facing timestamps. ## v4.2.218 *April 11, 2025* **Reliability** * **4-hour retry window for stuck payments**\ Adds a 4-hour retry window before re-attempting a stuck payment, reducing pressure on the gateway. ## v4.2.217 *April 11, 2025* **Capture** * **Capture wallet payments**\ Triggers the capture call to Yuno for wallet-based payments so capture timing matches the auto-settle window. ## v4.2.216 *April 10, 2025* **Cancellation Flow** * **4-hour auto-cancel window**\ Raises the auto-cancellation window to 4 hours, giving slow alternative payment methods enough time to settle. ## v4.2.215 *April 9, 2025* **Fulfillment** * **Forward carrier status**\ Retrieves the carrier status from VTEX and forwards it to Yuno as part of the fulfillment update. ## v4.2.214 *April 9, 2025* **Fulfillment** * **Send fulfillment completed event**\ Sends a fulfillment-completed event to Yuno when the VTEX order has been fully delivered. ## v4.2.213 *March 28, 2025* **Fulfillment** * **Include shipped-at timestamp**\ Sends the actual shipping timestamp in fulfillment updates so Yuno can compute accurate delivery SLAs. **Dependency Updates** * **Upgrade Axios HTTP client**\ Updates the Axios HTTP client to the latest stable version, picking up bug fixes and security patches. ## v4.2.210 *March 21, 2025* * **Include product brand on items**\ Includes the product brand on each line item sent to Yuno so brand-level reporting is possible. ## v4.2.209 *March 20, 2025* **Multi-Account** * **Skip account lookup when main account is configured**\ Skips the account-lookup call when a main account is already configured, removing a redundant VTEX API request. ## v4.2.204 *March 17, 2025* **Cancellation Flow** * **Skip cancel when payment is still pending**\ Skips the cancellation path when a payment is not yet made and the order is in a transient state, preventing premature aborts. ## v4.2.202 *March 14, 2025* **Fulfillment** * **Tracking URL and ID as arrays**\ Sends shipping tracking URL and ID as arrays in fulfillment updates, matching Yuno's updated schema. ## v4.2.201 *March 12, 2025* * **Reject non-numeric order IDs**\ Adds order-id format validation to reject non-numeric or malformed identifiers before the payment is created. ## v4.2.199 *March 10, 2025* * **Check for existing Yuno payment before creating**\ Before creating a new Yuno session the connector first checks whether the merchant order already has a payment recorded, avoiding duplicates. ## v4.2.198 *March 10, 2025* * **Validate and recover order ID**\ Validates the order ID before processing and, when invalid, attempts to recover the canonical order ID from VTEX. ## v4.2.197 *March 6, 2025* **Customer & Address** * **Send customer creation date**\ Includes the customer creation date in the payment payload so Yuno can apply customer-tenure-based rules. ## v4.2.196 *March 6, 2025* **Monnet** * **Support Monnet in Yuno VTEX SDK**\ Adds support for monnet in Yuno VTEX SDK. ## v4.2.195 *March 5, 2025* **Dependency Updates** * **Patch dependency vulnerabilities (cross-spawn, koa)**\ Patches reported vulnerabilities across two dependencies (cross-spawn and koa) in one update. **Fulfillment** * **Send fulfillment events to Yuno**\ Forwards VTEX fulfillment events (shipped, delivered) to Yuno so it reflects the order lifecycle. ## v4.2.186 *February 24, 2025* **Multi-Account** * **Expose account name to the front-end**\ Exposes the connector account name to the front-end so multi-account checkouts can be routed correctly. ## v4.2.184 *February 7, 2025* **PicPay** * **PicPay Wallet**\ Adds PicPay digital wallet as a supported payment method through the wallet-redirect flow. ## v4.2.182 *January 30, 2025* * **Handle socket hang-ups on Yuno calls**\ Adds handling for socket-level hang-ups when calling the Yuno API, retrying instead of failing the transaction. ## v4.2.176 *January 20, 2025* * **Coupons total as a separate line item**\ Sends the coupon-discount total as a separate line item to Yuno so the order totals reconcile correctly. ## v4.2.175 *January 17, 2025* **Multi-Account** * **Sub-store / multi-account routing**\ Adds sub-store support so franchises can route payments through a parent account when needed. ## v4.2.168 *December 18, 2024* **Reliability** * **Retry secure-proxy tokenization**\ Adds retries on the Yuno Secure Proxy tokenization call so transient PCI gateway failures don't fail the payment. ## v4.2.155 *December 16, 2024* **Multi-Account** * **Sales-channel policy resolution**\ Resolves the sales-channel policy so the connector picks the right policy when multiple are configured on the merchant account. ## v4.2.146 *December 9, 2024* * **Wait before auto-cancelling**\ Adds a wait window before auto-cancelling a payment, giving wallet redirects enough time to complete. ## v4.2.144 *December 6, 2024* **Cancellation Flow** * **Faster auto-cancel for generic Yuno method**\ Reduces the auto-cancel delay when the payment method is the generic Yuno option, improving the merchant's view of pending transactions. ## v4.2.141 *December 4, 2024* * **Upgrade semver-regex**\ Upgrades the semver-regex dependency to patch a reported vulnerability. * **Patch reported vulnerabilities (group 1)**\ Bulk upgrade of dependencies to patch a batch of reported third-party vulnerabilities. * **Patch reported vulnerabilities (group 2)**\ Bulk upgrade of dependencies to patch a further batch of reported third-party vulnerabilities. **Dependency Updates** * **Bump the npm\_and\_yarn group across 2 directories with 19 updates**\ Patches 19 reported third-party dependency vulnerabilities in one bulk security update. * **Bump the npm\_and\_yarn group across 2 directories with 15 updates**\ Patches 15 reported third-party dependency vulnerabilities in one bulk security update. * **Bump the npm\_and\_yarn group across 2 directories with 8 updates**\ Patches 8 reported third-party dependency vulnerabilities in one bulk security update. **Card Payments** * **Debit cards (Maestro, Voucher, Elo Débito)**\ Adds Maestro, Visa Electron, Elo Débito, Mastercard Debit and Voucher as supported debit-card payment methods. ## v4.2.137 *November 19, 2024* **Webhooks** * **Webhook logging**\ Adds structured logging to the webhook handler so incoming Yuno events can be traced. ## v4.2.136 *November 14, 2024* **Fulfillment** * **Send shipping status to Yuno**\ Forwards the order's shipping status as part of the fulfillment update so Yuno has end-to-end order context. ## v4.2.135 *November 8, 2024* * **Expanded payment status mapping**\ Recognizes additional payment statuses from Yuno so terminal states are mapped correctly back to VTEX. ## v4.2.134 *November 7, 2024* **Monnet** * **Monnet cash and bank transfer**\ Adds Monnet cash and bank transfer as supported payment methods through an iframe flow. ## v4.2.133 *October 22, 2024* **Pix** * **Pix Parcelado**\ Adds Pix Parcelado (installment Pix) as a supported payment method for Brazilian merchants. ## v4.2.132 *September 19, 2024* **Cancellation Flow** * **Approve cancellation when order is already known**\ Returns a cancellation-approved response when the merchant order is already on record, avoiding spurious cancellation failures. ## v4.2.131 *September 5, 2024* **Pagaleve** * **Pagaleve one-time Pix**\ Adds support for Pagaleve's single-payment Pix option (a vista). ## v4.2.130 *August 29, 2024* **Pagaleve** * **Pagaleve installment Pix**\ Adds support for Pagaleve's installment-Pix offering, letting buyers split a Pix payment over multiple instalments. ## v4.2.129 *August 29, 2024* **Pagaleve** * **Add Pagaleve initial support**\ Adds initial support for Pagaleve as a buy-now-pay-later option for Brazilian merchants. ## v4.2.128 *August 28, 2024* **Boleto** * **Boleto Banco do Brasil**\ Adds Boleto Banco do Brasil as a supported payment option. ## v4.2.127 *August 28, 2024* **Pix** * **Pix redirect flow**\ Adds the Pix redirect flow as an alternative to QR code, so merchants can route customers to the bank-side payment page. ## v4.2.126 *August 19, 2024* **Customer & Address** * **Richer logs and neighborhood extraction**\ Enriches connector logs with more context and extracts the neighborhood field from VTEX addresses so it can be sent to the gateway. ## v4.2.117 *August 15, 2024* **Customer & Address** * **Improve customer address handling**\ Forwards all address sub-fields (state, neighborhood, complement) to Yuno so payments include the complete buyer address. ## v4.2.115 *August 14, 2024* **Alelo** * **Add Alelo brand**\ Adds the Alelo card brand to the supported payment-method list in the provider configuration. ## v4.2.114 *August 12, 2024* **Refunds** * **Fix typo on refund description**\ Corrects a typo in the message returned to VTEX after a refund is processed. ## v4.2.113 *August 8, 2024* * **Fetch payment details from VTEX**\ Looks up payment details from the VTEX transactions API so the connector has accurate context when handling captures and refunds. ## v4.2.107 *July 18, 2024* **Configuration** * **Remove custom field**\ Removes a custom configuration field that was no longer used by any merchant. ## v4.2.106 *July 18, 2024* * **Restore AES session encryption**\ Restores AES-256-CBC encryption for sensitive session data passed between front-end and back-end after a regression removed it. ## v4.2.92 *July 15, 2024* **Card Payments** * **Two-card split payments**\ Adds support for splitting a payment across two cards in the same VTEX checkout. ## v4.2.91 *July 10, 2024* **Alelo** * **Alelo (initial support)**\ Adds Alelo benefit cards as a supported payment method (initial integration). ## v4.2.90 *July 5, 2024* **Apple Pay** * **Support Apple pay**\ Adds Apple Pay support, including the Apple-Pay-sheet flow at the VTEX checkout. ## v4.2.89 *June 28, 2024* * **Alternative payment method status validation**\ Adds payment-status validation for alternative payment methods so the connector reports the correct final state back to VTEX. ## v4.2.88 *June 20, 2024* **Multi-Account** * **Forward merchant account on payments**\ Sends the merchant account identifier with each payment so Yuno can resolve the correct affiliation when multiple are configured. ## v4.2.87 *June 19, 2024* **Google Pay** * **Enable Google Pay**\ Activates Google Pay as a supported payment method at the VTEX checkout. ## v4.2.86 *June 17, 2024* **Nubank** * **Nu Pay support**\ Adds Nu Pay (Nubank's credit-line payment) as a supported method for Brazilian merchants. ## v4.2.85 *June 13, 2024* **Boleto** * **Boleto Bancário integration**\ Adds support for Boleto Bancário, returning the barcode and payment URL so merchants can render them at checkout. ## v4.2.84 *May 31, 2024* **Card Payments** * **Improve card logs**\ Adds more context to card-payment logs to speed up incident triage and merchant support investigations. ## v4.2.83 *May 28, 2024* **Webhooks** * **Webhook receiver for payment status**\ Adds a webhook receiver so the connector can update VTEX payment status when Yuno publishes terminal events. ## v4.2.81 *April 30, 2024* **Nubank** * **Add Nubank**\ Adds Nubank as a supported payment method for Brazilian merchants. ## v4.2.80 *April 26, 2024* **PagoEfectivo & SafetyPay** * **PagoEfectivo and SafetyPay**\ Adds initial support for PagoEfectivo and SafetyPay as redirect-style payment options targeting Peru. ## v4.2.76 *April 4, 2024* **Capture** * **Declare auto-settle support**\ Declares auto-settle support in the provider configuration so VTEX correctly hands off capture timing to the connector. ## v4.2.74 *March 19, 2024* **Apple Pay** * **Enable Apple Pay**\ Activates Apple Pay as a supported payment method at the VTEX checkout for merchants enrolled in the Apple Pay program. ## v4.2.73 *March 15, 2024* **Pix** * **Support vtex pix**\ Adds support for vtex pix. ## v4.2.72 *March 11, 2024* * **NSU transaction identifier**\ Includes the NSU (transaction sequence number) in the payment response so merchants can reconcile transactions with the acquirer. ## v4.2.71 *March 4, 2024* * **Send raw payment response**\ Includes the raw Yuno payment response in the VTEX callback so merchants and support teams have full provider context when investigating. ## v4.2.70 *October 4, 2023* **Observability** * **Upgrade event-log library to v1**\ Picks up new fields, bug fixes, and improved trace-ID support from the v1 release of the event-log library. ## v4.2.69 *October 4, 2023* **Performance & Latency** * **Performance improvement**\ Reduces latency on the payment authorization path through targeted optimizations in the hottest code paths. ## v4.2.67 *September 20, 2023* **Observability** * **Yuno event-log library integration**\ Wires in the Yuno event-log library so connector errors are tracked centrally with trace IDs that link gateway and merchant logs. ## v4.2.55 *September 13, 2023* **Observability** * **Structured event logs**\ Introduces structured event logging across the connector to make production troubleshooting easier. ## v4.2.35 *August 17, 2023* **3-D Secure** * **3-D Secure support**\ Adds end-to-end 3-D Secure for card payments so merchants can comply with strong-customer-authentication requirements. ## v3.0.0 *May 26, 2023* **Observability** * **Event log parsed error fixed**\ Fixes a parsing error that prevented some failures from being recorded in the event log. ## v1.2.0 *December 21, 2021* **Dependency Updates** * **Bump urijs from 1.19.6 to 1.19.11 in /node**\ Patches several reported vulnerabilities in the urijs URL-parsing dependency. ## v1.1.0 *December 21, 2021* **Dependency Updates** * **Bump minimatch from 3.0.4 to 3.1.2 in /node**\ Patches a regular-expression denial-of-service issue in the minimatch dependency. ## v1.0.6 *November 18, 2021* **Dependency Updates** * **Bump @babel/traverse from 7.13.0 to 7.23.6 in /node**\ Patches an arbitrary-code-execution vulnerability in the @babel/traverse build-time dependency. * **Bump async from 2.6.3 to 2.6.4 in /node**\ Patches a prototype-pollution issue in the async dependency. ## v1.0.5 *May 20, 2021* * **Return undefined when the payment state is pending**\ Aligns the connector's response for pending payments with VTEX expectations so pending payments are no longer marked as failed. ## v1.0.4 *May 17, 2021* **3-D Secure** * **Support for the VTEX card form**\ Adds full support for the VTEX card-payment form across all major brands, including 3-D Secure authentication. ## v1.0.3 *April 28, 2021* **Dependency Updates** * **Bump semver from 5.7.1 to 5.7.2 in /node**\ Patches a denial-of-service vulnerability reported in the semver dependency. ## v1.0.2 *March 2, 2021* **Dependency Updates** * **Bump minimatch from 3.0.4 to 3.1.2**\ Patches a regular-expression denial-of-service issue in the minimatch dependency. ## v1.0.1 *March 1, 2021* **Dependency Updates** * **Bump path-parse from 1.0.6 to 1.0.7**\ Patches a regular-expression denial-of-service vulnerability in the path-parse transitive dependency. ## v1.0.0 *February 27, 2021* * **Fix discount handling**\ Corrects how discount amounts are forwarded to the gateway so coupon and promotion values are reflected accurately on the payment. **Dependency Updates** * **Bump json5 from 1.0.1 to 1.0.2**\ Patches a **proto** prototype-pollution vulnerability in the json5 dependency. **Fulfillment** * **Order events**\ Adds order-event tracking so VTEX order state transitions propagate to Yuno. ## v0.0.2 *February 28, 2020* **Dependency Updates** * **Bump minimist from 1.2.5 to 1.2.8**\ Patches a reported prototype-pollution vulnerability in the minimist dependency. # WooCommerce Plugin Changelog Source: https://docs.y.uno/changelog/plugins/woocommerce Latest updates and version history for the Yuno WooCommerce Plugin ## v1.0.1 *April 13, 2026* **Configuration** * **Hide payment selection when Yuno is the only gateway**\ Adds a Hide Payment Selection setting so the payment method radio buttons are hidden at checkout when Yuno is the only active gateway, presenting a cleaner one-method checkout experience. Applies to both legacy and block-based checkouts. ## v1.0.0 *April 7, 2026* * **Initial WordPress Plugin Directory release**\ First public release of the Yuno WooCommerce payment gateway on the WordPress Plugin Directory, integrating Yuno's payment orchestration platform with WooCommerce through the Yuno Web SDK and a PHP REST API layer. **Card Payments** * **Card payments, wallets, and local payment methods**\ Accepts cards, digital wallets, and local payment methods through Yuno's payment orchestration platform from a single integration, with intelligent payment routing across multiple providers. * **3D Secure and additional authentication support**\ Handles 3D Secure challenges and additional authentication flows during payment, including a return-from-3DS detection that prevents accidental order duplication. **Block Checkout** * **WooCommerce block-based checkout support**\ Supports both the legacy shortcode checkout and the WooCommerce block-based checkout (default since WooCommerce 8.3). Both flows converge at the order-pay page so the SDK orchestration is shared. **Webhooks** * **Webhook receiver for asynchronous payment status**\ Receives Yuno payment events (succeeded, pending, failed, chargeback, refund) with three-layer HMAC verification and idempotent processing through transient locks. **Marketplace** * **Marketplace split payments**\ Splits the order total between a seller recipient and a platform commission, configurable as a percentage or a fixed minor-unit amount. **Reliability** * **In-place retry on failed payments**\ Lets the customer retry a failed payment in place by remounting the SDK, instead of creating a new duplicate order on each retry attempt. * **Server-side payment verification**\ Verifies every reported payment status against the Yuno API before updating the WooCommerce order, never trusting client-reported status. **Order Management** * **Auto-complete for virtual and downloadable orders**\ Orders that contain only virtual or downloadable products skip the processing state and go straight to completed after payment. * **HPOS compatibility**\ Declares compatibility with WooCommerce High-Performance Order Storage (custom order tables) and uses HPOS-safe order queries throughout. **Customer & Address** * **Per-order Yuno customer strategy**\ Creates a fresh Yuno customer per WooCommerce order, with automatic recovery from duplicate-customer and customer-not-found errors so payments are never blocked by stale customer state. **Configuration** * **Multi-environment support**\ Auto-detects the Yuno API environment (development, staging, sandbox, production) from the Public API Key prefix. * **Configurable debug logging with PII redaction**\ Optional WooCommerce-integrated logging for troubleshooting payments and webhooks. Phone numbers, email addresses, and full API payloads are never logged. # React Native SDK Changelog Source: https://docs.y.uno/changelog/react-native Latest updates and version history for the Yuno React Native SDK Release notes for the React Native SDK are published here as new versions are released. Check back after each SDK update for a detailed summary of changes, new features, and migration guidance. ## v1.3.2 *August 3, 2026* * **Headless Token Generation and Enrollment Accept the Documented camelCase Properties**\ `YunoSdk.generateToken()` and `YunoSdk.continueEnrollment()` failed at runtime when called with the camelCase properties declared by the package's own TypeScript types (`checkoutSession`, `paymentMethod`, `expirationMonth`, …), because the native bridges decode snake\_case keys only. On iOS this surfaced as `TOKEN_GENERATION_ERROR` ("No value associated with key checkout\_session") and on Android as a `NullPointerException` on `PaymentMethod.getType()`. The SDK now converts payload keys from camelCase to snake\_case at the JS boundary before invoking the native bridge, so the documented TypeScript contract works on both platforms. Payloads already using snake\_case keys are passed through unchanged, so no migration is required. ## v1.3.1 *July 13, 2026* * **iOS Build Failure on Case-Insensitive File Systems**\ Renamed the React Native bridge pod from `YunoSdk` to `YunoSdkReactNative` to eliminate a name collision with the native `YunoSDK` pod on case-insensitive macOS file systems (the default on all Macs). The collision caused linker failures during `pod install` / build — notably on Xcode 26 — unless `use_frameworks!` was enabled. Projects using React Native autolinking require no changes; if your Podfile references `pod 'YunoSdk'` directly, update it to `pod 'YunoSdkReactNative'`. * **TypeScript Definitions Now Published to npm**\ The npm package now ships the TypeScript declaration files referenced by its `types` field (`lib/typescript/index.d.ts`). Previous versions declared the types but did not include them in the published package, so TypeScript consumers got no type resolution out of the box. TypeScript projects now get full typing and autocompletion without workarounds. ## v1.3.0 *July 2, 2026* * **Native SDK Bumps**\ Updated the underlying native SDKs to Android `2.17.2` and iOS `2.18.0`. * **Android Compilation Failure in v1.2.0**\ Fixed an issue where v1.2.0 failed to compile on Android projects. **Payments** * **getThreeDSecureChallenge Removed**\ Removed `YunoSdk.getThreeDSecureChallenge()` and the `ThreeDSecureChallengeResponse` type. Use the new `continueCardPayment()` method instead — the SDK now handles the 3DS challenge internally and returns the final payment state. * **continueCardPayment Headless Method**\ Added `YunoSdk.continueCardPayment(checkoutSession, countryCode?, showPaymentStatus?)` to complete headless card payments that require an additional action, such as a 3DS challenge. It resolves with the final payment state (`CardPaymentResult`). Supports CARD payments only. ## v1.2.0 *May 19, 2026* * **Payment Render Flow**\ Added the new Payment Render flow with the `` component and bridge methods (`startRenderFlow`, `showForm`, `submitForm`, `continueRender`) so merchants can embed the payment form inline with full lifecycle control. * **Enrollment Render Flow**\ Added the Enrollment Render flow with the `` component for embedded card enrollment, mirroring the Payment Render API. * **Native SDK Bumps**\ Bumped the underlying native SDKs to Android `2.15.1` and iOS `2.16.0`, bringing the latest payment, enrollment, and security improvements to the React Native wrapper. * **Android 15 Edge-to-Edge Overlap**\ Configured edge-to-edge on Android 15 to prevent the payment UI from overlapping system bars, and now runs `enableEdgeToEdge` on the UI thread. * **Samsung One UI Compatibility**\ Uses `setDecorFitsSystemWindows` for Samsung One UI compatibility, preventing layout glitches on affected devices. * **Seamless Payment Startup Crashes**\ Made native module access fully lazy, ensured payment status events are dispatched on the main thread, safely unwrap the iOS view controller, and resolved a `TurboModuleRegistry` error in seamless flows. * **Android Status Alignment**\ Aligned Android status values with the TypeScript `YunoStatus` enum and kept render flow status mappings separate from shared mappings. * **fast-xml-parser DoS Vulnerability**\ Upgraded `fast-xml-parser` to address denial-of-service advisories (VULS-1511 and CVE-2026-25128). ## v1.1.0 *March 10, 2026* * **CardFlow Configuration Removed**\ The `CardFlow` enum and the `cardFlow` property in `YunoConfig` have been removed. Card form type is now configured from the Yuno Dashboard instead of the client SDK. Remove any `CardFlow` import and `cardFlow` references from your initialization code before upgrading.\ [Migration guide →](https://github.com/yuno-payments/yuno-sdk-react-native#breaking-changes-v110) * **Native SDK Bumps**\ Bumped the underlying native SDKs to Android `2.11.0` and iOS `2.12.9-RC`. * **iOS Seamless Payment Flow**\ Switched iOS seamless payments to `startPaymentSeamlessLite`, now resolves promises with the final payment status instead of `PROCESSING`, runs the call on `MainActor`, and uses the `currentLanguage` from `initialize` in `SeamlessParams`. * **Android removeListeners Crash**\ Fixed an Android crash caused by a type mismatch on `removeListeners`. The parameter type now matches what React Native passes from JS. * **Android onPaymentSelected Signature**\ Updated the `onPaymentSelected` callback signature to match Android SDK 2.11.0. * **minimatch ReDoS Vulnerability**\ Updated `minimatch` to resolve a regular-expression denial-of-service (ReDoS) advisory in the dependency tree. ## v1.0.30 *January 13, 2026* * **TurboModule Support**\ Added TurboModule support for React Native 0.82+ via a new `NativeYunoSdk` codegen spec, while remaining backward compatible with the Old Architecture through a `NativeModules` fallback. ## v1.0.29 *January 13, 2026* * **New Architecture Preparation**\ Internal updates preparing the package for React Native 0.82+ and the New Architecture (TurboModules). No public API changes; full TurboModule support arrived in 1.0.30. ## v1.0.28 *January 13, 2026* * **Internal Release Pipeline Updates**\ Maintenance republish with no functional changes. No API changes required. ## v1.0.27 *January 13, 2026* * **Internal Release Pipeline Updates**\ Maintenance republish with no functional changes. No API changes required. ## v1.0.26 *December 23, 2025* * **iOS saveCardEnabled Parsing**\ Fixed a typo in the iOS config key parser that prevented `saveCardEnabled` from being applied. The toggle now correctly reaches the native SDK. ## v1.0.25 *December 22, 2025* * **iOS Podspec Pin**\ Pinned the iOS `YunoSDK` dependency to `2.9.0-r`. No API changes required. ## v1.0.24 *December 17, 2025* * **iOS Language in Payment Full Flow**\ Fixed iOS Payment Full flow to respect the `language` parameter passed at initialization. ## v1.0.23 *December 17, 2025* * **iOS CardFlow Initialization**\ Fixed iOS initialization to honor the `cardFlow` configuration parameter that was previously ignored on iOS. ## v1.0.22 *December 15, 2025* * **Documentation Updates**\ Expanded README documentation. No API changes required. ## v1.0.21 *December 10, 2025* * **Simplified Language API**\ The `language` parameter now accepts a plain string instead of requiring the `YunoLanguage` enum, simplifying initialization. No migration required for existing integrations using the enum. ## v1.0.20 *December 10, 2025* * **iOS Language Initialization**\ Fixed iOS initialization to honor the `language` configuration parameter (matching the Android key), while keeping backward compatibility with the legacy `lang` parameter. ## v1.0.19 *December 3, 2025* * **Android SDK 2.8.1 Callback Compatibility**\ Updated Android callback signatures to be compatible with Android SDK 2.8.1. No API changes required. ## v1.0.18 *December 3, 2025* * **Internal Release Pipeline Updates**\ Internal version alignment between the React Native wrapper and the underlying native SDK references. No API changes required. ## v1.0.17 *December 3, 2025* * **Headless Payment Flow**\ Added a Headless Payment Flow for Android and iOS so merchants can drive payment progression from their own UI while delegating native execution to the SDK. * **Headless Enrollment Flow**\ Added a Headless Enrollment Flow for Android and iOS for card enrollment via custom merchant UI. * **iOS Payment Full Flow**\ Added Payment Full flow support on iOS with the native `YunoPaymentMethods` component for parity with Android. * **iOS Native Module for YunoSDK 2.x**\ Updated the iOS native module to YunoSDK 2.x, including correct delegate passing for `startPayment` and `continuePayment` and using the `.succeeded` enum case. * **iOS Module Registration**\ Fixed the iOS native module registration by adding `moduleName()` and `constantsToExport()` and switching `NativeEventEmitter` to lazy loading, resolving linking issues at startup. * **OTT and Payment Status Events**\ OTT and payment status events are now emitted from the Full Payment Flow delegate on iOS, and the Android Payment Full flow no longer reports a stale `CANCELLED` status across sessions. ## v1.0.16 *December 2, 2025* * **CardFlow Default Alignment**\ Aligned the default `CardFlow` value with the native SDK by switching from `MULTI_STEP` to `STEP_BY_STEP` to prevent mismatched card form rendering. # Web SDK Changelog Source: https://docs.y.uno/changelog/web Latest updates and version history for the Yuno Web SDK ## v1.10.3 *August 5, 2026* **Core SDK** * **Dead analytics events cleanup**\ Removes 17 analytics emit methods that had zero callers (verified against develop plus a cross-repo audit of the card iframe and mobile SDKs), including the miswired `securityCodeForm.*` methods that emitted `enrollStatus_pageViewed`. No emitted event changes: every event that fires today keeps firing; `enrollPaymentMethodForm_submitted` keeps its live inline emitter and `payment_created` stays reserved for the audit pipeline. * **Phone Country Code Autofill From Customer**\ The checkout form phone country-code dropdown now preselects the country matching the customer's phone prefix sent at session creation, disambiguated by the customer's country, instead of always defaulting to the session country. **Card Payments** * **Null onInstallmentSelected event when installments become unavailable**\ The `onInstallmentSelected` callback now fires with a `null` payload when installment options that were previously notified become unavailable — most commonly when the shopper switches from a card with installments to a card without them. The null event only fires if a real installment selection was notified before; forms where installments were never available stay silent. Callback invocations are also wrapped so a merchant handler that throws on `null` cannot break the card form. Applies to new-card, secure-fields, enrolled-card, and Click to Pay flows. * **Environment-Aware 3DS Host Resolution**\ Resolve the sdk-3ds host (challenge.html, session-id.html and the 3DS event origin) from the SDK's runtime environment — encoded in the public API key — instead of freezing it into the bundle at build time. A bundle built for one environment (e.g. prod) but run against another (e.g. sandbox) was sending an environment-mismatched 3DS session token to the wrong `sdk-3ds..y.uno` host, where the session-binding verifier rejected it with 403 Forbidden and the challenge never loaded. The API and WebSocket hosts already resolve per environment this way; the 3DS host now does too. Backward-compatible: a concrete host with no `_ENVIRONMENT_` placeholder passes through unchanged. ## v1.10.2 *August 3, 2026* * **PayPal Enrollment**\ Resolve the payment status reported to the merchant from the server instead of assuming SUCCEEDED when PayPal approves, and avoid double error handling when the payment lookup fails after approval — the error screen or merchant error callback now fires exactly once, honoring `showPaymentStatus`. ## v1.10.1 *July 30, 2026* **Core SDK** * **Faster Full Checkout Loading**\ The Full and Seamless Full checkouts now load faster: SDK resources and express button scripts download in parallel with the initial API calls, reducing the time to show the payment method list and express buttons. **Samsung Pay** * **Samsung Pay Sheet Close Reports Cancellation**\ Closing the Samsung Pay payment sheet now reports a user cancellation instead of showing a "Transaction failed" screen, and no longer leaves the merchant loading state stuck. **Card Payments** * **Fixed Enrolled Card Installment Notifications**\ The onInstallmentSelected callback now fires only from the enrolled card the customer selected: it notifies the default installment on first selection, changes made while the card is active, and the last selection when returning to the card. Cards not selected no longer emit duplicate notifications when switching payment methods. ## v1.10.0 *July 29, 2026* **Samsung Pay** * **Samsung Pay support in the Web SDK**\ Adds Samsung Pay as an external wallet button. The SDK loads Samsung's Web Checkout SDK, reads the sdk\_provider configuration returned by the backend, opens the Samsung payment sheet and forwards the tokenized payment credential to Yuno for authorization. **Card Payments** * **Streamlined Saved Card Display**\ Removed the card image preview from the saved (tokenized) card flow and replaced it with a compact preview showing the card brand, last four digits, cardholder name and expiry date. * **Improved Enrolled Card Form Rendering**\ The enrolled card form no longer reserves empty space when it has no fields to display, and now renders the card holder name field when the payment method configuration requires it. * **onInstallmentSelected Callback for Enrolled Cards**\ Added support for the onInstallmentSelected callback on enrolled cards. **Google Pay** * **Fixed Google Pay Button Colors**\ The Google Pay button now always honors an explicitly configured buttonColor (white or black), even when the page runs in dark mode. The default setting keeps adapting to the page color scheme automatically. **Core SDK** * **Improved Express Buttons Layout**\ The full checkout now renders up to three express payment buttons side by side with unified default styles. Express buttons that do not fit in the row are shown inside the payment method list and render their native button when selected. * **EU Region Initialization Support**\ The Web SDK can now be initialized against the EU region, routing all SDK network calls to the EU checkout API. Existing integrations without a region set continue to use the current endpoint unchanged. * **Checkout Lifecycle Analytics Events**\ Adds `checkoutSdk_started` and `payment_resolved`, and enriches the existing `checkoutSdk_completed` with UX attributes (clicks, taps, keystrokes, scroll), so a checkout can be measured end to end: when it starts, how the payment resolved, and — from the presence of `checkoutSdk_completed` — whether it was completed or abandoned. Both new events flush on emission so they are not lost to the batch debounce. **PayPal** * **PayPal Billing Agreement Enrollment Support**\ The SDK now supports enrolling customers with PayPal billing agreements (PAYPAL\_BA\_ENROLLMENT) and sends the PayPal partner attribution ID when loading the PayPal SDK. **Checkout** * **Express-Only Payment Methods Callback**\ Added an optional `onlyExpressPaymentMethods` callback to the full checkout configuration that reports `true` when every available payment method renders as an express button (Apple Pay, Google Pay, PayPal, PayPal enrollment, PayPal Braintree, Revolut Pay) and `false` otherwise. When only express methods are available, the "Or pay with" divider is no longer rendered below the express buttons. * **Click to Pay footers use the shared modal footer**\ The Click to Pay card form, enrolled card, and installment selection screens now render the shared modal footer instead of a Click to Pay-specific copy, matching the full-width button and centered "Powered by Yuno" tag redesign. The legacy CSS hooks (`sdk-payments-c2p-button-bottom__modal-bottom`, `__button-continue`, `__button-back`) are preserved and the shared classes are added alongside them; the internal wrapper classes `sdk-payments-c2p-button-bottom__buttons-content` and `__button-wrapper` no longer exist in the DOM. The Click to Pay footer badge now links the country-specific privacy policy URL instead of always the global fallback. * **Full-width action button in modal footers**\ The action button in the shared modal footer now spans the full width on every viewport, with the "Powered by Yuno" privacy tag centered above it. Lite keeps the tag below the button. Embedded forms rendered with `renderMode: element` are unchanged. ## v1.9.25 *August 6, 2026* **Payment Actions** * **Fixed showPaymentStatus on Payment Failures**\ When showPaymentStatus is set to false, the SDK no longer renders the full-screen "Transaction failed" message on early payment failures (payment not found or not yet processed); the error is delivered through the onError callback instead. ## v1.9.24 *August 3, 2026* * **PayPal Enrollment**\ Avoid double error handling when the payment lookup fails after approval — the error screen or merchant error callback now fires exactly once, honoring `showPaymentStatus`. ## v1.9.23 *July 31, 2026* * **PayPal Enrollment Payment Status**\ Resolve the payment status reported to the merchant from the server instead of assuming SUCCEEDED when PayPal approves. ## v1.9.19 *July 29, 2026* **Card Payments** * **onInstallmentSelected Callback for Enrolled Cards**\ Added support for the onInstallmentSelected callback on enrolled cards. ## v1.9.18 *July 28, 2026* **Checkout** * **Express-Only Payment Methods Callback**\ Added an optional `onlyExpressPaymentMethods` callback to the full checkout configuration that reports `true` when every available payment method renders as an express button (Apple Pay, Google Pay, PayPal, PayPal enrollment, PayPal Braintree, Revolut Pay) and `false` otherwise. When only express methods are available, the "Or pay with" divider is no longer rendered below the express buttons. ## v1.9.17 *July 20, 2026* **Core SDK** * **Payment method radio moved to the leading edge (RTL-aware)**\ BREAKING (visual default): the payment-method selection radio now renders at the leading (left) edge of each row, mirrored to the right automatically in RTL locales (Arabic, Hebrew, Persian, Urdu). Merchants with custom CSS targeting the old right-aligned radio may need to adjust their selectors. The trailing position remains available via the RadioButton showRadioLeft= prop in sdk-web-core. * **Six New Checkout Languages**\ Adds Greek, Hebrew, Romanian, Slovak, Serbian (Latin), and Ukrainian localization to the Web SDK checkout. **Fraud & Risk** * **Braintree Device Data Collection** ## v1.9.16 *July 14, 2026* **Card Payments** * **Fixed Installments for Dual Cards in Credit-Only Mode**\ Installment options now load correctly for Brazilian dual cards when credit\_card\_only\_processing is enabled, ensuring payments are tokenized as credit with the proper installment selection. **APM** * **Slim Form Support for Bank Transfer Fields**\ Added slim form support to the bank transfer fields. ## v1.9.15 *July 10, 2026* **Fraud & Risk** * **CyberSource Fingerprint Session ID Override**\ CyberSource/Cielo CyberSource fingerprint now honors the per-provider session\_id override (deviceFingerprints), enabling merchant-specific MID prefixes on the ThreatMetrix session id. **Card Payments** * **Consistent Card Field Labels**\ The card number, expiration date, and CVV fields now resolve their labels from the same UI copy source across all card form variants, so the full checkout and the Lite SDK render identical texts for the same checkout session configuration. ## v1.9.14 *July 9, 2026* **Core SDK** * **Backend-driven checkout field labels and required fields**\ The checkout form now renders from the configuration returned with each payment method. Field labels, placeholders, validation messages, selection options, and which fields are shown are driven by the backend, so the form always reflects exactly what each payment method and provider requires, displayed in the shopper's language. When this configuration isn't provided, the SDK falls back to its built-in localized text, so existing integrations keep working with no code changes required. **Card** * **Consistent installment dropdown format**\ The installment dropdown now renders every option with the same template (`Nx of {value} - Total {total}`) regardless of whether the option includes financial costs, fixing mixed layouts when a plan combines options with and without `financial_costs`. **APM** * **ACH Direct Debit Account Fields**\ Added two new fields to the bank transfer form: Account Type (Checkings/Savings) and Account Holder Type (Individual/Company). **PayPal** * **Improved PayPal Braintree Button Loading**\ The loading placeholder now matches the button style configured via `externalButtons.paypalBraintree.style` (width, height and border radius), removing the visual mismatch while the button loads ## v1.9.13 *July 7, 2026* **Address Autofill** * **Address Autofill via Google Places + Brazil ViaCEP**\ A single feature flag `address_autofill_enabled` enables a new address autofill experience. For non-Brazilian countries the user gets a Google Places combobox with up to 5 live suggestions, cadence guard, silent fallback to manual entry and analytics events. For Brazil the field collapses to the CEP only, and ViaCEP auto-fires when the postal code matches the regex `/^\d{5}-?\d{3}$/` (with blur as fallback); the remaining fields unfold after the attempt succeeds or fails. The form country drives the decision and resets cleanly across switches. 6 new i18n keys translated in 26 locales. ## v1.9.12 *July 6, 2026* **PayPal** * **Improved PayPal Braintree Checkout Flow**\ Improves the PAYPAL\_BRAINTREE external button payment method, now built on braintree-web and PayPal Web SDK v6 ## v1.9.11 *July 2, 2026* **Payment Actions** * **Payment retry in Lite checkout**\ Payment retry now works in the Lite checkout flow (`mountCheckoutLite`). A declined or errored card payment shows inline field errors and retries without restarting checkout, gated by `settings.card.enable_payment_retry`. ## v1.9.10 *June 30, 2026* **Checkout** * **Localized currency formatting by merchant language**\ Amounts now follow the merchant-configured YunoLanguage + per-checkout countryCode (via Intl.NumberFormat) instead of being derived from the currency, fixing decimal/thousand separators, symbol position and spacing for non-English checkouts. The currency still drives symbol vs ISO code and decimals. **Alternative Payment Methods** * **Render the BLIK OTP Input in Every Checkout Display Mode**\ BLIK now prompts for its one-time code in all checkout display modes — unfolded, modal (Lite SDK) and render — instead of only the unfolded flow. The entered code is sent in the One Time Token request so the payment can be completed from any integration mode. **Core SDK** * **Auto-Select Single Payment Method**\ When there is no enrolled payment method and only a single non-button payment method is available, it is now preselected automatically. **Payment Actions** * **Status Action Notification**\ The SDK now notifies the onActionExecuted callback with a CHECK\_STATUS action when the payment status screen is shown, so merchants can reliably dismiss their own loaders. ## v1.9.9 *June 24, 2026* **Core SDK** * **Pass a per-session JWT to challenge.html and add a postMessage handshake with nonce/origin verification for the 3DS frame-restriction flow.** ## v1.9.8 *June 23, 2026* * **FIXED: Enable downloading the QR image for client-generated QR codes (`GENERATE_QR`, e.g. QRIS/Xendit). The "Download QR image" button now renders for these payment methods and saves the on-screen code as a PNG generated on the client with `qrcode`. Previously the button only appeared for ready-to-use image QRs (URL/BASE64), so QRIS never showed it even though the backend sent the `download_qr` label.** **Card Payments** * **Per-Scheme Card Number Length Validation**\ Card number length is now validated per card scheme using backend-driven rules combined with the Luhn check, reducing false rejections of valid cards. Gated behind a feature flag. * **FIXED: Route sdk-web-card iframe assets (secure-field pages, card form, mediator) through the asset host in whitelabel mode. They were resolved against `apiUrl`, so when a merchant set a distinct `assetUrl` carrying a proxy sub-path (e.g. `/hosted-payment-methods/orchestrator`) the sub-path was dropped and secure fields loaded from the wrong path in enrollment and enrolled-card flows (CORECM-17901).** ## v1.9.7 *June 17, 2026* **Payment Actions** * **Report The Executed Payment Action**\ `continuePayment()` now tells you which payment action is running: it resolves with the executed action and accepts a new optional `onActionExecuted` callback that fires for each action. Use it to keep your loader on screen until a 3DS redirect navigates, avoiding the card-form flash before the challenge. **Card Payments** * **Card Form Title No Longer Flashes While Loading**\ In the slim card form embedded with `elementSelector`, the "Card information" title now appears together with the card fields once they finish loading, instead of showing above an empty form. **Core SDK** * **Consistent Payment Method Preselection**\ Payment method preselection is now consistent between the checkout state and the UI across the expanded and collapsed lists: the selected method is always reflected in the list, and one method is preselected when the backend doesn't specify a preference. ## v1.9.5 *June 15, 2026* **Secure Fields** * **Fixed Card Field Console Error**\ The card form no longer throws an uncaught error when entering a card whose network does not require a card PIN. ## v1.9.4 *June 15, 2026* **Core SDK** * **Prepend the configured whitelabel base path to host-overridden asset, iframe and WebSocket URLs so the SDK stays under a proxy mounted at a sub-path (e.g. `.../orchestrator`) instead of dropping to the bare origin. The 3DS postMessage origin opts out.** **Revolut Pay** * **Revolut Pay Mobile Return Support**\ Revolut Pay now returns shoppers to the checkout reliably on mobile after the redirect or app-to-app handoff. ## v1.9.2 *June 11, 2026* **Core SDK** * **Stronger Phone and Document Validation**\ Phone and document number fields now block invalid characters as you type, and document numbers run checksum validation — enabled gradually via the real-time validation rollout. **Payment Actions** * **Checkout Completed Event For All Methods**\ The checkoutSdk\_completed event is now emitted for every payment method that completes through the shared payment-action router (card, Google Pay, APMs), matching the existing Apple Pay and PayPal behavior. It fires once per checkout. **Revolut Pay** * **Revolut Pay Support**\ Adds Revolut Pay as an external payment button. Supports both seamless and merchant-driven checkout flows, with a configurable button (variant, size, radius, action, and locale). **Card Payments** * **Fixed Slim Variant Card Form Styles**\ Fixed an issue in SDK 1.9 where the slim input variant rendered incorrectly in the card form and address fields: grouped border radius, focus and error border colors, and hidden inline error messages were not applied. ## v1.9.1 *June 3, 2026* **Checkout** * **When only one regular payment method is available, it is now automatically pre-selected and its radio button appears checked on render — regardless of whether the backend marks it as preferred.** * **In whitelabel mode (when `apiUrl` or `assetUrl` is set at `initialize()`), the data privacy / terms-and-conditions text is hidden, matching the "Secure by Yuno" badge behavior.** **Core SDK** * **QR codes for QR-based payment methods (like Nequi) now render with extra whitespace around the pattern, improving scan reliability on phones that auto-crop the camera view.** * **Yuno-hosted static assets (such as brand logos) now can be served via the proxy. Only Yuno hosts are rewritten, leaving external asset URLs untouched.** ## v1.9.0 *May 26, 2026* **White Label** * **Whitelabel Class Names and IDs Prefix Change**\ `Yuno` class names and IDs prefix changed to `sdk-payments`. For example, `yuno-checkout` becomes `sdk-payments-checkout`. * **Whitelabel-Neutral Public API**\ Public-facing CSS class names, DOM ids, and event/callback names have been renamed to neutral, whitelabel-friendly identifiers. Existing `window.Yuno`, the `yuno-sdk-ready` event, and `yuno*` callback aliases continue to work, so existing merchant integrations need no changes. `window.Yuno` deprecated in favor of `window.SdkPayments`. * **Custom API and Asset URLs**\ Added `options.apiUrl` and `options.assetUrl` initialization overrides so the SDK can point at partner-hosted backends, 3DS endpoints, secure-field iframes, and card-form assets instead of the default Yuno URLs. The override is also forwarded to the monitoring layer, mediator, and card-form iframes. * **Hide Secure Payment Badge on Custom Hosting**\ When `apiUrl` or `assetUrl` overrides are set, the `Secure Payment with Yuno` badge is automatically hidden in both the standard checkout and the Click to Pay flow. **Core SDK** * **More Resilient Asset Resolution**\ Guard the webpack public path when running under Vite, skip duplicate `/v` suffixes when the asset URL already includes one, and use the configured `apiUrl` directly as the API client base URL to avoid region-prefix corruption. ## v1.8.7 *July 9, 2026* **Card** * **Consistent installment dropdown format**\ The installment dropdown now renders every option with the same template (`Nx of {value} - Total {total}`) regardless of whether the option includes financial costs, fixing mixed layouts when a plan combines options with and without `financial_costs`. ## v1.8.1 *May 22, 2026* **Core SDK** * **Mongolian Language Support**\ Adds Mongolian (mn) as a supported locale for the web SDK checkout experience. * **Auto-Select Single Payment Method**\ When the checkout renders with exactly one regular (non-express) payment method available, that method is now auto-selected so the customer goes straight to the form. Express buttons (Apple Pay, Google Pay, PayPal) are no longer treated as a backend-preferred method that short-circuits this flow. * **Detailed Errors from generateOTT()**\ When `apiClientPayment().generateToken` (`generateOTT`) fails, the rejected error now contains the backend response body (with error codes and detail) instead of just the generic axios error. Merchants catching this call receive actionable error information. **Click to Pay** * **Deferred Installments in Click to Pay Golden Flow**\ Installment plans in the Click to Pay Golden Flow are now shown on a dedicated screen after the customer picks between Click to Pay and the standard card rail, instead of being fetched automatically while the PAN is typed. The card form stays mounted underneath so secure-field state is preserved between screens. ## v1.8.0 *May 14, 2026* **Apple Pay** * **Apple Pay Address Collection**\ Apple Pay payment sheet can now collect billing and shipping addresses when configured via `required_fields`. Default behavior is unchanged when not configured. * **Apple Pay BIN Available Pre-Payment**\ DPAN BIN is now available in the OTT before payment, enabling BIN-based promotions and discounts. Existing card BIN flow is unaffected. * **Improved Apple Pay Availability Detection**\ Apple Pay button now appears more accurately on supported devices, reducing cases where the button shows for users who cannot complete an Apple Pay payment. **Google Pay** * **Google Pay Address Collection**\ Google Pay payment sheet can now collect billing address, shipping address, and cardholder name when configured via `required_fields`. Address detail level adjusts automatically based on what is requested. * **Google Pay Contact Field Collection**\ Google Pay payment sheet can now collect customer email and phone number when configured via `contactFields`. Works in both standard and seamless external-button integrations. **Card Payments** * **Separate Billing and Shipping Sections**\ Card form now renders billing and shipping as distinct sections with their own headers and an optional `Address line 2` field. When both addresses are required, a `Billing address is the same as shipping` checkbox appears, enabled by default. * **Compact Card Form Layout**\ New slimmer card form layout with tighter spacing, grouped card details, and inline field-level error messages. Available across all SDK form variants. Behind a feature flag for A/B testing. * **Card Form Auto-Advance**\ Card form auto-advances focus once fields reach their expected length (PAN by detected scheme, expiry, CVV), reducing the number of taps to complete the form. Manual selection always takes precedence. Behind a feature flag, default off, for A/B testing. * **Real-Time Card Field Validation**\ Card form fields now validate on blur once the user has interacted with them, instead of only on Pay click. Errors clear immediately when the user corrects an invalid field. **Core SDK** * **Dynamic Enrollment Actions**\ Enrollment flow now supports server-driven dynamic UI components: image, OTP, PIN, and info screens, rendered based on the fields returned by the server. * **Smarter Currency Display**\ Currency now shows a symbol only for the 21 currencies with globally unique symbols (€, £, etc.). All others display the 3-letter ISO code (for example `COP 9.200.000`, `MXN 1.500,00`). USD is the only currency that owns the `$` symbol. * **Hide Yuno Secure Payment Badge**\ The `Secure Payment with Yuno` badge can now be hidden via Checkout Builder. When disabled, the badge is fully removed from the DOM in both the standard checkout and the Click to Pay flow. **Fraud & Risk** * **EBANX Device Session Reliability**\ Improved reliability of device ID propagation in payment requests, fixing Payment Link flows where it was occasionally dropped before reaching EBANX. ## v1.7.4 *May 26, 2026* **Core SDK** * **Reliable Document Number Validation**\ When the backend specifies a `validationFunction` for a document type that the SDK doesn't recognize, the field now falls back to regex validation instead of marking every value invalid. Prevents broken document inputs when a new validation function rolls out backend-first. ## v1.7.3 *May 11, 2026* **Fraud & Risk** * **Improved EBANX Device Session Handling**\ Improved EBANX device session recovery in supported fraud flows. ## v1.7.2 *May 11, 2026* **Core SDK** * **POST Redirect Support**\ Added support for payment providers that require `POST` redirects. * **Expanded Required Field Support**\ Added support for additional required payment data such as `shipping_address` in supported flows. **Secure Fields** * **Improved Session Handling**\ Improved Secure Fields behavior in session-based payment flows. **Card Payments** * **Improved Card Retry Flows**\ Enhanced retry behavior for card payments in supported checkout flows. ## v1.7.1 *May 11, 2026* **Core SDK** * **More Reliable Payment Status Updates**\ Improved payment status handling when real-time connection tracking is interrupted. **Payment Actions** * **Improved QR, Barcode, and Image Rendering**\ Improved rendering for payment steps that rely on images, QR codes, or barcodes. * **Improved OTP and PIN Flows**\ Refined OTP and PIN-based payment steps for a smoother authentication experience. **Google Pay** * **Improved Button Rendering**\ Improved Google Pay button rendering for a more consistent checkout experience. ## v1.7.0 *May 11, 2026* **Click to Pay** * **Card Type Filtering Support**\ Added support for card type restrictions in Click to Pay flows. * **Transaction Amount Support for Passkey Flows**\ Click to Pay initialization now includes transaction amount metadata for supported passkey flows. ## v1.6.22 *May 27, 2026* **Fraud & Risk** * **Cybersource Fraud Session ID from Provider**\ The Cybersource fraud device-fingerprinting session now uses the provider-supplied `session_id` when present, falling back to `checkoutSession` if the provider doesn't supply one. Aligns the fingerprint session ID with what the fraud provider expects, improving fingerprint match rates. ## v1.6.21 *May 26, 2026* **Core SDK** * **Reliable Document Number Validation**\ When the backend specifies a `validationFunction` for a document type that the SDK doesn't recognize, the field now falls back to regex validation instead of marking every value invalid. Prevents broken document inputs when a new validation function rolls out backend-first. ## v1.6.20 *May 13, 2026* **Card Payments** * **Card Form Top Error Banner**\ On payment retry, a banner appears at the top of the card form describing why the previous attempt failed. The banner scrolls into view and is highlighted if the customer tries to submit again without correcting the issue. Invalid-card-data errors and unknown response codes are now surfaced through this banner instead of per-field errors. ## v1.6.19 *May 8, 2026* **Click to Pay** * **Card form button alignment on desktop**\ Restored correct LTR alignment for the action button and the "Secure Payment by Yuno" badge in the Click to Pay card form (regression on v1.6.x; v1.5 and v1.7 were unaffected). RTL layout is preserved. ## v1.6.18 *May 7, 2026* **Card Payments** * **Card Number Length Validation**\ Card tokenization now waits for the BIN/IIN lookup to complete before submitting, so card numbers are validated against the correct scheme-specific minimum length. Previously, a short Luhn-valid PAN submitted before the BIN lookup settled could be sent to the provider and rejected; users now see an inline length error instead. ## v1.6.17 *May 6, 2026* **Apple Pay** * **More Accurate Cancellation Reasons**\ Apple Pay cancellations are now reported with a precise reason, distinguishing user dismissal (`CANCELLED_BY_USER`) from merchant-validation or provider failures (`CANCELLED_BY_PROVIDER`). Improves the accuracy of drop-off analytics and provider health signals; no integration changes required. ## v1.6.16 *April 16, 2026* **Core SDK** * **Cancel 3DS Challenge on Browser Back**\ Pressing the browser back button during a 3DS challenge now cancels the challenge cleanly. Merchants receive the cancellation via `yunoPaymentResult` with status `PENDING` / `CANCELLED_BY_USER`; no `yunoError` is emitted and the modal unmounts without leaving stale state. **Click to Pay** * **Action Button Order on Mobile**\ On mobile and tablet viewports, the Click to Pay action buttons in the card form have been reordered so the primary action sits below the secondary, improving the UX hierarchy. Desktop layout is unchanged. ## v1.6.8 *April 15, 2026* **Core SDK** * **unMountSdk() Helper**\ Introduced a new top-level `unMountSdk()` method for explicit SDK cleanup. Call it when removing the SDK from the page to avoid memory leaks. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} yuno.unmountSdk(); ``` * **Rollback Cancel Flow**\ Unified cancel flow events. The SDK now explicitly reports `CANCELED_BY_USER` in the `yunoPaymentResult` callback for all cancellation scenarios. * **Legacy Event Rollback**\ Legacy cancel-related events have been consolidated into the standard result flow. No new API changes required. * **Forter Token Listener**\ Added a listener for the `ftr:tokenReady` event to ensure reliable capture of the Forter session token. Previously the token could be missed on slow page loads. **Apple Pay** * **Metadata Support**\ The cancel flow now includes a `metadata` parameter with a `paymentCreated` boolean, letting merchants determine whether a payment object was created before cancellation. * **Contact Info Passthrough**\ The SDK now automatically collects and forwards the customer's email, phone, and name from `shippingContact`. No configuration required. **PayPal** * **No OTT Flow**\ Added support for a `REDIRECT` workflow that skips OTT creation, enabling PayPal payments without a prior server-side session. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} yuno.startSeamlessCheckout({ paypal: { workflow: 'REDIRECT', orderId: 'YOUR_PAYPAL_ORDER_ID', } }); ``` * **PayPal Button Modal**\ New `PaypalButtonModal` component that renders the PayPal button inside a modal overlay, useful for merchants using a custom checkout UI. ## v1.6.7 *March 31, 2026* **Card Payments** * **Card Password Field for Korean Cards**\ New secure field for the first 2 digits of the cardholder PIN required by Korean issuers. Available across standard card, step-by-step, and Click to Pay (new + enrolled) flows. Enable by passing `cardPinElementSelector` in `startCheckout` config; the field renders when enabled for the merchant. **Click to Pay** * **Passkey Activation with Multiple Card Providers**\ When multiple card providers are configured, the SDK now searches all of them for valid 3DS parameters instead of only the first. Passkey now activates correctly when the 3DS-capable provider is not listed first. **Core SDK** * **Hindi, Bengali, Malayalam, and Urdu Translations**\ Available via `language: 'hi' | 'bn' | 'ml' | 'ur'`. * **Merchant Installments via `onGetInstallments`**\ Merchants can supply their own installment options via the `onGetInstallments(cardBin)` callback; the SDK falls back to Yuno installments when the callback returns empty. A new `onInstallmentSelected` callback fires on both auto-selection and user picks across all card flows. Merchant-supplied installments are omitted from one-time-token creation since the merchant handles them server-side. * **`subStatus` in `yunoPaymentResult`**\ The callback now receives `subStatus` as a second argument: `yunoPaymentResult(status, subStatus?)`, giving finer-grained outcome information (notably on cancel flows). * **Bundle Size Reduction (-16%)**\ SWC `env.targets` configured to eliminate ES5 polyfills on modern browsers. **PayPal** * **PayPal Locale**\ SDK language is now passed as `locale` to the PayPal `loadScript` call so the PayPal UI matches the configured checkout language. ## v1.6.6 *March 26, 2026* **Apple Pay** * **`externalButtons` Customization**\ New configuration on `externalButtons` for per-wallet button customization (Apple Pay, Google Pay, PayPal). **Core SDK** * **WebSocket Race Condition in Redirect Flows**\ Resolved a race that could lose status updates. * **WebSocket Error Handling**\ Added error handling for WebSocket initialization to prevent unhandled failures in status polling. ## v1.6.5 *March 20, 2026* **Apple Pay** * **Unified Apple Pay Button**\ Legacy Apple Pay implementation was removed; the SDK now uses a single Apple Pay button consistently across standard checkout and `mountExternalButtons` integrations, driven by the SDK payment flow. * **Faster Apple Pay Button Render**\ Apple Pay SDK loading, amount lookup, and config fetch now run in parallel, with a styled placeholder shown until the real button is ready. * **Earlier Fraud Signal Collection**\ Fraud signals are collected during Apple Pay button initialization for broader coverage on wallet flows. **Google Pay** * **Google Pay Button Placeholder**\ A styled placeholder is shown while the Google Pay SDK loads, replacing the previous skeleton. **Enrollment** * **APM Enrollment Button Text**\ The enrollment confirmation button for APMs now reads "Continue" across Full, Lite, Seamless, and Render Mode flows. **Card Payments** * **Inline Payment Method Selection Error (Desktop)**\ Clicking "Pay" without selecting a payment method now shows an inline error message below the payment method list on desktop. Mobile continues to use the existing toast. **Payment Actions** * **Backend-Driven Warning Banner**\ Flexible payment instructions can now render an optional warning banner returned by the backend, enabling provider-specific notices such as the Punto Pago disclaimer. ## v1.6.4 *March 19, 2026* **Fraud & Risk** * **Riskified Integration**\ The Riskified script now loads with the correct shop and session identifiers, restoring reliable fraud signal collection when the shop domain is configured on the fraud provider. ## v1.6.3 *March 18, 2026* **Core SDK** * **Unified User-Cancel Flow**\ Wallet, APM, Click to Pay, 3DS modal and lite checkout cancellations now emit `yunoPaymentResult` with `PENDING` status and `CANCELLED_BY_USER` substatus, replacing the previous `ERROR CANCELED_BY_USER` event. Integrations that branched on the legacy error should switch to the substatus. * **Additional Load-Time Optimizations**\ Google Pay and Apple Pay scripts are now preloaded, and `startCheckout`/`startSeamlessCheckout` prefetch payment methods earlier. **Customer Fields** * **Document Type Options**\ Removed a redundant country filter that could hide valid document types in some locales. ## v1.6.1 *March 12, 2026* **Apple Pay** * **Billing Contact Collection**\ Apple Pay can now capture the cardholder's billing name and postal address from the Apple Pay sheet when enabled via merchant configuration. The cardholder name is forwarded in the payment payload on completion. * **Free Trial Support for Recurring Payments**\ Apple Pay now supports recurring billing with trial periods, configurable via merchant config (Apple Pay JS v14). **Card Payments** * **Network Selector**\ Dropdown across step-by-step payment, card unfolded, card modal, enrollment, and Click to Pay. Driven by server-side merchant configuration. **Fraud & Risk** * **Cielo CyberSource Fraud Provider**\ Cielo CyberSource added as a fraud provider, routed through the existing CyberSource integration. * **EBANX Device Fingerprint Provider**\ New device-fingerprinting provider with country-based initialization. Customer country is now propagated through the fraud pipeline. **Core SDK** * **Crash with External-Buttons-Only Sessions**\ Fixed a crash that occurred when only external buttons (e.g. Apple Pay) were configured without SDK-rendered payment methods. * **Enrolled Card Form Crash**\ Prevents a runtime crash when card metadata is missing while detecting Amex on enrolled cards. * **Sanitize Functions from Log Payloads**\ Functions in the merchant-provided initial state are stripped before debug log serialization, preventing serialization issues across checkout, seamless checkout, headless payment/enrollment, and status flows. ## v1.6.0 *March 20, 2026* * **Subresource Integrity Support**\ The SDK script tag now supports the `integrity` attribute for SRI-compliant loading, preventing unauthorized code injection. The `@yuno-payments/sdk-web` npm package exposes a `loadScript` method for SRI-compliant dynamic loading. ```html theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} ``` * **Arabic Language and RTL Layout**\ Added Arabic (`ar`) language support. The checkout UI automatically switches to a Right-to-Left layout when Arabic is selected — no extra configuration required. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await window.Yuno.initialize(publicApiKey); await yuno.startCheckout({ checkoutSession, elementSelector: '#root', countryCode: 'AE', language: 'ar', }); ``` * **Faster Initialization**\ Improved initialization performance for both Lite and Full SDKs, reducing time-to-interactive on first load. * **Detailed Error Codes**\ Configuration errors now surface more descriptive error codes, making it easier to diagnose integration issues during development. * **3DS Modal Centering**\ Fixed an issue where the 3DS challenge modal was not centered on mobile devices. The modal now correctly fills and centers within the viewport. ## v1.5.26 *May 27, 2026* **Card Payments** * **Compact Form Variant (1.5 backport)**\ Backports the slimmer card, customer, and billing-address form layout from 1.6.x onto the 1.5.x line. Opt-in via the `slimmerFormEnabled` feature flag — disabled by default, no behavior change for merchants who don't toggle it. ## v1.5.25 *May 26, 2026* **Core SDK** * **Reliable Document Number Validation**\ When the backend specifies a `validationFunction` for a document type that the SDK doesn't recognize, the field now falls back to regex validation instead of marking every value invalid. Prevents broken document inputs when a new validation function rolls out backend-first. ## v1.5.20 *April 7, 2026* **Apple Pay** * **Cancel Flow**\ When the customer aborts an Apple Pay session, the cancel error now carries a `metadata` object with `paymentCreated` and `ottCreated` booleans so merchants can tell how far the flow had progressed. If a payment is created after the user has cancelled, the SDK automatically abandons the checkout session to prevent payments getting stuck in `PENDING`. (Backport of the v1.6.8 fix to the 1.5.x line.) ## v1.5.19 *April 2, 2026* **Fraud & Risk** * **Forter token isolation**\ Tokens are now scoped per Forter `siteId` so concurrent or sequential checkout sessions no longer read a stale token from a previous provider/session. * **Forter beacon script**\ Consolidated to a single URL (`https://prod.y.uno/sdk-static-bundles-ms/v1/static/js/forter/forter.js`) with an updated SRI hash for both sandbox and production. Merchants with a strict CSP `script-src` allowlist should ensure `prod.y.uno` is permitted. ## v1.5.17 *April 1, 2026* **Core SDK** * **`sdkType` initialization option**\ New option on `Yuno.initialize()` for identifying integrations (plugins, embedded contexts) via the `x-sdk-type` request header for downstream attribution. **Fraud & Risk** * **Forter Token Capture**\ Token capture now uses a listener-based approach for reliable session capture across page lifecycles. ## v1.5.15 *March 19, 2026* **Payment Actions** * **Backend-Driven Warning Banner**\ Flexible payment-action screens (e.g. Punto Pago) can now render a server-driven banner (title + description) after the instruction steps. Configured server-side; no merchant code change required. ## v1.5.14 *March 19, 2026* **Core SDK** * **APM Enrollment Button Text**\ The enrollment confirmation button for APMs now reads "Continue" instead of "Save". **Fraud & Risk** * **Riskified Beacon Parameters**\ Missing query parameters added to the default beacon URL, restoring fraud signal collection. ## v1.5.11 *March 9, 2026* **Apple Pay** * **Billing Contact Collection**\ Apple Pay can now collect the cardholder's billing name and postal address from the Apple Pay sheet when enabled via merchant configuration. The cardholder name is forwarded in the payment payload. No SDK code change required by merchants. **Fraud & Risk** * **EBANX Device Session Collection**\ New EBANX fraud collector with automatic script mounting, retry, and unmount handling. * **Cielo CyberSource Fraud Provider**\ Added Cielo CyberSource as a supported fraud provider. * **Country-Aware Fraud Collection**\ Fraud signal collection now uses the customer's country across payment methods, lite flow, secure fields, PayPal, Google Pay, Apple Pay, and the headless API client, improving provider routing and accuracy. ## v1.5.8 *February 24, 2026* **Apple Pay** * **Wallet Domain URL**\ Apple Pay transactions now include the wallet domain URL. **Card Payments** * **Financial Cost in Enrolled Cards**\ Financial cost detail is shown for enrolled card payments. **Click to Pay** * **Financial Cost in C2P**\ Financial cost detail is shown for Click to Pay flows. **Google Pay** * **Third-Party Gateway Support**\ Google Pay can now route through third-party gateways (Adyen, Stripe, etc.) with the gateway and merchant ID supplied via a new SDK provider configuration. ## v1.5.5 *February 16, 2026* **Google Pay** * **Reload on Already-Open Sheet**\ Reloads if the Google Pay sheet is already open, preventing a stuck state. ## v1.5.4 *February 16, 2026* **Core SDK** * **Document Types by Country**\ New general-settings configuration for document types per country (server-side merchant config; no merchant code change). ## v1.5.0 *January 15, 2026* * **mountExternalButtons Method**\ New `mountExternalButtons(buttons)` method lets merchants render Google Pay and Apple Pay buttons in any custom location within their UI, providing full control over button placement and styling. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await window.Yuno.initialize(publicApiKey); await yuno.startCheckout({ checkoutSession, elementSelector: '#root', countryCode: 'US', language: 'en', }); await yuno.mountExternalButtons([ { paymentMethodType: 'APPLE_PAY', elementSelector: '#apple-pay', }, { paymentMethodType: 'GOOGLE_PAY', elementSelector: '#google-pay', }, ]); ``` * **Button Unmounting Methods**\ Added `unmountExternalButton(paymentMethodType)` to remove a single external wallet button and `unmountAllExternalButtons()` to remove all mounted wallet buttons at once. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} // Remove a single button yuno.unmountExternalButton('APPLE_PAY'); // Remove all buttons yuno.unmountAllExternalButtons(); ``` * **Wallet Buttons as Direct Buttons**\ Google Pay and Apple Pay now appear as direct action buttons instead of radio-button list items, providing a cleaner and more prominent placement in the checkout UI. * **PayPal Enrollment UX**\ The PayPal payment sheet now opens immediately after the customer selects PayPal for enrollment or payment, removing an extra confirmation step for a faster checkout experience. **Lite Web SDK** * **Lite SDK External Buttons Required**\ Google Pay and Apple Pay in the Lite Web SDK now require explicit mounting via `mountExternalButtons()`. Previously they rendered automatically as radio buttons. Lite SDK integrations must add a `mountExternalButtons` call — Full SDK integrations are not affected.\ [Migration guide →](/changelog/migration-guides/web/v1-4-to-v1-5) ## v1.4.0 *October 15, 2025* * **Card Payment Voucher Messages**\ Added voucher messaging for card payments, giving customers clear confirmation and transaction details immediately after a successful payment. * **Language Override for Loader**\ The Yuno loader now accepts a `language` property, allowing explicit UI language control independent of browser settings. Useful for multi-language environments. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} Yuno.initialize({ language: 'es', }); ``` * **Enhanced Click-to-Pay Rendering**\ Improved rendering support for Click-to-Pay (C2P) elements, streamlining the checkout experience for enrolled cards. **PayPal** * **PayPal Installments Enrollment**\ Customers can now enroll in PayPal installment plans directly through the PayPal payment flow, providing flexible payment options at checkout. * **PayPal External Button Redirect**\ PayPal can now be integrated via redirect flow with external buttons, giving merchants greater flexibility in building their payment UI. ## v1.3.0 *March 20, 2025* * **Smart Payment Method Grouping**\ When a customer has an enrolled payment method, all other available methods are grouped under a collapsible "More options" dropdown. The enrolled method is prominently displayed by default. * **European and Asian Language Support**\ Added support for German (`de`), Dutch (`nl`), Swedish (`sv`), French (`fr`), Italian (`it`), Japanese (`ja`), and Korean (`ko`). Pass the corresponding code via the `language` initialization parameter. * **General Bug Fixes**\ Resolved various stability issues to improve reliability across payment flows. * **Enhanced Styling and Branding**\ Improved visual consistency and expanded customization options across checkout components. ## v1.2.0 *February 20, 2025* * **Optional Initialization Options**\ Added an optional `options` parameter to `Yuno.initialize` for teams with advanced use cases such as custom session handling or tracking requirements. * **Extended continuePayment Parameters**\ `continuePayment` now accepts `checkoutSession`, `showPaymentStatus`, `yunoPaymentResult`, `yunoError`, `countryCode`, and `language`, allowing configuration overrides during payment continuation without restarting the checkout. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} yuno.continuePayment({ checkoutSession: '438413b7-4921-41e4-b8f3-28a5a0141638', showPaymentStatus: true, yunoPaymentResult: (status) => { console.log('Payment completed with status:', status); }, yunoError: (message, data) => { console.error('Payment error:', message, data); }, countryCode: 'US', language: 'en', }); ``` * **21+ Language Support**\ Expanded language coverage to over 21 locales including Chinese Simplified (`zh-CN`), Chinese Traditional (`zh-TW`), Vietnamese (`vi`), Russian (`ru`), Turkish (`tr`), Polish (`pl`), and more. Pass the language code to the `language` parameter in `startCheckout`. **Lite Web SDK** * **Lite SDK continuePayment Overrides**\ The Lite SDK `continuePayment` method now accepts the same configuration overrides available in the Full SDK, enabling dynamic session, language, and callback changes during payment continuation. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} if (paymentResponse.sdk_action_required) { await yuno.continuePayment({ countryCode: 'DE', language: 'de', showPaymentStatus: false, yunoPaymentResult: (status) => { console.log('Payment continued with result:', status); }, yunoError: (message, data) => { console.error('Payment error:', message, data); }, }); } ``` * **Lite SDK Expanded Language Support**\ Lite SDK v1.2 adds support for 18+ locales (up from 7 in v1.1), including European and Asian language codes such as `de`, `fr`, `it`, `ja`, `ko`, `ru`, and `zh-CN`. ## v1.1.0 *January 20, 2025* * **Async SDK Methods**\ The `initialize()`, `mountCheckout()`, and `startCheckout()` methods now return Promises. Add `await` or `.then()` to each call — synchronous usage will no longer work.\ [Migration guide →](/changelog/migration-guides/web/v1-0-to-v1-1) ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await Yuno.initialize(PUBLIC_API_KEY); await yuno.startCheckout(config); ``` * **continuePayment Method**\ Introduced `continuePayment()` for handling complex payment flows. Call it when the API response includes `sdk_action_required: true` — the SDK then automatically renders 3DS challenges, external wallet steps, or redirects as needed. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await Yuno.initialize(PUBLIC_API_KEY); await yuno.startCheckout(config); if (paymentResponse.sdk_action_required) { const result = await yuno.continuePayment(); } ``` * **Simplified 3DS Integration**\ 3DS data collection and setup are now bundled into the payment creation step. Remove any standalone 3DS setup service calls — implement `continuePayment()` and `yunoPaymentResult()` callbacks instead. * **Boleto Bancário Support**\ Boleto Bancário is now available for merchants operating in Brazil, expanding local payment options for customers who prefer offline payment methods. * **Hybrid Cards Default to Credit**\ Brazilian hybrid cards are now processed as credit by default, improving authorization rates for Brazil-based merchants. * **Airwallex Security Integration**\ Integrated Airwallex as an additional security layer for web payments, enhancing fraud protection without requiring extra configuration. * **Forter Fraud Prevention**\ Integrated Forter's fraud prevention technology. The SDK automatically collects device signals; no separate setup is required. * **Checkout.com 3DS Support**\ Added support for Checkout.com as a 3DS provider. The SDK renders the authentication page automatically when the transaction provider is `checkout3ds`. * **Unlimit 3DS Support**\ Introduced 3DS authentication support for Unlimit payments, enhancing fraud prevention for merchants using the Unlimit provider. * **Click-to-Pay Enhancements**\ Terms & Conditions and card logos now update dynamically based on the selected card. C2P options are hidden for unsupported cards. A phone number field has been added for C2P registration. Compliance settings for `privacy` and `tnc` are forwarded with each card. * **Inline Card Input**\ Customers can now enter card details directly beneath the Card option without navigating to a separate screen. Fields persist when switching payment methods, and the flow is fully compatible with installments and the card selector. **Lite Web SDK** * **Lite SDK Initial Release**\ Launched the Lite Web SDK (v1.1) — a streamlined integration offering essential payment methods, async `initialize()` support, and core callbacks (`yunoPaymentResult`, `yunoError`) with reduced setup complexity. ```js theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} const yuno = await Yuno.initialize(PUBLIC_API_KEY); yuno.startCheckout({ checkoutSession: '438413b7-4921-41e4-b8f3-28a5a0141638', elementSelector: '#root', countryCode: 'FR', language: 'fr', showLoading: true, issuersFormEnable: true, showPaymentStatus: true, card: { isCreditCardProcessingOnly: true, }, onLoading: (args) => { console.log(args); }, yunoPaymentResult: (status) => { console.log('Payment result:', status); }, yunoError: (message, data) => { console.error('Payment error:', message, data); }, }); ``` ## v1.0.3 *May 26, 2026* **Core SDK** * **Resilient Payment Status Updates**\ If WebSocket initialization fails (network blip, blocked port, browser restriction), the SDK now logs the error and falls back to HTTP polling for payment status instead of blocking the checkout. No integration change required. ## v1.0.0 *January 1, 2025* **Core SDK** * **Initial SDK Release**\ First stable release of the Yuno Web SDK. Provides four integration variants: Full Checkout SDK, Lite Checkout SDK, Seamless SDK, and Headless SDK — covering a full range of UI customization needs. * **Core Payment Methods**\ Out-of-the-box support for credit and debit cards, digital wallets (PayPal, Apple Pay, Google Pay), bank transfers, direct debits, and regional local payment methods across multiple currencies and countries. * **Three Integration Modes**\ SDK can be loaded via an HTML ` ``` If the provider returns an **empty** `collect_url` and `token` (for example `CHECKOUT_COM_3DS` above), there is no collection step. Skip it and go straight to creating the payment. #### Type MERCHANT\_PROVIDED The merchant sends all the required data themselves (`browser_info` and `device_fingerprints`), so no device-data collection step is performed. Use `device_fingerprints` only when a 3DS provider that collects this data on its own (i.e. does not use the `collect_url`) hands you the fingerprint `id`. Forward that `id` here. The `provider_id` must match the 3DS provider configured on the connection. **Request** ```bash theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} curl --location 'https://api-staging.y.uno/v1/three-d-secure/setups' \ --header 'X-idempotency-key: idempotency-key' \ --header 'public-api-key: api-key' \ --header 'private-secret-key: secret-key' \ --header 'Content-Type: application/json' \ --data '{ "account_id": "account_id", "type": "MERCHANT_PROVIDED", "card": { "holder_name": "TEST CUSTOMER", "number": "4556557955726624", "expiration_month": 12, "expiration_year": 26, "security_code": "123" }, "browser_info": { "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "color_depth": "24", "screen_height": "1080", "screen_width": "1920", "language": "es-CO", "java_enabled": false, "javascript_enabled": true, "browser_time_difference": "300", "platform": "WEB" }, "device_fingerprints": [ { "id": "3dae048e-b95e-47c6-8064-ea7f1aa16e90", "provider_id": "NETCETERA_3DS" } ], "metadata": [ { "key": "3ds_connection", "value": "standard" } ] }' ``` **Response** ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "three_d_secure_setup_id": "59192489-3713-4d1b-894b-ac15ac5b6f6f", "account_id": "account_id", "type": "MERCHANT_PROVIDED", "browser_info": { "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "color_depth": "24", "screen_height": "1080", "screen_width": "1920", "language": "es-CO", "javascript_enabled": true, "java_enabled": false, "browser_time_difference": "300", "platform": "WEB" }, "device_fingerprints": [ { "provider_id": "NETCETERA_3DS", "id": "3dae048e-b95e-47c6-8064-ea7f1aa16e90" } ] } ``` ### 2. Create the payment Create the payment using the `three_d_secure_setup_id` generated in the previous step. Since the route resolves only to the Yuno 3DS connection (no payment provider), only the authentication runs and the 3DS result is returned. No authorization takes place. **Payment method:** because this is a standalone 3DS authentication flow, the card must already be available to it. Either send the `card_data` in the request, or reference a payment method that was **enrolled (vaulted) beforehand**. Do **not** send `vault_on_success: true`: this flow does not support it. If you used `metadata` in the 3DS Setup to select a specific connection, you **must** send the **same** `metadata` here. Otherwise the payment may be routed to a different 3DS Standalone connection than the Setup. **Request** ```bash theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} curl --location 'https://api-staging.y.uno/v1/payments' \ --header 'X-idempotency-key: idempotency-key' \ --header 'public-api-key: api-key' \ --header 'private-secret-key: secret-key' \ --header 'Content-Type: application/json' \ --data '{ "account_id": "account-code", "description": "3DS", "country": "CO", "merchant_order_id": "order_id", "merchant_reference": "merchant_reference", "workflow": "DIRECT", "callback_url": "https://www.example.com", "amount": { "currency": "COP", "value": "27500" }, "metadata": [ { "key": "3ds_connection", "value": "standard" } ], "customer_payer": { "id": "customer_id" }, "payment_method": { "type": "CARD", "detail": { "card": { "three_d_secure": { "three_d_secure_setup_id": "59192489-3713-4d1b-894b-ac15ac5b6f6f" }, "card_data": { "holder_name": "TEST CUSTOMER", "number": "4916994064252017", "expiration_month": 12, "expiration_year": 26, "security_code": "123" } } } } }' ``` **Workflow:** a **frictionless** / **data-only** authentication resolves inline (the examples ran with `workflow: DIRECT`) and the result comes back on the payment response. A **challenge** needs the cardholder to act, so the payment returns `PENDING` with a `redirect_url` and `checkout.sdk_action_required: true`. Handle it with a redirect-capable workflow (`REDIRECT`) or the Yuno SDK (see [Authentication outcomes → Challenge](#challenge)). The payment's top-level `status` / `sub_status` tell you the outcome, and the 3DS result lives in `payment_method.payment_method_detail.card.three_d_secure`: * **Frictionless / Data Only** → `status: SUCCEEDED`, `sub_status: THREE_D_SECURE_VERIFIED`. * **Challenge** → `status: PENDING`, `sub_status: WAITING_ADDITIONAL_STEP`, with `checkout.sdk_action_required: true` and a `redirect_url` (resolves later; see [Webhook notification](#webhook-notification)). * **Failed / rejected authentication** → `status: DECLINED`. A standalone payment ultimately resolves to either `SUCCEEDED` / `THREE_D_SECURE_VERIFIED` (authentication completed) or `DECLINED` (authentication failed or rejected). The transaction-level status and 3DS response codes follow the standard Yuno reference: [Transaction statuses and response codes](/reference/payments/status-and-response-codes/transaction). Example codes include `SUCCEEDED_THREE_D_SECURE`, `CHALLENGE_REQUIRED`, `AUTHENTICATION_FAILED_THREE_D_SECURE`, and `REJECTED_THREE_D_SECURE_REQUIRED`. ## Authentication outcomes ### Frictionless `three_d_secure` object (inside the card detail): ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "05", "cryptogram": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=", "transaction_id": "7f5e8c1a-5c98-411e-b54b-dbff770ea045", "directory_server_transaction_id": "fbaa20f0-09c4-48bd-b0fd-01fdbf9188cf", "pares_status": "Y", "acs_id": "ab4a9485-afdb-4003-a619-3aaeea0670d7" } ``` ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "id": "7f524e10-534c-4a3f-aad8-14128156a958", "account_id": "5d8960b3-ca3c-4b8b-9891-0c190d4dae1c", "description": "3DS", "country": "CO", "status": "SUCCEEDED", "sub_status": "THREE_D_SECURE_VERIFIED", "merchant_order_id": "order-833aaade-323d-40c2-9f2c-49f5964bd055", "created_at": "2026-06-26T23:43:09.385435Z", "updated_at": "2026-06-26T23:43:10.424600Z", "amount": { "captured": 0.00, "currency": "COP", "refunded": 0.00, "value": 27500.00 }, "checkout": { "session": "", "sdk_action_required": false }, "payment_method": { "type": "CARD", "payment_method_detail": { "card": { "verify": false, "capture": true, "installments": 1, "card_data": { "holder_name": "TEST CUSTOMER", "iin": "45565579", "lfd": "6624", "number_length": 16, "brand": "VISA", "scheme": "VISA", "issuer_name": "BANCO BILBAO VIZCAYA ARGENTARIA BBVA", "country_code": "ES", "category": "GOLD", "type": "CREDIT", "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "05", "cryptogram": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=", "transaction_id": "7f5e8c1a-5c98-411e-b54b-dbff770ea045", "directory_server_transaction_id": "fbaa20f0-09c4-48bd-b0fd-01fdbf9188cf", "pares_status": "Y", "acs_id": "ab4a9485-afdb-4003-a619-3aaeea0670d7" }, "fingerprint": "85749aa9-c233-4e72-99b9-cbc1065500b6", "expiration_month": 12, "expiration_year": 26 } } } }, "transactions": { "id": "6036a7d1-c3f2-4817-a73a-4402c24ea070", "type": "THREE_D_SECURE", "status": "SUCCEEDED", "category": "CARD", "amount": 27500.00, "provider_id": "NETCETERA_3DS", "response_code": "SUCCEEDED_THREE_D_SECURE", "response_message": "3DS validation successful", "merchant_reference": "merchant-17912e48-74b9-4435-996a-2fc1f44e1468" }, "callback_url": "https://www.example.com", "workflow": "DIRECT", "metadata": [ { "key": "3ds_connection", "value": "standard" } ], "simplified_mode": false } ``` **Flow summary:** 1. Authentication request sent to the ACS. 2. The ACS authenticates by risk analysis, with no user interaction. 3. Returns full data (cryptogram, ECI, dsTransID, version) with `pares_status = Y`; the payment is `SUCCEEDED` / `THREE_D_SECURE_VERIFIED`. 4. The result is available on the payment response. Liability shift = **yes**. ### Data Only `three_d_secure` object (inside the card detail): ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "04", "cryptogram": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=", "transaction_id": "a6f1faa7-2690-4d57-a589-311a3a62dedf", "directory_server_transaction_id": "fcf62fd5-4ff7-429c-9882-2dadf92f7ee3", "pares_status": "I", "acs_id": "9caec967-14e2-4eed-bc35-3fa231c60c14" } ``` ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "id": "37372cdc-415d-46ad-95af-96b9de106ef1", "account_id": "5d8960b3-ca3c-4b8b-9891-0c190d4dae1c", "description": "3DS", "country": "CO", "status": "SUCCEEDED", "sub_status": "THREE_D_SECURE_VERIFIED", "merchant_order_id": "order-b3cb9c62-4c9c-4e48-89fa-f6bb09725c9d", "created_at": "2026-06-26T23:45:21.558465Z", "updated_at": "2026-06-26T23:45:22.373691Z", "amount": { "captured": 0.00, "currency": "COP", "refunded": 0.00, "value": 27500.00 }, "checkout": { "session": "", "sdk_action_required": false }, "payment_method": { "type": "CARD", "payment_method_detail": { "card": { "verify": false, "capture": true, "installments": 1, "card_data": { "holder_name": "TEST CUSTOMER", "iin": "49169940", "lfd": "2017", "number_length": 16, "brand": "VISA", "scheme": "VISA", "issuer_name": "PRIVATE OJSC BANK ASIA ALLIANCE BANK", "country_code": "UZ", "category": "CLASSIC", "type": "DEBIT", "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "04", "cryptogram": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=", "transaction_id": "a6f1faa7-2690-4d57-a589-311a3a62dedf", "directory_server_transaction_id": "fcf62fd5-4ff7-429c-9882-2dadf92f7ee3", "pares_status": "I", "acs_id": "9caec967-14e2-4eed-bc35-3fa231c60c14" }, "fingerprint": "b966eb1f-aea6-4d66-8532-0b76cdf9dc72", "expiration_month": 12, "expiration_year": 26 } } } }, "transactions": { "id": "85d030b5-3d34-4fdb-bb4f-a6dfcad243bb", "type": "THREE_D_SECURE", "status": "SUCCEEDED", "category": "CARD", "amount": 27500.00, "provider_id": "NETCETERA_3DS", "response_code": "SUCCEEDED_THREE_D_SECURE", "response_message": "3DS validation successful", "merchant_reference": "merchant-d2d686aa-d441-49f1-9b66-2608473b848d" }, "callback_url": "https://www.example.com", "workflow": "DIRECT", "metadata": [ { "key": "3ds_connection", "value": "standard" } ], "simplified_mode": false } ``` **Flow summary:** 1. Only browser/device data is shared with the issuer to feed their risk models: no real authentication occurs. 2. The flow continues like frictionless and returns a result (`SUCCEEDED` / `THREE_D_SECURE_VERIFIED`, `pares_status = I`). 3. Liability shift = **NO**: the merchant retains fraud liability. Typically ECI 04. ### Challenge The payment comes back as `PENDING` with a `redirect_url` and `checkout.sdk_action_required: true`. At this point the `three_d_secure` object carries the challenge data (`pares_status: C`, empty ECI, and a `cryptogram` that holds the encoded challenge request): ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "", "cryptogram": "eyJhY3NUcmFuc0lEIjoiZTVmMDIzZDItMjlhNy00ODRlLWFhODgtMDlmYjdlOTRhODFmIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1IiwibWVzc2FnZVR5cGUiOiJDUmVxIiwibWVzc2FnZVZlcnNpb24iOiIyLjMuMSIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDk5NGZmNGUtZWFkZC00MzFmLWJiMjEtY2MwMjY5YWZiMTJlIn0", "transaction_id": "4994ff4e-eadd-431f-bb21-cc0269afb12e", "directory_server_transaction_id": "d0a1890a-1e38-4c1c-9e05-e2019a04e772", "pares_status": "C", "acs_id": "e5f023d2-29a7-484e-aa88-09fb7e94a81f" } ``` ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "id": "1b5de250-2e52-4622-9c21-a30c70804d9a", "account_id": "5d8960b3-ca3c-4b8b-9891-0c190d4dae1c", "description": "3DS", "country": "CO", "status": "PENDING", "sub_status": "WAITING_ADDITIONAL_STEP", "merchant_order_id": "order-87af5f63-6679-4a3b-b436-3a1c9b72c823", "created_at": "2026-06-26T23:47:51.448941Z", "updated_at": "2026-06-26T23:47:52.397292Z", "amount": { "captured": 0.00, "currency": "COP", "refunded": 0.00, "value": 27500.00 }, "checkout": { "session": "39d9a15c-0ef0-4b10-b0bb-b64090b82f53", "sdk_action_required": true }, "payment_method": { "type": "CARD", "payment_method_detail": { "card": { "verify": false, "capture": true, "installments": 1, "redirect_url": "https://checkout.sandbox.y.uno/payment?session=2e42a863-54e7-4607-8391-e504a2166b3e&3ds=true", "card_data": { "holder_name": "TEST CUSTOMER", "iin": "49169940", "lfd": "2017", "number_length": 16, "brand": "VISA", "scheme": "VISA", "issuer_name": "PRIVATE OJSC BANK ASIA ALLIANCE BANK", "country_code": "UZ", "category": "CLASSIC", "type": "DEBIT", "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "", "cryptogram": "eyJhY3NUcmFuc0lEIjoiZTVmMDIzZDItMjlhNy00ODRlLWFhODgtMDlmYjdlOTRhODFmIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1IiwibWVzc2FnZVR5cGUiOiJDUmVxIiwibWVzc2FnZVZlcnNpb24iOiIyLjMuMSIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiNDk5NGZmNGUtZWFkZC00MzFmLWJiMjEtY2MwMjY5YWZiMTJlIn0", "transaction_id": "4994ff4e-eadd-431f-bb21-cc0269afb12e", "directory_server_transaction_id": "d0a1890a-1e38-4c1c-9e05-e2019a04e772", "pares_status": "C", "acs_id": "e5f023d2-29a7-484e-aa88-09fb7e94a81f" }, "fingerprint": "b966eb1f-aea6-4d66-8532-0b76cdf9dc72", "expiration_month": 12, "expiration_year": 26 } } } }, "transactions": { "id": "01aa5d77-1c91-4d95-9b5d-fbf1c7e863e2", "type": "THREE_D_SECURE", "status": "PENDING", "category": "CARD", "amount": 27500.00, "provider_id": "NETCETERA_3DS", "response_code": "CHALLENGE_REQUIRED", "response_message": "Transaction waiting for the challenge completion", "merchant_reference": "merchant-b2ceeae3-b3bb-4de5-b7d3-51ba87179781" }, "callback_url": "https://www.example.com", "workflow": "REDIRECT", "metadata": [ { "key": "3ds_connection", "value": "standard" } ], "simplified_mode": false } ``` Once the cardholder completes the challenge, the **final** result is delivered through the payment webhook (see [Webhook notification](#webhook-notification) below). On success, the payment shows `status: SUCCEEDED` / `THREE_D_SECURE_VERIFIED`, with a populated `electronic_commerce_indicator` and `cryptogram` / CAVV, `pares_status: Y`, and `has_challenge: true`. If the challenge fails, the payment shows `status: DECLINED`. **Flow summary:** 1. The payment response comes back as `PENDING` / `WAITING_ADDITIONAL_STEP` (`response_code: CHALLENGE_REQUIRED`), with `checkout.sdk_action_required: true` and a `redirect_url`. 2. The cardholder must complete the issuer challenge: * **With the Yuno SDK:** the SDK renders the challenge automatically. * **With a redirect-capable workflow (`REDIRECT`):** redirect the cardholder to the `redirect_url` returned in the payment response so they can complete the challenge. 3. The cardholder completes the challenge (OTP, biometrics, Out-of-Band, Decoupled, Passkeys/FIDO-SPC). It is asynchronous. 4. When finished, the cardholder is returned to your `callback_url`. The final authentication result is delivered through the payment webhook (`payment.purchase`), or read it via `GET /v1/payments/{id}`. 5. On success (`pares_status = Y`) the payment is `SUCCEEDED` / `THREE_D_SECURE_VERIFIED` and liability shift = **yes**. If the challenge fails, the payment is `DECLINED`. Until the result arrives, the merchant sees the payment as `PENDING`. ### Failed / rejected 1. The ACS returns a non-authenticated result (`pares_status N` / `R`) or the authentication is rejected. 2. The payment resolves to `DECLINED`; the transaction carries a failure response code such as `AUTHENTICATION_FAILED_THREE_D_SECURE` or `REJECTED_THREE_D_SECURE_REQUIRED`. 3. No liability shift: there is no successful authentication. ## Receiving the result For **frictionless** and **data-only**, the `three_d_secure` result is available on the payment response immediately (`status: SUCCEEDED`). For a **challenge**, the result is delivered asynchronously once the cardholder finishes (see [Webhook notification](#webhook-notification)). Alternatively, poll `GET /v1/payments/{id}` to read the final `three_d_secure` result. ## Webhook notification The authentication result is delivered through the standard Yuno payment notification: the **same webhook you already use for payment status updates**. There is no separate 3DS-specific webhook. The event is a `payment` notification with `type_event: "payment.purchase"`. The payment is under `data.payment`, and the 3DS result is in `data.payment.transactions.payment_method.payment_method_detail.card.three_d_secure`. For a **declined** authentication the same webhook (`payment.purchase`) is delivered; only the status changes. The payment is `DECLINED` and the transaction carries a failure response code such as `AUTHENTICATION_FAILED_THREE_D_SECURE` or `REJECTED_THREE_D_SECURE_REQUIRED`. **Example: successful authentication (after a completed challenge)** ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "type": "payment", "type_event": "payment.purchase", "account_id": "5d8960b3-ca3c-4b8b-9891-0c190d4dae1c", "retry": 0, "version": 2, "data": { "payment": { "id": "b5f22a56-285f-4ea5-a26c-0651a53c0771", "account_id": "5d8960b3-ca3c-4b8b-9891-0c190d4dae1c", "description": "3DS", "country": "CO", "status": "SUCCEEDED", "sub_status": "THREE_D_SECURE_VERIFIED", "merchant_order_id": "order-781223d2-4ade-436b-9ac1-a7f675ae0339", "created_at": "2026-06-26T23:50:39.456437Z", "updated_at": "2026-06-26T23:50:59.882628Z", "amount": { "currency": "COP", "value": 27500, "refunded": 0, "captured": 0 }, "checkout": { "session": "1ae63f1a-d587-4ee3-8fe1-7871e4dbd39f", "sdk_action_required": true }, "transactions": { "id": "4aaad7e2-95c9-4499-af1d-7d8147c29a61", "type": "THREE_D_SECURE", "status": "SUCCEEDED", "category": "CARD", "amount": 27500, "provider_id": "NETCETERA_3DS", "response_code": "SUCCEEDED_THREE_D_SECURE", "response_message": "3DS validation successful", "merchant_reference": "merchant-14b2aa13-ee69-41d5-9d6c-48a2e0bde1ee", "payment_method": { "type": "CARD", "payment_method_detail": { "card": { "verify": false, "capture": true, "installments": 1, "card_data": { "holder_name": "TEST CUSTOMER", "iin": "49169940", "lfd": "2017", "number_length": 16, "brand": "VISA", "scheme": "VISA", "issuer_name": "PRIVATE OJSC BANK ASIA ALLIANCE BANK", "country_code": "UZ", "category": "CLASSIC", "type": "DEBIT", "three_d_secure": { "version": "2.3.1", "electronic_commerce_indicator": "02", "cryptogram": "JAmi21makAifmwqo2120cjq1AAA=", "transaction_id": "6cf8f7dd-0d15-40f1-a520-55e89e048942", "directory_server_transaction_id": "b24df687-0a2d-43be-b555-82aef699dfbc", "liability_shift": null, "authentication_created_at": null, "has_challenge": true, "authentication_id": null, "pares_status": "Y", "acs_id": "afa24c2f-fb84-4d33-8399-74e60a1e0380", "strong_customer_authentication_exemptions": null, "cavv_algorithm": null, "ds_risk_score": null }, "fingerprint": "b966eb1f-aea6-4d66-8532-0b76cdf9dc72", "expiration_month": 12, "expiration_year": 26 } } } }, "connection_data": { "id": "636226c6-a02b-4ef1-8925-9ec4a499fd59", "name": "Yuno 3DS Standalone" } }, "callback_url": "https://www.example.com", "workflow": "REDIRECT", "metadata": [ { "key": "3ds_connection", "value": "standard" } ] } } } ``` ## Response fields | Field | Meaning | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `version` | The 3D Secure protocol version used for the authentication (e.g. 2.1.0 / 2.2.0 / 2.3.1). Newer versions enable additional challenge methods (OOB, Passkeys/FIDO, etc.). | | `electronic_commerce_indicator` (ECI) | Indicates the authentication result and who bears fraud liability. Visa: 05 authenticated / 06 attempted / 07 not authenticated. Mastercard: 02 authenticated / 01 attempted / 00 not authenticated. Empty while a challenge is still pending. | | `cryptogram` | The CAVV/AAV: cryptographic proof generated by the issuer that authentication took place. Unique per transaction; sent to the acquirer in the authorization to validate the 3DS. While a challenge is pending, this field carries the encoded challenge request instead. | | `transaction_id` | The 3DS Server Transaction ID (`threeDSServerTransID`): identifier of the 3DS transaction assigned by the 3DS Server in 3DS2. Correlates the AReq/ARes messages. (This is the 3DS2 value; the legacy 3DS1 "XID" is a different field.) | | `directory_server_transaction_id` (dsTransID) | Unique transaction identifier assigned by the Directory Server (Visa/Mastercard) in 3DS2. A mandatory value that must travel in the authorization alongside the cryptogram. | | `pares_status` | Authentication result (EMVCo transStatus): Y authenticated, N failed, A attempted, U unavailable, R rejected, C challenge required, I data only. | | `acs_id` | Identifier of the issuer's ACS (Access Control Server) that processed the authentication. Used for reference/traceability to the ACS that responded. | | `has_challenge` | Whether the authentication went through a challenge (`true`) or was frictionless / data-only (`false`). Present in the webhook payload. | | `liability_shift` | Boolean summary of the liability outcomes described above: `true` when fraud liability shifted to the issuer, `false` when the merchant retains it. Can also be `null`, including in some successful-authentication cases — if you see `null` unexpectedly and rely on this field for chargeback handling, contact Yuno support. | ## Testing (sandbox) The 3DS sandbox uses specific test cards to force each outcome, and the cards depend on the 3DS provider configured on the connection. ### Netcetera (default) Holder `TEST CUSTOMER`, expiry `12/26`, CVV `123`: | Card number | Outcome | | :----------------- | :-------------------- | | `4556557955726624` | Frictionless | | `4916994064252017` | Challenge / Data Only | ### Cybersource Holder `John Doe`, expiry `01/26`, CVV `123`: | Card number | Outcome | | :----------------- | :----------- | | `4000000000001000` | Frictionless | | `4000000000001091` | Challenge | ### Checkout.com | Card number | Outcome | | :----------------- | :----------- | | `4485040371536584` | Frictionless | | `4242424242424242` | Challenge | For a challenge in the sandbox, complete it with the password `Checkout1!`. See the Checkout.com 3DS test cards documentation for expiry/CVV and additional cards. # Cancel and Capture Flow Source: https://docs.y.uno/docs/payment-features/Cancel-and-capture-flow Configure real-time, manual, or delayed capture and cancel settings for authorized card payments This guide outlines all available approaches for capture and cancel operations and explains how to interact with our APIs for each scenario. ## In this guide * [**Capture modes**](#capture-modes) * [Real-time capture](#real-time-capture) * [Manual capture](#manual-capture) * [Delayed capture](#delayed-capture) * [**Cancel modes**](#cancel-modes) * [Manual cancel](#manual-cancel) * [Delayed cancel](#delayed-cancel) * [**Configuration requirements**](#configuration-requirements) * [**Example requests**](#example-requests) * [Example 1: Real-time capture](#example-1-real-time-capture) * [Example 2: Manual capture only](#example-2-manual-capture-only) * [Example 3: Delayed capture](#example-3-delayed-capture) * [Example 4: Delayed cancel](#example-4-delayed-cancel) * [Example 5: Combined delayed capture and cancel](#example-5-combined-delayed-capture-and-cancel-with-enhanced-validation) * [**When to use each mode**](#when-to-use-each-mode) * [**Field reference**](#field-reference) ## Capture modes Yuno provides three options for capturing payments, determined by the `capture` field and optional `delayed_capture_settings` configuration found in the [create payment API](/reference/create-payment). The actual feature availability or specific implementation details may vary depending on which payment provider you're routing your payments through. ### Real-time capture This mode processes the payment and transfers the funds without any delay, effectively combining authorization and capture into a single **purchase** operation. When `payment_method.detail.card.capture` is set to `true`, the transaction is executed as a purchase, which means the authorization and capture happen simultaneously. Depending on the payment provider's API, Yuno may execute this as one direct purchase transaction or as an authorization immediately followed by a capture call. ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "payment_method": { "detail": { "card": { "capture": true, "card_data": { // card details } } } } } ``` ### Manual capture With this configuration, Yuno won't capture the payment until you call the [capture API](/reference/capture-authorization) or manually capture it in your [Yuno dashboard](https://dashboard.y.uno/). Set `capture: false` to authorize the payment without capturing it. Manual captures provide maximum flexibility since they give you full control of when the capture is performed. However, it's important to capture as soon as possible since payment providers enforce time limits on how long authorizations can remain uncaptured, and these limits vary by provider and region. ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "payment_method": { "detail": { "card": { "capture": false, "card_data": { // card details } } } } } ``` **Capturing Different Amounts** If you need to capture a different amount than originally authorized, you must use manual capture. The real-time and delayed capture modes will always capture the initially authorized amount. ### Delayed capture Configure `capture: false` along with `delayed_capture_settings` to schedule the capture of the payment for a later time, specified in the `delay` field. **Full Amount Captures Only** Delayed capture only applies when capturing the **full amount** of the authorization. If you need to capture a partial amount, you must use [manual capture](/docs/capture-payments) instead. **`simplified_mode`** Setting `simplified_mode` to `true` will make Yuno retry the capture operation in case an error occurs during the scheduled capture attempt. ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "payment_method": { "detail": { "card": { "capture": false, "delayed_capture_settings": { "delay": "P7D", "simplified_mode": false }, "card_data": { // card details } } } } } ``` The `delay` field is required when using delayed capture operations and must follow the ISO 8601 standard. For example: * `"PT3H"` for 3 hours * `"P7D"` for 7 days * `"P1M"` for 1 month If you call the [capture API](/reference/capture-authorization) before the scheduled time, your call will override the delay and execute the capture immediately. **This action automatically cancels the scheduled Yuno trigger**. Alternatively, you can capture the payment manually through your [Yuno dashboard](https://dashboard.y.uno/). ## Cancel modes When you authorize a payment without immediately capturing it, those funds are temporarily held on the customer's payment method. If you decide not to capture the payment, it's important to cancel the authorization to release those held funds and provide a better customer experience. Cancel modes give you control over when and how these authorizations are voided. ### Manual cancel With manual cancel mode, authorized payments stay active until you explicitly cancel them. Yuno will not automatically void these authorizations, giving you full control over when to release the funds. You can cancel authorizations using the [cancel API](/reference/cancel-or-refund-a-payment) or through your Yuno dashboard interface. It's crucial to cancel authorizations you won't capture as soon as possible to release the held funds. Customer experience is significantly impacted when authorizations aren't canceled, as funds may remain reserved for varying periods depending on the customer's region and card network. ### Delayed cancel Configure `delayed_cancel_settings` to set a delay when canceling uncaptured authorizations, similar to delayed captures. This feature automates the release of customer funds if you decide not to capture them within a specified timeframe, significantly improving the customer experience by preventing indefinite holds on their payment methods. The `delay` field is required when using delayed cancel operations and must follow the ISO 8601 standard. For example: * `"PT3H"` for 3 hours * `"P7D"` for 7 days * `"P30D"` for 30 days **`simplified_mode`** Setting `simplified_mode` to `true` will make Yuno retry the cancel operation in case an error occurs during the scheduled cancellation attempt. ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "payment_method": { "detail": { "card": { "capture": false, "delayed_cancel_settings": { "delay": "P30D", "simplified_mode": false }, "card_data": { // card details } } } } } ``` If you call the [capture API](/reference/capture-authorization) or [cancel API](/reference/cancel-or-refund-a-payment) before the scheduled time, your call will override the delay and execute the action immediately. **This action automatically cancels the scheduled Yuno trigger**. Alternatively, you can capture or cancel the payment manually through your Yuno dashboard. **Delayed Capture and Cancel Settings** Yuno recommends not using **both** `delayed_capture_settings` and `delayed_cancel_settings` simultaneously to avoid unexpected behaviors. Use only one at a time based on your needs. ## Configuration requirements * `delayed_capture_settings` and `delayed_cancel_settings` are only valid when `capture = false` * If `capture = true`, these objects must be omitted or set to `null` * Manual operations can be performed via API endpoints or through your Yuno dashboard ## Example requests ### Example 1: Real-time capture ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "country": "US", "amount": { "currency": "USD", "value": "20000" }, "customer_payer": { "id": "", "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com" }, "workflow": "DIRECT", "payment_method": { "detail": { "card": { "capture": true, "card_data": { "number": "4111111111111111", "expiration_month": 11, "expiration_year": 28, "security_code": "123", "holder_name": "John Doe" } } }, "type": "CARD" }, "account_id": "", "description": "Real-time capture payment", "merchant_order_id": "000023" } ``` ### Example 2: Manual capture only ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "country": "US", "amount": { "currency": "USD", "value": "20000" }, "customer_payer": { "id": "", "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com" }, "workflow": "DIRECT", "payment_method": { "detail": { "card": { "capture": false, "card_data": { "number": "4111111111111111", "expiration_month": 11, "expiration_year": 28, "security_code": "123", "holder_name": "John Doe" } } }, "type": "CARD" }, "account_id": "", "description": "Authorization only - manual capture", "merchant_order_id": "000024" } ``` ### Example 3: Delayed capture ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "country": "US", "amount": { "currency": "USD", "value": "20000" }, "customer_payer": { "id": "", "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com" }, "workflow": "DIRECT", "payment_method": { "detail": { "card": { "capture": false, "delayed_capture_settings": { "delay": "P7D", "simplified_mode": false }, "card_data": { "number": "4111111111111111", "expiration_month": 11, "expiration_year": 28, "security_code": "123", "holder_name": "John Doe" } } }, "type": "CARD" }, "account_id": "", "description": "Authorization with delayed capture", "merchant_order_id": "000025" } ``` ### Example 4: Delayed cancel ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "country": "US", "amount": { "currency": "USD", "value": "20000" }, "customer_payer": { "id": "", "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com" }, "workflow": "DIRECT", "payment_method": { "detail": { "card": { "capture": false, "delayed_cancel_settings": { "delay": "P30D", "simplified_mode": false }, "card_data": { "number": "4111111111111111", "expiration_month": 11, "expiration_year": 28, "security_code": "123", "holder_name": "John Doe" } } }, "type": "CARD" }, "account_id": "", "description": "Authorization with delayed cancel", "merchant_order_id": "000026" } ``` ### Example 5: Combined delayed capture and cancel with enhanced validation This example shows a complete payment request with both delayed capture and cancel settings, along with enhanced customer validation fields: ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "country": "US", "amount": { "currency": "USD", "value": "20000" }, "customer_payer": { "merchant_customer_validations": { "account_is_verified": true, "email_is_verified": true, "phone_is_verified": true }, "id": "", "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com" }, "workflow": "DIRECT", "payment_method": { "detail": { "card": { "capture": false, "delayed_capture_settings": { "delay": "P20D", "simplified_mode": true }, "delayed_cancel_settings": { "delay": "P40D", "simplified_mode": true }, "card_data": { "number": "4111111111111111", "expiration_month": 11, "expiration_year": 28, "security_code": "123", "holder_name": "John Doe" }, "verify": false } }, "type": "CARD" }, "account_id": "", "description": "Payment with card details", "merchant_order_id": "000023" } ``` **Note** While this example shows both `delayed_capture_settings` and `delayed_cancel_settings` configured together, Yuno recommends using only one at a time to avoid unexpected behaviors. ## When to use each mode ### Use real-time capture when: * You provide goods or services immediately * You don't need to validate inventory or fraud checks after authorization * You want the simplest payment flow ### Use manual capture when: * You need to verify inventory before finalizing the payment * You want to capture a different amount than authorized * You have complex business logic that determines whether to capture or cancel * You need maximum control over the capture timing ### Use delayed capture when: * You want automatic capture after a specific time period * You have a predictable fulfillment process * You want to reduce manual intervention while maintaining control ### Use delayed cancel when: * You want to automatically release customer funds if you don't capture within a timeframe * You want to improve customer experience by not holding funds indefinitely * You have a maximum time limit for your fulfillment process ## Field reference | Field | Type | Description | | ------------------------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `capture` | `boolean` | Determines whether the card payment is captured immediately (`true`, purchase) or only authorized (`false`, requires capture or cancel). | | `delayed_capture_settings.delay` | `string` | Delay before Yuno captures the payment. Must follow ISO 8601 duration format (e.g., "P7D" for 7 days, "PT3H" for 3 hours). | | `delayed_capture_settings.simplified_mode` | `boolean` | If `true`, Yuno retries the capture if it fails. | | `delayed_cancel_settings.delay` | `string` | Delay before Yuno cancels the authorization. Must follow ISO 8601 duration format (e.g., "P30D" for 30 days). | | `delayed_cancel_settings.simplified_mode` | `boolean` | If `true`, Yuno retries the cancel if it fails. | # Account Funding Transactions (AFTs) Source: https://docs.y.uno/docs/payment-features/account-funding-transactions-afts Load funds into wallets or transfer between accounts using account funding transactions through the Payments API ## Introduction **Account Funding Transactions (AFT)** are financial transactions that facilitate the transfer of funds between payment accounts. They are widely used to load or top up user accounts, digital wallets, perform internal fund transfers within a payment platform. AFTs enable efficient and secure movement of money across accounts. ## What is an AFT? An **AFT (Account Funding Transaction)** is a type of transaction designed for: * **Loading funds** into user accounts or digital wallets. * **Transferring funds** between accounts within the same platform. * **Depositing money** into commercial or personal accounts. Remittances included. AFTs leverage traditional payment networks (e.g., Visa, Mastercard, ACH) to process transactions quickly and securely while optimizing costs. ### Types of AFT Transactions 1. **Funding transactions**: * Transfer funds into an account from a debit/credit card or bank account. * Example: A user loads their digital wallet using their debit card. 2. **Withdrawal transactions**: * Move funds from a user account back to their bank account or card. * Example: A user transfers money from their digital wallet to their bank account. ## Integration To perform an AFT, you will need to send a request to our [Payments API](/reference/create-payment) with the `additional_data.order.account_funding` object specifying the `sender` and `beneficiary` data. Each credit card scheme might require different information about the recipient and the sender, depending on the operating region and transaction category. ```Text Example theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} [...] "additional_data": { "order": { "account_funding": { "sender": { "first_name": "John", "last_name": "Doe", "email": "john.doe@mail.com" }, "beneficiary": { "first_name": "Chris", "last_name": "Martin", "document": { "document_number": "38192019", "document_type": "CC" } } } } } [...] ``` For more details, refer to the create [payments API](/reference/create-payment) section. **Additional Data** In case you need to define additional information about the seller, such as `merchant_category_code` for example, you can find extra fields in the `seller_details` inside the [`additional_data` struct](/reference/the-payment-object) in the payment. # Card verification results (AVS & CVV) Source: https://docs.y.uno/docs/payment-features/card-verification-results Understand how Yuno surfaces issuer-side address (AVS), postal code, cardholder name, and CVV/CVC check results on every card payment. When a card payment is authorized, the issuer can return the result of several verification checks the network ran against the card data the customer provided, most importantly **AVS** (Address Verification Service) and the **CVV / CVC** match. Yuno relays those results back to you on every card transaction so you can use them in your own risk, reconciliation, or retry logic. This guide covers: * What each verification result means * Where to find them in the API response and webhooks * How to interpret the codes * How to use them in your decision flow *** ## What gets checked | Check | What it verifies | Field | | ------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------- | | Street address (AVS) | First line of the billing address the customer entered matches what the issuer has on file. | `address_line_1_check` | | Postal / ZIP code (AVS) | The billing postal code matches the issuer's record. | `zip_code_check` | | Cardholder name | The cardholder name on the request matches the issuer's record. Coverage varies widely by network and country. | `card_holder_name_check` | | Card security code (CVV / CVC / CVV2) | The 3- or 4-digit security code on the card matches. | `card_security_code_check` | All four are issuer-driven: Yuno does not compute them, it forwards exactly what the acquirer / card network returns. *** ## Where to find them in the response The block lives on the **card detail** of the payment method, and is duplicated on each transaction that ran a verification: ``` payment.payment_method.payment_method_detail.card.verification_services payment.transactions.payment_method.detail.card.verification_services payment.transactions_history[].payment_method.detail.card.verification_services ``` It appears on the response of: * `POST /v1/payments`: Create payment * `GET /v1/payments/{id}`: Retrieve payment * `POST /v1/payments/{id}/capture`, `/refund`, `/cancel`, etc. It is also included in **payment webhook events** (`payment.created`, `payment.updated`, …), inside the same `payment_method.detail.card` path. ### Example response (excerpt) ```json theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}} { "id": "p_01HZK3TJX5W8R7Q2V4N6Y8M1B3", "status": "SUCCEEDED", "payment_method": { "type": "CARD", "payment_method_detail": { "card": { "authorization_code": "123456", "card_data": { "brand": "VISA", "iin": "411111", "lfd": "1111" }, "verification_services": { "address_line_1_check": "PASS", "zip_code_check": "PASS", "card_holder_name_check": "UNAVAILABLE", "card_security_code_check": "PASS" } } } } } ``` If none of the checks were performed, the entire `verification_services` object is omitted from the response. *** ## Result values Yuno normalizes the result of every check returned by the issuer / acquirer into one of four canonical values. Each of the four fields takes the same enum: | Value | Meaning | | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `PASS` | The check ran and the value matched the issuer's record. | | `FAIL` | The check ran and the value did **not** match. | | `UNAVAILABLE` | The check could not be completed: the issuer is not certified, did not respond, or does not support the check in this region. | | `UNCHECKED` | The check was not performed for this transaction (e.g. the merchant did not send a CVV, or the provider does not run AVS). | *** ## How to use these results AVS and CVV results are **not** authorization decisions: the transaction can be approved even when the checks fail. They are advisory signals you can fold into your own risk strategy. A simple decision matrix many merchants use: | AVS (address\_line\_1\_check / zip\_code\_check) | CVV (card\_security\_code\_check) | Suggested action | | ------------------------------------------------ | --------------------------------- | -------------------------------------------------------------------------------------- | | `PASS` | `PASS` | Accept. | | `PASS` | `FAIL` | Soft decline / step-up: billing data looks right but the security code is wrong. | | `FAIL` | `PASS` | Review: billing-data mismatch is a strong fraud signal even with a correct CVV. | | `FAIL` | `FAIL` | Decline. | | `UNAVAILABLE` / `UNCHECKED` | any | Treat as unknown: fall back to other risk signals (3DS result, fraud-screening score). | Because verification coverage varies by issuer and region, any decisioning you build on top should: 1. **Default to the authorization decision.** A `SUCCEEDED` transaction should ship unless your risk policy says otherwise. 2. **Combine signals.** Pair CVV / AVS with `fraud_screening`, the `three_d_secure` result, and `provider_data.iso8583_response_code`. 3. **Tolerate `UNAVAILABLE` and `UNCHECKED`.** Many cards in Latin America and EMEA do not run AVS at all. *** ## Sending verification data on the request You can also pass `verification_services` **into** Yuno on the create-payment request, for example, when relaying upstream auth results from a system of record. The same four fields are accepted under: ``` payment_method.payment_method_detail.card.verification_services ``` When provided on the request, Yuno forwards the values to the downstream provider where supported. # Enroll Cards with Payment Links Source: https://docs.y.uno/docs/payment-features/enrollment/enroll-cards-with-payment-link Generate a payment link so customers can update an expired or declined card and re-enroll automatically Yuno provides merchants with the ability to manage overdue or declined payments using secure payment links. When a credit card expires or is reported as stolen or lost, you can generate a payment link to share with customers via email or text message, allowing them to easily update their payment information. This feature is tailored for merchants who operate their own subscription engine and need to update credit card details to continue processing payments with a new `vaulted_token` for their customers. ## How it works ### 1. Receiving the payment link When users need to update their payment information, they receive a secure payment link. This link allows them to complete any pending payments using a credit or debit card. To create the payment link for enrollment, make sure to include the following fields: * `customer_payer.id`: The ID of the previously [generated customer](/reference/create-customer) * `one_time_use`: Set this to `true` to ensure the payment link can only be used once * `vault_on_success`: Set this to `true` to enroll the credit card after a successful payment ### 2. Automatic enrollment Once the payment is successfully completed through the link, Yuno automatically generates a new `vaulted_token` for the customer. ### 3. Continue charging After obtaining the `vaulted_token`, you can proceed with your subscription schedule. Use the [Get payment methods](/reference/retrieve-enrolled-payment-methods-api) endpoint to access the customer's payment methods. For more information about creating and managing payment links, refer to the [payment link API reference](/reference/create-payment-link). # Enroll Payment Methods Source: https://docs.y.uno/docs/payment-features/enrollment/enroll-payment-methods Store a customer's payment method in Yuno's vault to enable recurring charges and retries across providers Enrollment allows you to securely store a customer's payment method in Yuno's vault for future use. When you enroll a payment method, Yuno generates a `vaulted_token` that references the payment details without exposing sensitive information. This enables recurring payments, subscriptions, and retries across providers while maintaining PCI compliance. **Vaulted Token** A Vaulted Token is created once a payment method is enrolled and stored with the customer information. You can use the created Vaulted Token to identify the payment method in future payments. ## Available payment methods for enrollment | Payment method | Type | | -------------------------- | ---------------------- | | **Cards** | `CARD` | | **Nupay** | `NU_PAY_ENROLLMENT` | | **PayPal** | `PAYPAL_ENROLLMENT` | | **Daviplata** | `DAVIPLATA_ENROLLMENT` | | **MercadoPago Wallet** | `WALLET_CONNECT` | | **dLocal Yape** | `YAPE_ENROLLMENT` | | **dLocal Smart PIX** | `SMART_PIX` | | **Astropay** | `ASTROPAY_ENROLLABLE` | | **Nequi**\* | `NEQUI` | | **Bancolombia Tokenbox**\* | `BANCOLOMBIA_TOKENBOX` | | **Adyen PIX Biométrico** | `PIX_BIOMETRICO` | | **DolarApp** | `DOLARAPP` | (\*) SDK only. Consult the [SDK documentation](/docs/sdks/overview/quickstart) for integration details. ## Requirements * Gather your [API credentials](/docs/developers-credentials) from the [Yuno Dashboard](https://dashboard.y.uno/developers): * `public-api-key` * `private-secret-key` * `account_id` * [Set up connections](/docs/connections) on your Yuno Dashboard. Add a payment method that requires enrollment. * [Build a route](/docs/routing#configuring-the-dynamic-routing) for the payment method to define how it will be processed. * [Configure the checkout builder](/docs/checkout-builder) to make your connected payments available. ## Steps summary To enroll a payment method into a customer account: 1. [Create a Customer](/reference/create-customer) 2. [Create Customer Session](/reference/create-customer-session) (Only for Checkout workflow) 3. (Optional) Retrieve Payment Methods Available to Enroll - [Checkout workflow](/reference/retrieve-payment-methods-to-enroll-checkout) 4. Enroll Payment Method [Checkout workflow](/reference/enroll-payment-method-checkout)/[Direct workflow](/reference/enroll-payment-method-api) 5. Retrieve Payment Methods - [Direct workflow](/reference/retrieve-enrolled-payment-methods-api) ## Enroll a payment method ### Step 1: Create a customer Register customer info through the [Create Customer](/reference/create-customer) endpoint. Also, supply the `merchant_customer_id`, a unique identifier for the customer used on your system. **Customer complementary information** Optional details like phone, billing address, and shipping address are not required to enroll a payment method, but some providers use them for fraud checks. If you include these fields, certain sub-fields become required. After creating the customer, you'll receive an `id` that identifies them in Yuno. If your customer already has an `id`, skip this step. ### Step 2: Create a customer session **Workflow Requirements** The enrollment workflow varies by payment method type: * **Checkout workflow**: Requires customer session for most payment methods (Cards, Nupay, PayPal, Daviplata, dLocal methods, Astropay, Adyen PIX Biométrico) * **Direct workflow**: Available for Cards only (PCI compliant merchants). Proceed directly to Step 3 using the customer `id` generated in Step 1. * **SDK workflow**: Payment methods like Nequi and Bancolombia Tokenbox require SDK implementation. WALLET\_CONNECT (MercadoPago) supports both SDK and Checkout workflows. Consult the [SDK documentation](/docs/sdks/overview/quickstart) for details. * **SDK Seamless workflow**: You can enroll payment methods during the seamless payment flow by setting `vault_on_success: true` when creating the payment. The payment method will be automatically enrolled if the payment succeeds. For wallets (Apple Pay / Google Pay), the instrument is vaulted as a hidden record: the `vaulted_token` is returned in the payment response but does not appear in the customer's payment-methods listing — see the note in [Step 5](#step-5-retrieve-payment-methods). Create a customer session to store the customer's payment preferences using the [Create Customer Session](/reference/create-customer-session) endpoint. Use the `id` from Step 1 as the `customer_id`. The response returns a `customer_session`, which you'll use to enroll the payment method. ### Step 3: Retrieve payment methods to enroll This **optional step** lists all available payment methods the customer can enroll. If you already know which payment method to enroll, proceed to [Step 4](#step-4-enroll-a-payment-method). To list available payment methods, use the Retrieve Payment Methods To Enroll endpoint. For the [Checkout workflow](/reference/retrieve-payment-methods-to-enroll-checkout), include the `customer_session` in the request. The Direct workflow doesn't currently support retrieving payment methods to enroll. The response returns a `payment_methods` array containing all available payment methods to enroll. Use the `type` field from this response in the next step. **Available Payment Methods** Only payment methods that you've connected, routed, and added to your checkout will appear in the response. ### Step 4: Enroll a payment method Enroll the payment method using one of the following endpoints: * [**Checkout workflow**](/reference/enroll-payment-method-checkout): Pass the payment method `type` to the `payment_method_type` parameter. Supported types include: `CARD`, `NU_PAY_ENROLLMENT`, `PAYPAL_ENROLLMENT`, `DAVIPLATA_ENROLLMENT`, `WALLET_CONNECT`, `YAPE_ENROLLMENT`, `SMART_PIX`, `ASTROPAY_ENROLLABLE`, `PIX_BIOMETRICO`. * [**Direct workflow**](/reference/enroll-payment-method-api): Pass the payment method `type` to the `type` parameter. (Only available for `CARD` payment methods used by PCI compliant merchants) * [**SDK workflow**](/docs/sdks/overview/quickstart): Payment methods like `NEQUI` and `BANCOLOMBIA_TOKENBOX` require SDK implementation. `WALLET_CONNECT` (MercadoPago) supports both SDK and Checkout workflows. The enrollment response includes a redirect URL to the payment provider page. Step 5 explains where to find it and how to complete enrollment. ### Step 5: Retrieve payment methods The customer must provide authorization on the payment provider page. Retrieve the authorization URL based on your workflow: * **Checkout workflow**: The enrollment URL appears in the enrollment response from Step 4. Find it in `provider.redirect.init_url`. * **Direct workflow**: You'll receive the final status in Step 4 (cards only). Redirect the user to complete authorization. Once enrollment is complete, proceed to the next step. To confirm enrollment, retrieve the enrolled payment methods and verify the `status` is `ENROLLED`. **Wallet-vaulted instruments are not listed** Instruments vaulted through a wallet payment (Apple Pay / Google Pay with `vault_on_success: true`) are stored as hidden records: they do not appear in the enrolled payment methods listing, even though their `vaulted_token` is valid and chargeable. Store that token from the payment response, and resolve it individually with [Retrieve Enrolled Payment Method by ID](/reference/retrieve-enrolled-payment-method-by-id-api) if needed. See [Stored Credentials](/docs/payment-features/stored-credentials#wallet-originated-tokens-apple-pay-and-google-pay). **Fingerprint** When a credit card is enrolled, the response includes a `fingerprint` field that represents your customer's card across your organization. If a customer enrolls the same card multiple times, multiple `vaulted_token` values are generated, but the `fingerprint` remains the same, allowing you to deduplicate on your side. See [Card Fingerprint](/docs/fingerprint). The fingerprint is available after enrollment but can be `null` for some providers. Always check for its presence before using it for deduplication. The fingerprint also appears in payment responses when a transaction uses an enrolled credit card. # Installments Source: https://docs.y.uno/docs/payment-features/installments/index Offer card payments in installments through merchant-defined or provider-defined plans for flexible checkout In this section, you'll discover how Yuno supports payments in installments, offering you and your customers the flexibility to make large purchases more affordable. Explore the benefits of this feature and understand the difference between "Merchant" and "Provider" installments for a tailored payment solution. ## Accept card payments in installments Yuno supports payments in installments, which allows you to spread out the cost of a purchase over a longer period of time. This is a great way to make a large purchase more affordable or to free up cash flow for other expenses. ### Merchant vs. Provider Installments Installment implementation varies depending on the origin and your commercial agreements. There are two options merchants can use, one defined by themselves and the other according to the providers' definition: * **[Merchant](/docs/merchant-installments)**: In this case, the merchant manages its own installment options through individual payment processors, determining the available installment choices for customers within Yuno. * **[Provider](/docs/provider-installments)**: When the merchant lacks predefined installment agreements, they rely on the payment processor's installment options. We work with your chosen provider to access the available installments to offer your customers for each transaction. To have additional information regarding how to configure each option, you can access the [Merchant Installments](/docs/merchant-installments) or the [Provider Installments](/docs/provider-installments) pages. # Merchant Installments Source: https://docs.y.uno/docs/payment-features/installments/merchant-installments Configure installment options yourself when your commercial agreements with payment processors already define the available plans You can use the Merchant Installments options when you, the merchant, have your own commercial agreements and installment capabilities defined within your payment processors. In this case, you are responsible for handling the logic behind the installment options available for each transaction. When creating the payment, you will inform Yuno of the available number of installments that customers can choose from.