The latest Web SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.
The latest version v2 of Universal Checkout Web SDK introduces a few breaking changes.
Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.
Compare with previous v1 SDK that required you to write more code:
/* v1 */const Primer = await loadPrimer() // If the package is loaded from npmconst primer = new Primer({ credentials: clientToken })const checkout = await primer.checkout(options)
The new Universal Checkout initialization makes integration much simpler and easier. As a result, developers are no longer required to construct the Primer object using new Primer() call. Instead, you need to use Primer.showUniversalCheckout() or Primer.showVaultManager().Another set of changes that you need to take into account is when the package is loaded from npm:
The loadPrimer() call is now removed from the latest SDK. When the user approaches checkout, if you need to preload Primer Universal Checkout SDK, use preloadPrimer() instead. Under the hood, loadPrimer() is automatically called by Primer.showUniversalCheckout() so you do not need to call loadPrimer() explicitly anymore.
It is no longer required to import the CSS file anymore. Primer.showUniversalCheckout() will automatically load it.
To find out more about Universal Checkout initialization process, checkout the Web Get Started Guide.
Universal Checkout Web SDK v2 now creates, resumes and handles payments under the hood 🎉The automatic payment flow is activated by default.When migrating to Web SDK v2, you need to use the following simpler code for payment creation:
/* v2 */Primer.showUniversalCheckout(token, { onCheckoutComplete({ payment }) { // e.g. Show a success message },})
Earlier, the payment creation code was more complex:
/* v1 */primer.checkout({ onTokenizeSuccess(paymentMethodTokenData) { // Create a payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token }, onResumeSuccess(resumeTokenData) { // Resume the payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token },})
In the earlier versions, you had to manually create and resume payments using onTokenizeSuccess and onResumeSuccess. Not anymore.The functions onTokenizeSuccess and onResumeSuccess are no longer required to be used. This essentially means that you do not need to make any API calls for creating and resuming payments.Those can be edited out of your integration code.No complex integrations to maintain anymore!With the new SDK, you can simply listen to the PAYMENT.STATUS webhook and the callback onCheckoutComplete to process successful and even more secure payments as compared to the earlier versions.
Should you wish to go back to the manual flow of v1, pass the option paymentHandling: "MANUAL". See Manual Payment Creation Guide for details.
/* v2 */Primer.showUniversalCheckout({ paymentHandling: 'MANUAL', onTokenizeSuccess(data, handler) { // To implement }, onResumeSuccess(data, handler) { // To implement }, /* Other options */})
In the earlier version, onTokenizeSuccess and onResumeSuccess had to return specific data to trigger various scenarios. This proved to be quite error-prone and not self-explanatory.
/* v2 */async function onTokenizeSuccess(paymentMethodTokenData) { return true; // Handle success // or throw new Error("Error message"); // Handle error message // or return { clientToken: "..." } // Continue the flow with a new client token}// Same for onResumeSuccess
This logic has been greatly improved in v2 by introducing a handler argument that contains the functions to continue.
/* v2 */async function onTokenizeSuccess(paymentMethodTokenData, handler) { return handler.handleSuccess(); // Handle success // or return handler.handleFailure("Error message"); // Handle failure with a custom error message // or return handler.continueWithNewClientToken("..."); // Continue the flow with a new client token}async function onResumeSuccess(paymentMethodTokenData, handler) { return handler.handleSuccess(); // Handle success // or return handler.handleFailure("Error message"); // Handle failure with a custom error message // or return handler.continueWithNewClientToken("..."); // Continue the flow with a new client token}
In Web SDK v2 the threeDSecure option is now completely removed from the Universal Checkout. Earlier, this option was provided to trigger 3DS at the time of tokenization.
In the latest SDK, the 3DS feature can be accessed without writing a single line of integration code by simply using workflows. You can be fully SCA-ready with a unified checkout across all your payment services including 3D Secure 2.0.Once you add a 3DS pre-authorization Primer Connection to your Workflow, the Universal Checkout feature will just do the right thing for you. It will present to your customer a fully in-context workflow that is optimized with 3D Secure flow on both web or mobile.
The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2. Developers must now specify the order and customer details when creating the client session with .
Earlier v1.x.x
Latest v2 SDK
purchaseInfo and orderDetails (in the SDK)
Pass the order details through the client-session API call.
customerDetails (in the SDK)
Pass the customer information through the client-session API call.
customerId (in the SDK)
Specify the customerId through the client-session API call.
countryCode (in the SDK)
Pass order.countryCode through the client-session API call.
businessDetails (in the SDK)
Only needed for tax calculation using TaxJar. Removed. In the future, business details…
The Setters in Web SDK v1.x.x listed below have been removed. Now this information is retrieved by Universal Checkout through the client session.Developers need to migrate their integration backend to use the latest Universal Checkout SDK v2 and update order details using . The token obtained through the client-session API needs to be passed to the SDK with setClientToken(newClientToken) API call.
Earlier v1.x.x
Latest v2 SDK
setPurchaseInfo and setOrderDetails (in the SDK)
Update the order in the client session, then call setClientToken(...).
setCustomerDetails (in the SDK)
Update the customer in the client session, then call setClientToken(...).
Once you migrate your merchant backend, all your implementations will be able to properly display payment methods through the Primer Universal Checkout, regardless of the platform!
In the previous Primer Checkout v1.x.x, the option allowedPaymentMethods was used to filter and display the payment methods as required by a specific merchant integration. This is no longer necessary and has been completely removed in the latest SDK v2.The recently introduced Checkout section in the Dashboard enables display of merchant-specific payment methods, based on the conditions defined by them.
With Universal Checkout, Primer can now dynamically show payment methods in the user interface. It uses the conditions set up by you on the dashboard, along with the data passed in the client session call, to dynamically display only those payment methods that are applicable as per your selection and inputs.
All of this happens without a single line of code as part of merchant integration!See How Universal Checkout works for details.
Earlier versions of Primer Checkout SDK required you to integrate using onClientSessionActions.Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up “client session actions” via onClientsessionActions().
Developers are no longer required to call this function anymore and it has been removed from the SDK. Instead, now you need to set up the following callbacks:
onClientSessionUpdate
onClientSessionUpdateStart
As a side effect of this usage change, the following callbacks have also been removed from the SDK in addition to onClientSessionActions. These callbacks are now replaced by the client session update call.
onAmountChange
onAmountChanging
onAmountChangeError
The previous SDK version had Primer Checkout functionality that was sending you Client session actions in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal Web SDK v2.The latest SDK can now collect various customer data such as the billing address, customer contact details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.
If you have setup a custom submit button in the checkout user interface here is what you need to do in order to migrate from previous Primer Checkout Web SDK:
Earlier, the card input fields could be customized as per merchant checkout requirements using card.css.Now, you can instead use the style option to customize the style 🎨 for the entire Universal Checkout SDK and align with the merchant branding in a more cohesive and unified way!For more details, refer to the Primer Universal Checkout Web SDK Styling Guide.
Card holder name display option
The option card.cardholderName.visible available in the previous version of Primer Checkout SDK has been removed altogether. You can continue to configure this setting through the Dashboard in the forthcoming release. Stay tuned!In the meantime, if you need to show or hide the cardholder name field, please get in touch with us.
Renamed CheckoutOptions
The TypeScript CheckoutOptions is now renamed to UniversalCheckoutOptions.
Checkout object updates
The checkout object functions tokenize() and validate() are no longer available in Universal Checkout SDK v2.
Checkout Components
Checkout Components are now sunset and no longer supported. The new Universal Checkout SDK does not contain the primer.render() function. Make sure you clean that up!
At Primer, we are all working hard towards a fully customisable payment framework that enables you to build any checkout that you want!Stay tuned for more updates!
The latest Android SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.
The latest version v2 of Universal Checkout Android SDK introduces a few breaking changes.
Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.
Universal Checkout Android SDK v2 now creates, resumes and handles payments under the hood 🎉The automatic payment flow is activated by default.When migrating to Android SDK v2, you need to use the following simpler code for payment creation:
private val listener = object : PrimerCheckoutListener {override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) { // show an order confirmation screen}}Primer.instance.configure(listener = listener)Primer.instance.showUniversalCheckout(context, clientToken)
Earlier, the payment creation code was more complex:
private val listener = object : CheckoutEventListener { override fun onCheckoutEvent(e: CheckoutEvent) { when (e) { is CheckoutEvent.TokenizationSuccess -> { // Create a payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token } is CheckoutEvent.ResumeSuccess -> { // Resume the payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token } } }}Primer.instance.configure(listener = listener)Primer.instance.showUniversalCheckout(context, clientToken)
In the earlier versions, you had to manually create and resume payments when receiving CheckoutEvent.TokenizationSuccess and CheckoutEvent.ResumeSuccess. Not anymore.We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use onTokenizeSuccess and onResumeSuccess callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.Those can be edited out of your integration code.All this results in an even simpler integration to maintain!With the new SDK, you can simply listen to the PAYMENT.STATUS webhook and the callback onCheckoutCompleted to process successful and even more secure payments as compared to the earlier versions.
We have completely changed how you are receiving events/callbacks from Android SDK.Previously you had to use onCheckoutEvent callback that was receiving different events from the SDK. We have updated it to a more natural approach and now all events are translated to different callbacks:
Earlier v1.x.x
Latest v2 SDK
CheckoutEvent.TokenizationSuccess
onTokenizeSuccess *
CheckoutEvent.ResumeSuccess
onResumeSuccess *
CheckoutEvent.Exit
onDismissed
CheckoutEvent.TokenizationError
onFailed
CheckoutEvent.APIError
onFailed
CheckoutEvent.ResumeError
onFailed
Only relevant on the manual flow. Won’t be called if paymentHandling is AUTO, which is the default valueMoreover, we have renamed CheckoutEventListener → PrimerCheckoutListener
Earlier versions of Primer Checkout SDK required you to integrate using onClientSessionActions.Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up “client session actions” via onClientsessionActions().
Developers are no longer required to call this function anymore and it has been removed from the SDK. Instead, now you can set up the following callbacks:
onClientSessionUpdated
onBeforeClientSessionUpdated
Earlier release of SDK had Primer Checkout functionality that was sending you Client session actions in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal Android SDK v2.The latest SDK can now collect various customer data such as the billing address, customer contact details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.
The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2:
Order
Customer
Developers must now specify the order and customer details when creating the client session with .We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing PrimerConfig object to the SDK with various options:
The latest iOS SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.
The latest version v2 of Universal Checkout iOS SDK introduces a few breaking changes.
Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.
Universal Checkout iOS SDK v2 now creates, resumes and handles payments under the hood 🎉The automatic payment flow is activated by default.When migrating to iOS SDK v2, you need to use the following simpler code for payment creation:
import PrimerSDKclass MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Initialize the SDK with the default settings. Primer.shared.configure(delegate: self) } func startUniversalCheckout() { Primer.shared.showUniversalCheckout(clientToken: self.clientToken) }}extension MyViewController: PrimerDelegate { func primerDidCompleteCheckoutWithData(_ data: CheckoutData) { // Primer checkout completed with data }}
Earlier, the payment creation code was more complex:
import PrimerSDKclass MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Initialize the SDK with the default settings. let settings = PrimerSettings( amount: amount, currency: currency ) Primer.shared.configure(settings: settings) Primer.shared.delegate = self } func startUniversalCheckout() { Primer.shared.showUniversalCheckout(on: self) }}extension MyViewController: PrimerDelegate { func clientTokenCallback(_ completion: @escaping (String?, Error?) -> Void) { // API call to fetch client token from your backend. fetchClientToken() { (token, err) in completion(token, err) } } func onTokenizeSuccess(_ paymentMethodToken: PaymentMethodToken, resumeHandler: ResumeHandlerProtocol) { // Send the payment method token to your server to create a payment sendPaymentMethodToken(token: paymentMethodToken) { (res, err) in if let err = err { resumeHandler.handle(error: err) } else if let res = res { guard let requiredActionDic = res["requiredAction"] as? [String: Any], let clientToken = requiredActionDic["clientToken"] as? String else { resumeHandler.handleSuccess() return } resumeHandler.handle(newClientToken: clientToken) } } } func onResumeSuccess(_ resumeToken: String, resumeHandler: ResumeHandlerProtocol) { // Resume the payment sendResumeToken(resumeToken) { (res, err) in if let err = err { resumeHandler.handle(error: err) } else if let res = res { resumeHandler.handleSuccess() } } }}
In the earlier versions, you had to manually create and resume payments when receiving CheckoutEvent.TokenizationSuccess and CheckoutEvent.ResumeSuccess. Not anymore.We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use onTokenizeSuccess and onResumeSuccess callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.Those can be edited out of your integration code.All this results in an even simpler integration to maintain!With the new SDK, you can simply listen to the PAYMENT.STATUS webhook and the callback onCheckoutCompleted to process successful and even more secure payments as compared to the earlier versions.
We have completely changed how you are receiving events via the PrimerDelegate.Previously you had to use the delegate functions that were returning different SDK events. We have updated it to a more natural approach and now all events are translated to different callbacks:
Earlier v1.x.x
Latest v2 SDK
onTokenizeSuccess
primerDidTokenizePaymentMethod *
onResumeSuccess
primerDidResumeWith *
onDismiss
primerDidDismiss
checkoutFailed
primerDidFailWithError
onResumeError
primerDidFailWithError
Only relevant on the manual flow. Won’t be called if paymentHandling is AUTO, which is the default value
Earlier versions of Primer Checkout SDK required you to integrate using onClientSessionActions.Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up the “client session actions”.
🛑 Developers are no longer required to call this function and it has been removed from the SDK. Instead, now you can set up the following callbacks:
primerClientSessionDidUpdate
primerClientSessionWillUpdate
Earlier release of SDK had Primer Checkout functionality that was sending you Client session actions in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal iOS SDK v2.The latest SDK can now collect various customer data such as the billing address, customer contact details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.
The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2:
Order
OrderItem
Customer
Address
Instead, developers must now specify the order and customer details when creating the client session with .We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing PrimerSettings and a PrimerTheme object to the SDK with various options:
Now, you should be passing PrimerSettings and set the delegate, as per the Quick Start Guide. In case you need more customization, you can find the PrimerSettings API reference here.
Some delegate functions provide a decision handler, e.g. primerWillCreatePaymentWithData(:decisionHandler:). You can process the data provided and once you’re ready you can call the decision handler with your relevant decision. Once you do, the SDK will continue the flow.
The latest React Native (RN) SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.
The latest version v2 of Universal Checkout RN SDK introduces a few breaking changes.
Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be deprecated.
Universal Checkout React Native SDK v2 now creates, resumes and handles payments under the hood 🎉The automatic payment flow is activated by default.When migrating to React Native SDK v2, you need to use the following simpler code for payment creation:
import { Primer, PrimerSettings, PrimerCheckoutData} from '@primer-io/react-native';const CheckoutScreen = async (props: any) => { const onCheckoutComplete = (checkoutData: PrimerCheckoutData) => { // Show a success screen } const onUniversalCheckoutButtonTapped = async () => { const settings: PrimerSettings = { onCheckoutComplete: onCheckoutComplete } // Configure the SDK await Primer.configure(settings) // Ask your backend to create a client session const clientToken = await createClientSession(clientSessionRequestParams) // Present Universal Checkout await Primer.showUniversalCheckout(clientToken) }}
Earlier, the payment creation code was more complex:
import { Primer } from '@primer-io/react-native';const CheckoutScreen = (props: any) => { const onTokenizeSuccess = (req, res) => { createPayment({ paymentMethod: req.token }) .then((payment) => { // handle required actions if present. if (payment.requiredAction?.name) { // ensure the result id is stored somewhere. setPaymentId(result.id) // resume the SDK with the result clientToken. res.handleNewClientToken(result.requiredAction?.clientToken); } else { // resume the SDK passing a null object. res.handleSuccess(); } }) .catch(() => res.resumeWithError(errorMessage)); } const onResumeSuccess = (req, res) => { resumeSession({ id: paymentId, resumeToken: req }) .then((payment) => { if (payment.status in ['FAILED', 'DECLINED', 'CANCELLED', 'PENDING']) { res.handleError(errorMessage); } else { res.handleSuccess(); } }) .catch(() => res.handleError(errorMessage)); } const onUniversalCheckoutButtonTapped = async () => { try { const clientToken = await createClientSession(clientSessionRequestParams); // Present Universal Checkout Primer.showUniversalCheckout(clientToken, { onTokenizeSuccess, onResumeSuccess }); } catch (err) { // Handle error } }}
In the earlier versions, you had to manually create and resume payments when the delegate functions onTokenizeSuccess and onResumeSuccess were called. Not anymore.We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use onTokenizeSuccess and onResumeSuccess callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.Those can be edited out of your integration code.All this results in an even simpler integration to maintain!With the new SDK, you can simply listen to the PAYMENT.STATUS webhook and the callback onCheckoutCompleted callback will be called.
We have completely changed how you are receiving events, now you can add your callbacks in the SDK’s settings when you configure the SDK.Previously you had to separately add callbacks in the showUniversalCheckout function.We have updated it to a more natural approach and now all events are translated to different callbacks:
Earlier v1.x.x
Latest v2 SDK
onTokenizeSuccess
onTokenizeSuccess *
onResumeSuccess
onResumeSuccess *
Exit
onDismissed
onDismiss
onDismiss
checkoutFailed
onFailed
onResumeError
onFailed
Only relevant on the manual flow. Won’t be called if paymentHandling is AUTO, which is the default value
Earlier versions of Primer Checkout SDK required you to integrate using onClientSessionActions.Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up the “client session actions”.
Developers are no longer required to call this function and it has been removed from the SDK. Instead, now you can set up the following callbacks:
onClientSessionUpdate
onBeforeClientSessionUpdate
Earlier release of SDK had Primer Checkout functionality that was sending you Client session actions in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal React Native SDK v2.The latest SDK can now collect various customer data such as the billing address, customer contact details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.
The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2.
Order
OrderItem
Customer
Address
Instead, developers must now specify the order and customer details when creating the client session with .We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing a PrimerConfig object—that contained the SDK settings and callbacks—to the SDK in the showUniversalCheckout function.
Primer.configure(settings);
Now, you should be passing PrimerSettings on the configure function, as per the Quick Start Guide. In case you need more customization, you can find the PrimerSettings API reference here.
All the deprecated methods in v1 have been removed and replaced with other methods where applicable:
onVaultSuccess → Removed
onClientSessionActions → Removed
All the deprecated classes in v1 have been removed. They are instead set on the backend when creating the client session.
Order
OrderItem
Customer
Address
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Primer","description":"Learn how to connect, build, and scale with Primer. Our docs offer clear guides and technical references to help you get more from our unified payments infrastructure.","colors":{"primary":"#FF7C4F","light":"#FF7C4F","dark":"#1b1a1a"},"logo":{"light":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","dark":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","href":"https://primer.io/docs"},"favicon":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","appearance":{"default":"light"},"background":{"decoration":"grid","color":{"light":"#ffffff"}},"navbar":{"links":[{"href":"https://primer.io/contact-us","label":"Contact Sales"}],"primary":{"type":"button","label":"Contact support","href":"https://portal.support.primer.io/servicedesk/customer/portal/11"}},"footer":{"socials":{"youtube":"https://www.youtube.com/channel/UCblj8Ya4PGjRbKVXmVwKyeQ","linkedin":"https://www.linkedin.com/company/primerapi","website":"https://primer.io/"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"integrations":{"gtm":{"tagId":"GTM-NW2HXNZC"},"cookies":{"key":"ANALYTICS_CONSENT","value":"yes"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"primer-cc826789","hasAudioNarration":false,"actualSubdomain":"primer-cc826789","customDomains":["primer.io"],"gitSource":{"type":"gitlab","owner":"primer-io/general","repo":"public-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"projectId":69511232,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedeceee38f903348a1bd08","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"SDK Reference","count":256},{"language":"default","tag":"Payment methods","count":242},{"language":"default","tag":"Documentation","count":171},{"language":"default","tag":"API reference","count":164},{"language":"default","tag":"API Reference","count":158},{"language":"default","tag":"Legacy SDKs","count":139},{"language":"default","tag":"Connections","count":129},{"language":"default","tag":"Checkout","count":118},{"language":"default","tag":"PrimerHeadlessUniversalCheckout","count":77},{"language":"default","tag":"iOS","count":58}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"css/colorCard.css","content":".color_card{display:block;max-width:268px;border-radius:16px;text-decoration:none;color:#1c1c1c;margin:1rem 0;background-color:#fffbeb;border:none!important;transition:transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out}.color_card:hover{transform:translateY(-5px);box-shadow:0 10px 20px rgba(0, 0, 0, 0.1);border:none!important}.color_card-visual{display:flex;justify-content:center;align-items:center}.color_card-image{max-width:100%;height:auto;border-radius:16px 16px 0 0;margin:0}.color_card-text-content{text-align:start;padding:1.5rem}.color_card-title{font-size:1rem;font-weight:600;margin:0 0 0.5rem 0}.color_card-description{font-size:1rem;line-height:1.6;margin:0;color:#796262!important;font-weight:400!important}.dark .color_card-description{color:#9B7A7A!important}.color_card-description p{margin:0}.dark .horizontal_color_card h2{color:#FFFFFF}.color_card.yellow,.horizontal_card.yellow,.icon-container.yellow{background-color:#FFEDE6}.dark .color_card.yellow,.dark .horizontal_card.yellow,.dark .icon-container.yellow{background-color:#381000}.color_card.purple,.horizontal_card.purple,.icon-container.purple{background-color:#FFEDE6}.dark .color_card.purple,.dark .horizontal_card.purple,.dark .icon-container.purple{background-color:#381000}.color_card.red,.horizontal_card.red,.icon-container.red{background-color:#FFEDE6}.dark .color_card.red,.dark .horizontal_card.red,.dark .icon-container.red{background-color:#381000}.color_card.lilac,.horizontal_card.lilac,.icon-container.lilac{background-color:#FFEDE6}.dark .color_card.lilac,.dark .horizontal_card.lilac,.dark .icon-container.lilac{background-color:#381000}.color_card.pink,.horizontal_card.pink,.icon-container.pink{background-color:#FFEDE6}.dark .color_card.pink,.dark .horizontal_card.pink,.dark .icon-container.pink{background-color:#381000}.color_card.green,.horizontal_card.green,.icon-container.green{background-color:#FFEDE6}.dark .color_card.green,.dark .horizontal_card.green,.dark .icon-container.green{background-color:#381000}.color_card.blue,.horizontal_card.blue,.icon-container.blue{background-color:#FFEDE6}.dark .color_card.blue,.dark .horizontal_card.blue,.dark .icon-container.blue{background-color:#381000}"},{"filePath":"css/home.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\nbody{font-family:-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;min-height:100vh;transition:all 0.3s ease}body{background:white}body.dark{background:#000000}.hero-section{text-align:center;position:relative;padding:6.5rem 20px 160px 20px;min-height:400px;display:flex;align-items:center;justify-content:center;background:#f8fafc}@media (max-width: 768px){.hero-section{padding:60px 16px 160px 16px;min-height:300px}}.dark .hero-section{background:#111827}.hero-banner{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;z-index:1}.hero-content{position:relative;z-index:2;padding:0 20px;max-width:1200px;margin:0 auto}.hero-content h1{font-family:\"Inter Display\", \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;font-size:4rem;max-width:1000px;font-weight:600;margin-bottom:2.5rem;letter-spacing:-1px;line-height:4.5rem;color:#212121}@media (max-width: 768px){.hero-content h1{font-size:2.5rem;margin-bottom:1rem;letter-spacing:-.075rem;line-height:2.8rem}}.dark .hero-content h1{color:#ffffff}.hero-content p{font-size:1rem;line-height:1.4375rem;font-weight:400;color:black;max-width:620px;margin:0 auto;padding:0 16px}@media (max-width: 768px){.hero-content p{font-size:0.9rem;line-height:1.5}}.dark .hero-content p{color:#d1d5db}.features-section{position:relative;margin-top:-100px;padding:0 20px 80px 20px;z-index:10}.features-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:24px;max-width:860px;margin:0 auto}.features-grid .card h2{font-weight:600!important}.features-grid .card{background:white;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;box-shadow:0 4px 20px rgba(0, 0, 0, 0.08);transition:all 0.3s ease;margin:0}.dark .features-grid .card{background-color:rgb(28 28 28);border-color:#424242;box-shadow:0 4px 20px rgba(0, 0, 0, 0.3)}.features-grid .card:hover{transform:translateY(-4px);box-shadow:0 8px 30px rgba(0, 0, 0, 0.12)}.dark .features-grid .card:hover{box-shadow:0 8px 30px rgba(0, 0, 0, 0.4)}.feature-image{width:100%;height:200px;object-fit:cover}.feature-content{padding:24px;height:140px;display:flex;flex-direction:column;justify-content:flex-start}.feature-card h3{font-size:1.25rem;font-weight:600;color:#1a1a1a;margin-bottom:8px;transition:color 0.3s ease}.dark .feature-card h3{color:white}.feature-card p{font-size:0.95rem;color:#6b7280;line-height:1.5;transition:color 0.3s ease}.dark .feature-card p{color:#9ca3af}@media (max-width: 768px){.features-grid{grid-template-columns:1fr;gap:20px}.hero{padding:60px 16px 150px 16px}.features-section{margin-top:-80px;padding:0 16px 60px 16px}.theme-toggle{top:20px;right:20px;padding:10px 16px;font-size:14px}}@media (max-width: 1024px) and (min-width: 769px){.features-grid{grid-template-columns:repeat(2, 1fr)}}.build-with-ai-cta{display:inline-flex;align-items:center;gap:0.5rem;margin-top:2rem;padding:15px 20px;border:1px solid #FF7C4F!important;border-radius:9999px;background:#FF7C4F;color:#230800!important;font-size:1rem;font-weight:600;line-height:1;text-decoration:none!important;transition:color 0.3s, background 0.3s, border 0.3s}.build-with-ai-cta:hover{border-color:#230800!important;background:#230800;color:#F9F3EE!important}.build-with-ai-cta__icon{position:relative;display:inline-flex;overflow:hidden}.build-with-ai-cta__arrow{display:flex;transform:translateX(0%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1) 0.1s}.build-with-ai-cta__arrow--in{position:absolute;inset:0;transform:translateX(-100%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1)}.build-with-ai-cta:hover .build-with-ai-cta__arrow{transform:translateX(100%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1)}.build-with-ai-cta:hover .build-with-ai-cta__arrow--in{transform:translateX(0%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1) 0.1s}"},{"filePath":"css/horizontalCard.css","content":".horizontal_card{display:flex;border-radius:2px;overflow:hidden;margin:1rem 0;border:1px solid #110f0e1a;margin-top:20px;border-radius:8px;transition:border-color 0.2s ease}a.horizontal_card:hover,.dark a.horizontal_card:hover{border-color:#FF7C4F}.dark .horizontal_card{border-color:#ffffff1a}.horizontal_card .card-image-container{flex:1;min-width:45%}.horizontal_card .card-image-container img{width:100%;height:100%;border-radius:0;object-fit:cover;margin:0!important}.horizontal_card .card-content-container{flex:2;padding:40px 24px;display:flex;flex-direction:column}.horizontal_card .card-title{margin:0 0 0.75rem 0;font-size:1rem;font-weight:500;letter-spacing:0.01rem}.horizontal_card .card-description{font-size:1rem;line-height:1.5;flex-grow:1;font-weight:350}.horizontal_card .card-description p{margin:0;font-weight:350}.horizontal_card .card-link{margin-top:1rem;text-decoration:none;transition:color 0.2s ease-in-out;border:none;max-width:fit-content;font-weight:500}.horizontal_card .card-link:hover{text-decoration:underline}@media (max-width: 768px){.horizontal_card{flex-direction:column}.horizontal_card .card-image-container{min-width:100%}.horizontal_card .card-content-container{padding:20px 16px}}"},{"filePath":"css/horizontalColorCard.css","content":""},{"filePath":"css/iconCard.css","content":".icon-title-card{display:inline-flex;flex-direction:column;align-items:center;text-decoration:none;margin:0 auto}.icon-container svg{width:32px;height:32px;color:#5b21b6}.item-title{font-weight:500;text-align:center;margin:0;font-size:0.9rem}.icon-container{width:50px;height:50px;border-radius:50%;background-color:#ede9fe;margin-bottom:1rem;display:flex;justify-content:center;align-items:center}.dark .icon-container{background-color:#4c1d95}.icon-container svg{width:24px;height:24px;color:#000}.dark .icon-container svg{color:#fff}"},{"filePath":"css/logoCarousel.css","content":"@keyframes scroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}.logo-carousel-container{padding:2rem 0;border:1px solid #110f0e1a;border-radius:2px;margin-top:20px}.dark .logo-carousel-container{border-color:#333}.carousel-title{font-size:1.25rem;font-weight:500;margin-bottom:2rem;margin-top:1.5rem;padding:0 2rem}.logo-carousel-scroller{overflow:hidden;position:relative}.logo-track{display:flex;width:calc(200px * var(--logo-count));animation:scroll 12s linear infinite}.logo-track a{text-decoration:none;color:inherit;border:none}.logo-item{width:100px;height:80px;display:flex;justify-content:center;align-items:center;flex-shrink:0;transition:transform 0.2s ease}.logo-item:hover{transform:scale(1.1)}.logo-item svg{max-width:100%;max-height:56px;opacity:0.95;transition:opacity 0.2s ease;border-radius:8px}.logo-item:hover svg{opacity:1}.explore-link{display:block;width:fit-content;margin-left:2rem;margin-top:1.5rem;margin-bottom:0;font-size:1rem;font-weight:500;color:#333;text-decoration:underline;transition:color 0.2s ease;border-bottom:none!important}.dark .explore-link{color:#eee}.explore-link:hover{color:#e88178}"},{"filePath":"css/style.css","content":"@import url(\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700\u0026family=Inter+Display:wght@400;500;600;700\u0026display=swap\");@import url(\"./filterableTable.css\");div.card .prose a.link{color:#007bff;text-decoration:underline;font-weight:500}div.card .prose a.link:visited{color:#551a8b}div.card .prose a.link:hover{color:#0056b3;text-decoration:underline}.prose :where(code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)){color:red;font-family:\"Roboto Mono\", monospace;font-size:13px;font-weight:300;line-height:inherit!important}.overview_cards_container .card{max-width:269px!important}.card-group{justify-items:baseline}.dark .group img{background-color:transparent!important}.param-head{div[data-component-part=\"field-name\"] {\n color: #000 !important;\n }}.dark .param-head{div[data-component-part=\"field-name\"] {\n color: #fff !important;\n }}h1,h2,h3,h4,h5,h6{font-weight:600!important;font-family:\"Inter Display\", \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif}.block.absolute.inset-0.overflow-hidden{background:none!important}.banner_img_cover{border-radius:8px}table th{text-align:left!important}.color-value{display:flex;align-items:center;justify-content:space-between;gap:6px}.color-swatch{width:14px;height:14px;border-radius:3px;flex-shrink:0}.color-swatch--bordered{border:1px solid #E0E0E0}.tokens-grid table{width:100%}.tokens-grid td:first-child{width:120px}.tokens-grid td:last-child code{font-size:12px;white-space:nowrap}.token-swatch{display:inline-block;width:48px;height:48px;border-radius:6px;vertical-align:middle}.token-radius{display:inline-block;width:48px;height:48px;background-color:#E0E0E0;vertical-align:middle;margin-right:8px}.token-space{display:inline-block;height:24px;background-color:#2f98ff;border-radius:2px;vertical-align:middle;margin-right:8px;min-width:2px}.token-size{display:inline-block;background-color:#2f98ff;border-radius:4px;vertical-align:middle;margin-right:8px}.token-width{display:inline-block;width:48px;height:32px;background-color:#ffffff;border:solid #212121;border-radius:4px;vertical-align:middle;margin-right:8px}.token-typography-preview{padding:16px;background-color:#f5f5f5;border-radius:8px;margin:12px 0 24px 0;font-family:-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif}.dark .token-typography-preview{background-color:#2a2a2a}.token-animation-preview{padding:24px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:16px}.dark .token-animation-preview{background-color:#2a2a2a}.animation-demo{width:48px;height:48px;background-color:#2f98ff;border-radius:8px;transition:transform 200ms cubic-bezier(0.44, 0, 0.4, 1)}.animation-demo:hover{transform:scale(1.2)}.phase-timeline-circle{background-color:#fff}.dark .phase-timeline-circle{background-color:#0e0b0c}"},{"filePath":"css/filterableTable.css","content":".filterable-table-container{width:100%;max-width:100%;margin:0 0 1.5rem 0!important}div:has(>.filterable-table-container){margin-top:0!important}.filterable-table-container *,.filterable-table-container *::before,.filterable-table-container *::after{box-sizing:border-box}.filterable-table-controls{display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem}@media (min-width: 768px){.filterable-table-controls{flex-direction:row;align-items:center;justify-content:space-between}}.filterable-table-search{flex:1;max-width:400px}.filterable-table-search-input{width:100%;padding:0.625rem 1rem;border:1px solid #e5e7eb;border-radius:8px;font-size:0.875rem;background-color:#fff;color:#1f2937;transition:border-color 0.2s ease, box-shadow 0.2s ease}.filterable-table-search-input:focus{outline:none;border-color:#FF7C4F;box-shadow:0 0 0 3px rgba(255, 124, 79, 0.1)}.filterable-table-search-input::placeholder{color:#9ca3af}.dark .filterable-table-search-input{background-color:#1f2937;border-color:#374151;color:#f9fafb}.dark .filterable-table-search-input:focus{border-color:#FF7C4F;box-shadow:0 0 0 3px rgba(255, 124, 79, 0.2)}.dark .filterable-table-search-input::placeholder{color:#6b7280}.filterable-table-filters{display:flex;flex-wrap:wrap;gap:0.75rem;align-items:center}.filterable-table-select{padding:0.625rem 2rem 0.625rem 1rem;border:1px solid #e5e7eb;border-radius:8px;font-size:0.875rem;background-color:#fff;color:#1f2937;cursor:pointer;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 0.75rem center;transition:border-color 0.2s ease}.filterable-table-select:focus{outline:none;border-color:#FF7C4F}.dark .filterable-table-select{background-color:#1f2937;border-color:#374151;color:#f9fafb;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\")}.dark .filterable-table-select:focus{border-color:#FF7C4F}.filterable-table-clear-btn{padding:0.625rem 1rem;border:none;border-radius:8px;font-size:0.875rem;background-color:#fee2e2;color:#b91c1c;cursor:pointer;transition:background-color 0.2s ease}.filterable-table-clear-btn:hover{background-color:#fecaca}.dark .filterable-table-clear-btn{background-color:#450a0a;color:#fca5a5}.dark .filterable-table-clear-btn:hover{background-color:#7f1d1d}.filterable-table-results-count{font-size:0.875rem;color:#6b7280;margin-bottom:0.75rem}.dark .filterable-table-results-count{color:#9ca3af}.filterable-table-wrapper{overflow:hidden;border-radius:8px;border:1px solid #e5e7eb}.dark .filterable-table-wrapper{border-color:#374151}table.filterable-table{width:100%;border-collapse:collapse;border-spacing:0;font-size:0.875rem;table-layout:auto;margin:0;padding:0;border:none}table.filterable-table thead{background-color:#f9fafb}.dark table.filterable-table thead{background-color:#1f2937}table.filterable-table th{padding:0.75rem 1rem;text-align:left;font-weight:600;color:#374151;border:none;border-bottom:1px solid #e5e7eb;white-space:nowrap;background-color:#f9fafb}.dark table.filterable-table th{color:#e5e7eb;border-bottom-color:#374151;background-color:#1f2937}table.filterable-table td{padding:0.75rem 1rem;color:#4b5563;border:none;border-bottom:1px solid #e5e7eb;vertical-align:top;background-color:#fff}.dark table.filterable-table td{background-color:#111827;color:#d1d5db;border-bottom-color:#374151}table.filterable-table tbody tr:hover td{background-color:#f3f4f6}.dark table.filterable-table tbody tr:hover td{background-color:#1f2937}table.filterable-table tbody tr:last-child td{border-bottom:none}table.filterable-table th:first-child,table.filterable-table td:first-child{padding-left:1.25rem}table.filterable-table th:last-child,table.filterable-table td:last-child{padding-right:1.25rem}table.filterable-table code{font-size:0.8125rem;padding:0.125rem 0.375rem;border-radius:4px;background-color:#f3f4f6;color:#1f2937;font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace}.dark table.filterable-table code{background-color:#374151;color:#e5e7eb}.filterable-table-compatibility{font-size:0.8125rem;line-height:1.75}.filterable-table-no-results{text-align:center;padding:2rem 1rem;color:#6b7280}.dark .filterable-table-no-results{color:#9ca3af}"},{"filePath":"css/componentTree.css","content":".component-tree-container{border-radius:8px;padding:20px;border:1px solid #e5e7eb}.component-tree-connector{color:#9ca3af;user-select:none}.component-tree-name{font-weight:500;color:#111827}.component-tree-goes-into{margin-left:10px;padding:2px 8px;border-radius:4px;background-color:#f3f4f6;color:#6b7280;font-size:11px;font-weight:400}.component-tree-slot{margin-left:8px;padding:2px 8px;border-radius:4px;background-color:#dbeafe;color:#1d4ed8;font-size:11px;font-weight:500}.component-tree-note{margin-left:10px;color:#6b7280;font-size:12px;font-style:italic}.component-tree-legend{display:flex;align-items:center;gap:20px;padding-top:16px;margin-top:16px;border-top:1px solid #e5e7eb;font-size:12px;color:#6b7280}.dark .component-tree-container{border-color:#374151}.dark .component-tree-connector{color:#6b7280}.dark .component-tree-name{color:#f9fafb}.dark .component-tree-goes-into{background-color:#374151;color:#d1d5db}.dark .component-tree-slot{background-color:#1e3a8a;color:#93c5fd}.dark .component-tree-note{color:#9ca3af}.dark .component-tree-legend{border-top-color:#374151;color:#9ca3af}"},{"filePath":"css/designSystem.css","content":":root{--ds-color-brand: #2f98ff;--ds-color-brand-light: #e8f2ff;--ds-color-brand-muted: rgba(47, 152, 255, 0.12);--ds-color-success: #1a8a5c;--ds-color-success-light: #edf8f2;--ds-color-success-muted: rgba(26, 138, 92, 0.12);--ds-color-warning: #c47a20;--ds-color-warning-light: #fef6eb;--ds-color-warning-muted: rgba(196, 122, 32, 0.12);--ds-color-error: #c44040;--ds-color-error-light: #fef0f0;--ds-color-text: #1c1b18;--ds-color-text-secondary: #5c5953;--ds-color-text-muted: #9d9a92;--ds-color-border: #e4e2dd;--ds-color-border-hover: #d0cec8;--ds-color-bg-page: #f5f4f1;--ds-color-bg-surface: #ffffff;--ds-color-bg-subtle: #fafaf8}.dark{--ds-color-brand: #60a5fa;--ds-color-brand-light: #1e3a8a;--ds-color-brand-muted: rgba(96, 165, 250, 0.15);--ds-color-success: #34d399;--ds-color-success-light: #064e3b;--ds-color-success-muted: rgba(52, 211, 153, 0.15);--ds-color-warning: #fbbf24;--ds-color-warning-light: #78350f;--ds-color-warning-muted: rgba(251, 191, 36, 0.15);--ds-color-error: #f87171;--ds-color-error-light: #7f1d1d;--ds-color-text: #f3f4f6;--ds-color-text-secondary: #d1d5db;--ds-color-text-muted: #9ca3af;--ds-color-border: #374151;--ds-color-border-hover: #4b5563;--ds-color-bg-page: #0a0a0a;--ds-color-bg-surface: #111827;--ds-color-bg-subtle: #1f2937}.ds-token-row-btn{display:block;width:100%;padding:12px;border:none;border-bottom:1px solid var(--ds-color-bg-subtle);background:var(--ds-color-bg-surface);cursor:pointer;text-align:left;transition:background 120ms ease}.ds-token-row-btn:last-child{border-bottom:none}.ds-token-row-btn:hover{background:var(--ds-color-bg-subtle)}.ds-token-row-btn.selected{background:var(--ds-color-brand-light)}.ds-token-row-name{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:11px;color:var(--ds-color-text);font-weight:500}.ds-token-row-value{font-size:11px;color:var(--ds-color-text-muted);margin-top:2px;display:flex;justify-content:space-between;align-items:center}.ds-token-color-swatch{display:inline-flex;align-items:center;gap:4px}.ds-token-color-box{width:12px;height:12px;border-radius:2px;border:1px solid var(--ds-color-border)}.ds-mode-toggle-group{display:inline-flex;background:var(--ds-color-bg-subtle);border-radius:8px;padding:3px;border:1px solid var(--ds-color-border)}.ds-mode-toggle-btn{padding:8px 14px;border:none;border-radius:6px;background:transparent;color:var(--ds-color-text-muted);font-weight:500;font-size:12px;cursor:pointer;transition:all 120ms ease}.ds-mode-toggle-btn.active{background:var(--ds-color-bg-surface);color:var(--ds-color-text);box-shadow:0 1px 3px rgba(0, 0, 0, 0.08)}.ds-category-pills{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:12px}.ds-category-pill{padding:5px 10px;border:none;border-radius:6px;background:var(--ds-color-bg-subtle);color:var(--ds-color-text-secondary);font-size:11px;font-weight:500;cursor:pointer;text-transform:capitalize;transition:all 120ms ease}.ds-category-pill.active{background:var(--ds-color-brand);color:#fff}.ds-tree-item{border-radius:8px;padding:10px 12px;margin:4px 0;cursor:pointer;transition:all 120ms ease;background:var(--ds-color-bg-subtle);border:2px solid var(--ds-color-border)}.ds-tree-item.depth-2{padding:6px 8px}.ds-tree-item.selected{background:var(--ds-color-warning-light);border-color:var(--ds-color-warning);box-shadow:0 0 0 3px rgba(196, 122, 32, 0.1)}.ds-tree-item.highlighted{background:var(--ds-color-success-light);border-color:var(--ds-color-success);box-shadow:0 0 0 3px rgba(26, 138, 92, 0.1)}.ds-tree-item.default{cursor:default}.ds-tree-item-label{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-weight:600;font-size:12px;color:var(--ds-color-text-secondary);display:flex;align-items:center;gap:8px}.ds-tree-item.depth-2 .ds-tree-item-label{font-size:11px}.ds-tree-item.selected .ds-tree-item-label{color:var(--ds-color-warning)}.ds-tree-item.highlighted .ds-tree-item-label{color:var(--ds-color-success)}.ds-tree-item-children{margin-top:8px}.ds-highlight-wrapper{position:relative;border-radius:inherit}.ds-highlight-overlay{position:absolute;inset:-2px;border:2px solid var(--ds-color-success);border-radius:inherit;background:var(--ds-color-success-muted);pointer-events:none;transition:all 200ms ease}.ds-control-panel{display:flex;gap:8px;align-items:center;margin-bottom:16px;flex-wrap:wrap}.ds-reset-btn{padding:8px 12px;border:1px solid rgba(196, 64, 64, 0.4);border-radius:4px;background:var(--ds-color-bg-surface);color:var(--ds-color-error);font-size:12px;cursor:pointer}.ds-token-editor{margin-top:16px;padding:12px;background:var(--ds-color-bg-subtle);border-radius:8px;border:1px solid var(--ds-color-border)}.ds-token-editor-label{font-size:10px;font-weight:700;color:var(--ds-color-text-muted);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:10px}.ds-token-editor-affects{margin-top:10px;font-size:10px;color:var(--ds-color-text-muted)}.ds-token-editor-affects-item{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;color:var(--ds-color-success)}.ds-component-selector{padding:12px}.ds-component-selector-empty{color:var(--ds-color-text-muted);font-size:12px;font-style:italic}.ds-component-selector-title{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:14px;font-weight:600;margin-bottom:12px}.ds-component-token-item{padding:10px;background:var(--ds-color-bg-subtle);border-radius:4px;margin-bottom:8px}.ds-component-token-name{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:11px;font-weight:500;margin-bottom:8px;color:var(--ds-color-text)}.ds-main-grid{display:grid;grid-template-columns:260px 1fr;gap:20px}.ds-preview-section{display:flex;flex-direction:column;gap:16px}.ds-preview-card{padding:20px;background:var(--ds-color-bg-page);border-radius:0 0 12px 12px}.ds-legend{display:flex;gap:16px;font-size:11px;color:var(--ds-color-text-muted)}.ds-legend-item{display:flex;align-items:center;gap:8px}.ds-legend-box{width:14px;height:14px;border-radius:4px}.ds-legend-box.affected{background:var(--ds-color-success-light);border:2px solid var(--ds-color-success)}.ds-legend-box.selected{background:var(--ds-color-warning-light);border:2px solid var(--ds-color-warning)}.ds-preview-label{display:block;font-weight:500}.ds-preview-input{background:var(--ds-color-bg-surface)}"},{"filePath":"css/stylingVariables.css","content":".token-swatch{display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #e0e0e0;vertical-align:middle}.dark .token-swatch{border-color:#4b5563}.token-radius{display:inline-block;width:32px;height:32px;background:#2f98ff;vertical-align:middle}.dark .token-radius{background:#60a5fa}.token-space{display:inline-block;height:24px;background:#2f98ff;vertical-align:middle}.dark .token-space{background:#60a5fa}.tokens-grid{margin:1rem 0}.tokens-grid table{width:100%}.tokens-grid td:first-child{width:100px}"},{"filePath":"css/themeBuilder.css","content":".theme-builder-container{border:1px solid #e5e7eb;border-radius:12px;overflow:hidden;background:#fafafa}.theme-builder-header{background:white;padding:16px 20px;border-bottom:1px solid #e5e7eb}.theme-builder-title{margin:0 0 12px 0;font-size:16px;font-weight:600;color:#1a1a1a}.theme-builder-presets{display:flex;flex-wrap:wrap;gap:8px}.theme-builder-preset-btn{padding:6px 12px;border:1px solid #e5e7eb;border-radius:6px;background:white;color:#1a1a1a;cursor:pointer;font-size:13px;font-weight:500}.theme-builder-preset-btn.active{border:2px solid #2f98ff;background:#eff6ff;color:#2f98ff}.theme-builder-grid{display:grid;grid-template-columns:1fr 1fr;min-height:500px}.theme-builder-tokens{border-right:1px solid #e5e7eb;background:white;overflow:auto;max-height:600px}.theme-builder-group{border-bottom:1px solid #e5e7eb}.theme-builder-group-header{width:100%;padding:12px 16px;background:none;border:none;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-size:14px;font-weight:600;color:#1a1a1a}.theme-builder-group-content{padding:0 16px 16px}.theme-builder-token-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-top:1px solid #f3f4f6}.theme-builder-token-label{font-size:13px;color:#4b5563}.theme-builder-preview-panel{padding:20px;background:#f8f9fa;transition:background 200ms ease}.theme-builder-preview-panel.dark-bg{background:#0f0f0f}.theme-builder-preview-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.theme-builder-preview-label{font-size:14px;font-weight:600;color:#1a1a1a}.theme-builder-theme-toggle{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid #e5e7eb;border-radius:6px;background:white;color:#6b7280;cursor:pointer;font-size:11px;font-weight:500}.theme-builder-theme-toggle.dark{border-color:#374151;background:#1f2937;color:#e5e7eb}.code-preview-container{margin-top:16px;border-radius:8px;overflow:hidden;border:1px solid #e5e7eb}.code-preview-header{display:flex;align-items:center;justify-content:space-between;background:#f8f9fa;border-bottom:1px solid #e5e7eb;padding:0 12px}.code-preview-tabs{display:flex;gap:0}.code-preview-tab{padding:10px 16px;background:transparent;border:none;border-bottom:2px solid transparent;color:#6b7280;cursor:pointer;font-size:13px;font-weight:500;font-family:monospace}.code-preview-tab.active{border-bottom-color:#2f98ff;color:#2f98ff}.code-preview-copy-btn{display:flex;align-items:center;gap:6px;padding:6px 10px;background:transparent;border:1px solid #e5e7eb;border-radius:6px;color:#6b7280;cursor:pointer;font-size:12px;font-weight:500;transition:all 150ms ease}.code-preview-copy-btn.copied{background:#dcfce7;border-color:#86efac;color:#16a34a}.code-preview-code{background:#1a1a1a;color:#e5e7eb;padding:16px;margin:0;overflow:auto;font-size:12px;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;max-height:280px;line-height:1.5}.theme-builder-input-text{padding:6px 8px;border:1px solid #e5e7eb;border-radius:4px;font-size:12px;background:white;color:#1a1a1a}.theme-builder-input-text.monospace{font-family:monospace}.dark .theme-builder-container{background:#1f2937;border-color:#374151}.dark .theme-builder-header{background:#111827;border-bottom-color:#374151}.dark .theme-builder-title{color:#f3f4f6}.dark .theme-builder-preset-btn{background:#1f2937;border-color:#4b5563;color:#e5e7eb}.dark .theme-builder-preset-btn.active{background:#1e3a8a;border-color:#3b82f6;color:#93c5fd}.dark .theme-builder-tokens{background:#111827;border-right-color:#374151}.dark .theme-builder-group{border-bottom-color:#374151}.dark .theme-builder-group-header{color:#f3f4f6}.dark .theme-builder-token-row{border-top-color:#374151}.dark .theme-builder-token-label{color:#9ca3af}.dark .theme-builder-preview-panel{background:#0a0a0a}.dark .theme-builder-preview-label{color:#f3f4f6}.dark .theme-builder-theme-toggle{background:#1f2937;border-color:#4b5563;color:#e5e7eb}.dark .code-preview-container{border-color:#374151}.dark .code-preview-header{background:#1f2937;border-bottom-color:#374151}.dark .code-preview-tab{color:#9ca3af}.dark .code-preview-tab.active{color:#60a5fa;border-bottom-color:#60a5fa}.dark .code-preview-copy-btn{background:#1f2937;border-color:#4b5563;color:#9ca3af}.dark .code-preview-copy-btn.copied{background:#064e3b;border-color:#059669;color:#6ee7b7}.dark .theme-builder-input-text{background:#1f2937;border-color:#4b5563;color:#e5e7eb}"}],"page":{"pagePath":"changelogs/migration-guides/sdk-v1-to-v2","slug":"/changelogs/migration-guides/sdk-v1-to-v2","pageMetadata":{"title":"SDK v1 to v2","description":null,"href":"/changelogs/migration-guides/sdk-v1-to-v2"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const ApiEndpoint=({method,path})=>{const _components={a:`a`,..._provideComponents()};const getMethodColor=method=>{switch(method?.toUpperCase()){case`GET`:return`#0285c7`;case`POST`:return`#008d71`;case`PUT`:return`#16a34a`;case`PATCH`:return`#808080`;case`DELETE`:return`#dc2626`;default:return`#6b7280`}};const getEndpointUrl=(method,path)=>{const endpoints={\"POST /client-session\":`/api-reference/v2.4/api-reference/client-session-api/create-a-client-session`,\"PATCH /client-session\":`/api-reference/v2.4/api-reference/client-session-api/update-client-session`,\"POST /payments\":`/api-reference/v2.4/api-reference/payments-api/create-a-payment`,\"POST /payments/\u003cYOUR-PAYMENT-ID>/resume\":`/api-reference/v2.4/api-reference/payments-api/resume-payment`,\"POST /payments/\u003cYOUR-PAYMENT-ID>/adjust-authorization\":`/api-reference/v2.4/api-reference/payments-api/adjust-authorized-amount`,\"POST /payments/\u003cPAYMENT_ID>/cancel\":`/api-reference/v2.4/api-reference/payments-api/cancel-payment`,\"POST /payments/\u003cPAYMENT_ID>/refund\":`/api-reference/v2.4/api-reference/payments-api/refund-payment`,\"GET /payments/\u003cPAYMENT_ID>\":`/api-reference/v2.4/api-reference/payments-api/get-a-payment`,\"GET /payment-instruments\":`/api-reference/v2.4/api-reference/payment-methods-api/list-saved-payment-methods`,\"DELETE /payment-instruments/\u003cPAYMENT_METHOD_TOKEN>\":`/api-reference/v2.4/api-reference/payment-methods-api/delete-payment-method-payment-methods-token-delete`};const key=`${method?.toUpperCase()} ${path}`;return endpoints[key]||`#`};const getPrettyPath=(method,path)=>{const pathMapping={\"POST /payments/\u003cYOUR-PAYMENT-ID>/resume\":`/payments/{paymentId}/resume`,\"POST /payments/\u003cYOUR-PAYMENT-ID>/adjust-authorization\":`/payments/{paymentId}/adjust-authorization`,\"POST /payments/\u003cPAYMENT_ID>/cancel\":`/payments/{paymentId}/cancel`,\"POST /payments/\u003cPAYMENT_ID>/refund\":`/payments/{paymentId}/refund`,\"GET /payments/\u003cPAYMENT_ID>\":`/payments/{paymentId}`,\"DELETE /payment-instruments/\u003cPAYMENT_METHOD_TOKEN>\":`/payment-instruments/{paymentMethodToken}`};const key=`${method?.toUpperCase()} ${path}`;return pathMapping[key]||path};const methodColor=getMethodColor(method);const url=getEndpointUrl(method,path);const displayPath=getPrettyPath(method,path);return _jsx(`div`,{style:{display:`inline-flex`,alignItems:`center`,cursor:`pointer`,margin:`2px 0`,padding:`4px`,paddingRight:`6px`,background:`rgb(245, 245, 245)`,borderRadius:`6px`,whiteSpace:`nowrap`,textDecoration:`none`},children:_jsxs(_components.a,{href:url,target:`_blank`,rel:`noopener noreferrer`,style:{textDecoration:`none`,border:`none`},children:[_jsx(`span`,{style:{display:`inline-block`,whiteSpace:`nowrap`,padding:`0 8px`,fontSize:`13px`,lineHeight:`23px`,borderRadius:`6px`,fontWeight:400,backgroundColor:methodColor,color:`white`,border:`none`},children:method.toUpperCase()}),_jsx(`code`,{style:{padding:`0`,marginLeft:`4px`,fontFamily:`monospace`,color:methodColor,border:`none`,textDecorationColor:methodColor},children:displayPath})]})})};function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Tab,Table,Tabs,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(Tabs,{children:[_jsxs(Tab,{title:`Web`,id:`web`,\"data-child-heading-ids\":`[\"migrating-from-v1-to-v2\",\"key-highlights\",\"initializing-universal-checkout\",\"initialize-vault-manager\",\"other-initialization-changes\",\"automatic-payment-creation\",\"ontokenizesuccess-and-onresumesuccess-change\",\"improved-3ds\",\"payment-options-updates\",\"setters-removed\",\"allowedpaymentmethods-removed\",\"client-session-actions-automation\",\"submit-button-updates\",\"styling-customization-changes\",\"miscellaneous-updates\",\"deprecated-items\"]`,children:[_jsx(Heading,{level:`2`,id:`migrating-from-v1-to-v2`,children:`Migrating from v1 to v2`}),_jsx(_components.p,{children:`The latest Web SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.`}),_jsx(Note,{children:_jsx(_components.p,{children:`The latest version v2 of Universal Checkout Web SDK introduces a few breaking changes.`})}),_jsx(Note,{children:_jsx(_components.p,{children:`Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.`})}),_jsx(Heading,{level:`2`,id:`key-highlights`,children:`Key Highlights`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`There is a brand new way to `,_jsx(_components.a,{href:`#initializing-universal-checkout`,children:`initialize checkout`})]}),`\n`,_jsxs(_components.li,{children:[`Universal Checkout now `,_jsx(_components.a,{href:`#automatic-payment-creation`,children:`creates payments automatically`}),` in a more secure manner.`]}),`\n`,_jsx(_components.li,{children:`Some of the earlier payment method options and methods are no longer required, therefore removed or addressed via other calls or functions.`}),`\n`,_jsxs(_components.li,{children:[`The way to `,_jsx(_components.a,{href:`/checkout/drop-in/customization/web`,children:`customize merchant branding through styling`}),` has changed.`]}),`\n`]}),_jsx(_components.p,{children:`For more details about the new features and to see specific code examples, refer to the other sections of this guide.`}),_jsx(Heading,{level:`2`,id:`initializing-universal-checkout`,children:`Initializing Universal Checkout`}),_jsx(_components.p,{children:`In the new Primer Universal Checkout Web SDK, you’ll find that the boilerplate for initializing is reduced to just one line of code!`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// To initialize Universal Checkout`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` universalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),_jsx(_components.p,{children:`Compare with previous v1 SDK that required you to write more code:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v1 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` loadPrimer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// If the package is loaded from npm`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`credentials:`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` })`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` checkout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`checkout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`initialize-vault-manager`,children:`Initialize Vault Manager`}),_jsx(_components.p,{children:`In the v2 SDK, you can initialize the vault manager using the following function:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// to initialize Vault Manager`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` vaultManager`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showVaultManager`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`other-initialization-changes`,children:`Other Initialization Changes`}),_jsxs(_components.p,{children:[`The new Universal Checkout initialization makes integration much simpler and easier. As a result, developers are no longer required to construct the Primer object using `,_jsx(_components.code,{children:`new Primer()`}),` call. Instead, you need to use `,_jsx(_components.code,{children:`Primer.showUniversalCheckout()`}),` or `,_jsx(_components.code,{children:`Primer.showVaultManager()`}),`.`]}),_jsx(_components.p,{children:`Another set of changes that you need to take into account is when the package is loaded from npm:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`loadPrimer()`}),` call is now removed from the latest SDK. When the user approaches checkout, if you need to preload Primer Universal Checkout SDK, use `,_jsx(_components.code,{children:`preloadPrimer()`}),` instead. Under the hood, `,_jsx(_components.code,{children:`loadPrimer()`}),` is automatically called by `,_jsx(_components.code,{children:`Primer.showUniversalCheckout()`}),` so you do not need to call `,_jsx(_components.code,{children:`loadPrimer()`}),` explicitly anymore.`]}),`\n`,_jsxs(_components.li,{children:[`It is no longer required to import the CSS file anymore. `,_jsx(_components.code,{children:`Primer.showUniversalCheckout()`}),` will automatically load it.`]}),`\n`]}),_jsxs(_components.p,{children:[`To find out more about Universal Checkout initialization process, checkout the `,_jsx(_components.a,{href:`/checkout/drop-in/overview#web`,children:`Web Get Started Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`automatic-payment-creation`,children:`Automatic Payment Creation`}),_jsx(_components.p,{children:`Universal Checkout Web SDK v2 now creates, resumes and handles payments under the hood 🎉`}),_jsx(_components.p,{children:`The automatic payment flow is activated by default.`}),_jsx(_components.p,{children:`When migrating to Web SDK v2, you need to use the following simpler code for payment creation:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutComplete`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // e.g. Show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`]})})}),_jsx(_components.p,{children:`Earlier, the payment creation code was more complex:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v1 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`checkout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`paymentMethodTokenData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Create a payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onResumeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`resumeTokenData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Resume the payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`]})})}),_jsxs(_components.p,{children:[`In the earlier versions, you had to manually create and resume payments using `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),`. `,_jsx(_components.strong,{children:`Not anymore.`})]}),_jsxs(_components.p,{children:[`The functions `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` are no longer required to be used. This essentially means that you do not need to make any API calls for creating and resuming payments.`]}),_jsx(_components.p,{children:`Those can be edited out of your integration code.`}),_jsx(_components.p,{children:_jsx(_components.em,{children:`No complex integrations to maintain anymore!`})}),_jsxs(_components.p,{children:[`With the new SDK, you can simply listen to the `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` webhook and the callback `,_jsx(_components.code,{children:`onCheckoutComplete`}),` to process successful and even more secure payments as compared to the earlier versions.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=299b523dd997bdbe66475c1507d78e56`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`813`,height:`813`,\"data-path\":`images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=280\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=7ef2a0aa614c8b5b08db1cf1a93687fd 280w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=560\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=c98b5400809a74cd37d39aab8cf7bc15 560w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=840\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=36628c9667e033c8c98c8301a323a8c6 840w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=79b70ff8e23a3688d16ab3ac64f2c9fb 1100w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=c65e2eb7581c3b376f20e00bcd8365bb 1650w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/web/automatic-payment-flow.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=2d755d7ab3b1ae03b6d9e94e8c657134 2500w`})}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[`Should you wish to go back to the manual flow of v1, pass the option `,_jsx(_components.code,{children:`paymentHandling: \"MANUAL\"`}),`. See `,_jsx(_components.a,{href:`/checkout/advanced/manual-payment-creation#web`,children:`Manual Payment Creation Guide`}),` for details.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` paymentHandling:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 'MANUAL'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // To implement`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onResumeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // To implement`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` /* Other options */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`]})})})]}),_jsx(Heading,{level:`2`,id:`ontokenizesuccess-and-onresumesuccess-change`,children:`onTokenizeSuccess and onResumeSuccess change`}),_jsxs(_components.p,{children:[`In the earlier version, `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` had to return specific data to trigger various scenarios. This proved to be quite error-prone and not self-explanatory.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`paymentMethodTokenData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle success`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` throw`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Error message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle error message`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"...\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Continue the flow with a new client token`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Same for onResumeSuccess`})}),`\n`]})})}),_jsxs(_components.p,{children:[`This logic has been greatly improved in v2 by introducing a `,_jsx(_components.code,{children:`handler`}),` argument that contains the functions to continue.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`/* v2 */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`paymentMethodTokenData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle success`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleFailure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Error message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle failure with a custom error message`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`continueWithNewClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"...\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Continue the flow with a new client token`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onResumeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`paymentMethodTokenData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle success`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleFailure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Error message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Handle failure with a custom error message`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // or`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` handler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`continueWithNewClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"...\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Continue the flow with a new client token`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`improved-3ds`,children:`Improved 3DS`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`In Web SDK v2 the `,_jsx(_components.code,{children:`threeDSecure`}),` option is now completely removed from the Universal Checkout. Earlier, this option was provided to trigger 3DS at the time of tokenization.`]})}),_jsx(_components.p,{children:`In the latest SDK, the 3DS feature can be accessed without writing a single line of integration code by simply using workflows. You can be fully SCA-ready with a unified checkout across all your payment services including 3D Secure 2.0.`}),_jsxs(_components.p,{children:[`Once you add a 3DS pre-authorization Primer Connection to your Workflow, the `,_jsx(_components.a,{href:`/checkout/drop-in/overview#web`,children:`Universal Checkout`}),` feature will just do the right thing for you. It will present to your customer a fully in-context workflow that is optimized with 3D Secure flow on both web or mobile.`]}),_jsx(Heading,{level:`3`,id:`payment-options-updates`,children:`Payment Options Updates`}),_jsxs(_components.p,{children:[`The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2. Developers must now specify the order and customer details when creating the client session with `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`POST`,path:`/client-session`})}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`purchaseInfo`}),` and `,_jsx(_components.code,{children:`orderDetails`}),` (in the SDK)`]}),_jsx(_components.td,{children:`Pass the order details through the client-session API call.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customerDetails`}),` (in the SDK)`]}),_jsx(_components.td,{children:`Pass the customer information through the client-session API call.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customerId`}),` (in the SDK)`]}),_jsxs(_components.td,{children:[`Specify the `,_jsx(_components.code,{children:`customerId`}),` through the client-session API call.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`countryCode`}),` (in the SDK)`]}),_jsxs(_components.td,{children:[`Pass `,_jsx(_components.code,{children:`order.countryCode`}),` through the client-session API call.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`businessDetails`}),` (in the SDK)`]}),_jsx(_components.td,{children:`Only needed for tax calculation using TaxJar. Removed. In the future, business details…`})]})]})]}),_jsx(Heading,{level:`2`,id:`setters-removed`,children:`Setters Removed`}),_jsx(_components.p,{children:`The Setters in Web SDK v1.x.x listed below have been removed. Now this information is retrieved by Universal Checkout through the client session.`}),_jsxs(_components.p,{children:[`Developers need to migrate their integration backend to use the latest Universal Checkout SDK v2 and update order details using `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`PATCH`,path:`/client-session`})}),`. The token obtained through the client-session API needs to be passed to the SDK with `,_jsx(_components.code,{children:`setClientToken(newClientToken)`}),` API call.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`setPurchaseInfo`}),` and `,_jsx(_components.code,{children:`setOrderDetails`}),` (in the SDK)`]}),_jsxs(_components.td,{children:[`Update the order in the client session, then call `,_jsx(_components.code,{children:`setClientToken(...)`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`setCustomerDetails`}),` (in the SDK)`]}),_jsxs(_components.td,{children:[`Update the customer in the client session, then call `,_jsx(_components.code,{children:`setClientToken(...)`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`setBusinessDetails`}),` (in the SDK)`]}),_jsx(_components.td,{children:`This has been completely removed`})]})]})]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` universalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`options`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`// Update client token`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`universalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`setClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'...'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),_jsx(Note,{children:_jsx(_components.p,{children:`Once you migrate your merchant backend, all your implementations will be able to properly display payment methods through the Primer Universal Checkout, regardless of the platform!`})}),_jsx(Heading,{level:`3`,id:`allowedpaymentmethods-removed`,children:`allowedPaymentMethods Removed`}),_jsxs(_components.p,{children:[`In the previous Primer Checkout v1.x.x, the option `,_jsx(_components.code,{children:`allowedPaymentMethods`}),` was used to filter and display the payment methods as required by a specific merchant integration. This is no longer necessary and has been completely removed in the latest SDK v2.`]}),_jsxs(_components.p,{children:[`The recently introduced `,_jsx(_components.strong,{children:`Checkout`}),` section in the Dashboard enables display of merchant-specific payment methods, based on the conditions defined by them.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`With Universal Checkout, Primer can now dynamically show payment methods in the user interface. It uses the conditions set up by you on the dashboard, along with the data passed in the client session call, to dynamically display only those payment methods that are applicable as per your selection and inputs.`})}),_jsx(_components.p,{children:_jsx(_components.em,{children:`All of this happens without a single line of code as part of merchant integration!`})}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/checkout/overview`,children:`How Universal Checkout works`}),` for details.`]}),_jsx(Heading,{level:`2`,id:`client-session-actions-automation`,children:`Client Session Actions Automation`}),_jsxs(_components.p,{children:[`Earlier versions of Primer Checkout SDK required you to integrate using `,_jsx(_components.code,{children:`onClientSessionActions`}),`.`]}),_jsxs(_components.p,{children:[`Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up “client session actions” via `,_jsx(_components.code,{children:`onClientsessionActions()`}),`.`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:`Developers are no longer required to call this function anymore and it has been removed from the SDK. Instead, now you need to set up the following callbacks:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onClientSessionUpdate`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onClientSessionUpdateStart`})}),`\n`]})]}),_jsxs(_components.p,{children:[`As a side effect of this usage change, the following callbacks have also been removed from the SDK in addition to `,_jsx(_components.code,{children:`onClientSessionActions`}),`. These callbacks are now replaced by the client session update call.`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onAmountChange`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onAmountChanging`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onAmountChangeError`})}),`\n`]}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[`The previous SDK version had Primer Checkout functionality that was sending you `,_jsx(_components.code,{children:`Client session actions`}),` in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal Web SDK v2.`]}),_jsxs(_components.p,{children:[`The latest SDK can now collect various customer data such as the `,_jsx(_components.code,{children:`billing address`}),`, `,_jsx(_components.code,{children:`customer contact`}),` details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.`]})]}),_jsxs(_components.p,{children:[`For more details, refer to the `,_jsx(_components.a,{href:`/checkout/checkout-builder`,children:`Universal Checkout Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`submit-button-updates`,children:`Submit Button Updates`}),_jsx(_components.p,{children:`If you have setup a custom submit button in the checkout user interface here is what you need to do in order to migrate from previous Primer Checkout Web SDK:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use the function `,_jsx(_components.code,{children:`submit()`}),` to implement a custom submit button. For details, see `,_jsx(_components.a,{href:`https://www.npmjs.com/package/@primer-io/checkout-web?activeTab=readme`,children:`Universal Checkout Submit button usage guide`}),`.`]}),`\n`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The option `,_jsx(_components.code,{children:`submitButton.visible`}),` is now renamed to `,_jsx(_components.code,{children:`submitButton.useBuiltInButton`}),`.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`styling-customization-changes`,children:`Styling Customization Changes`}),_jsxs(_components.p,{children:[`Earlier, the card input fields could be customized as per merchant checkout requirements using `,_jsx(_components.code,{children:`card.css`}),`.`]}),_jsxs(_components.p,{children:[`Now, you can instead use the `,_jsx(_components.code,{children:`style`}),` option to customize the style 🎨 for the entire Universal Checkout SDK and align with the merchant branding in a more cohesive and unified way!`]}),_jsxs(_components.p,{children:[`For more details, refer to the `,_jsx(_components.a,{href:`/checkout/drop-in/customization/web`,children:`Primer Universal Checkout Web SDK Styling Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`miscellaneous-updates`,children:`Miscellaneous Updates`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Card holder name display option`}),`\nThe option `,_jsx(_components.code,{children:`card.cardholderName.visible`}),` available in the previous version of Primer Checkout SDK has been removed altogether. You can continue to configure this setting through the Dashboard in the forthcoming release. Stay tuned!`]}),`\n`,_jsx(_components.p,{children:`In the meantime, if you need to show or hide the cardholder name field, please get in touch with us.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Renamed `,_jsx(_components.code,{children:`CheckoutOptions`})]}),`\nThe TypeScript `,_jsx(_components.code,{children:`CheckoutOptions`}),` is now renamed to `,_jsx(_components.code,{children:`UniversalCheckoutOptions`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Checkout object updates`}),`\nThe checkout object functions `,_jsx(_components.code,{children:`tokenize()`}),` and `,_jsx(_components.code,{children:`validate()`}),` are no longer available in Universal Checkout SDK v2.`]}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`deprecated-items`,children:`Deprecated Items`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Checkout Components`}),`\nCheckout Components are now sunset and no longer supported. The new Universal Checkout SDK does not contain the `,_jsx(_components.code,{children:`primer.render()`}),` function. Make sure you clean that up!`]}),`\n`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:`At Primer, we are all working hard towards a fully customisable payment framework that enables you to build any checkout that you want!`}),_jsx(_components.p,{children:`Stay tuned for more updates!`})]})]}),_jsxs(Tab,{title:`Android`,id:`android`,\"data-child-heading-ids\":`[\"migrating-from-v1-to-v2-2\",\"key-highlights-2\",\"automatic-payment-creation-2\",\"primer-listener-changes\",\"client-session-actions-automation-2\",\"payment-options-updates-2\",\"miscellaneous-updates-2\",\"resume-handler-updates\",\"removed-items\",\"class-primer%3A\",\"interface-primercheckoutlistener%3A\",\"class-primersettings%3A\"]`,children:[_jsx(Heading,{level:`2`,id:`migrating-from-v1-to-v2-2`,children:`Migrating from v1 to v2`}),_jsx(_components.p,{children:`The latest Android SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.`}),_jsx(Note,{children:_jsx(_components.p,{children:`The latest version v2 of Universal Checkout Android SDK introduces a few breaking changes.`})}),_jsx(Note,{children:_jsx(_components.p,{children:`Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.`})}),_jsx(Heading,{level:`2`,id:`key-highlights-2`,children:`Key Highlights`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Universal Checkout now `,_jsx(_components.a,{href:`#automatic-payment-creation`,children:`creates payments automatically`}),` in a more secure manner`]}),`\n`,_jsxs(_components.li,{children:[`Some of the earlier `,_jsx(_components.a,{href:`#payment-options-updates`,children:`payment method options`}),` are no longer required, therefore removed or addressed via other calls or functions`]}),`\n`,_jsxs(_components.li,{children:[`We’ve made major improvements to Universal Checkout’s `,_jsx(_components.a,{href:`#primer-listener-changes`,children:`listener`})]}),`\n`]}),_jsx(_components.p,{children:`For more details about the new features and to see specific code examples, refer to the other sections of this guide.`}),_jsx(Heading,{level:`2`,id:`automatic-payment-creation-2`,children:`Automatic Payment Creation`}),_jsx(_components.p,{children:`Universal Checkout Android SDK v2 now creates, resumes and handles payments under the hood 🎉`}),_jsx(_components.p,{children:`The automatic payment flow is activated by default.`}),_jsx(_components.p,{children:`When migrating to Android SDK v2, you need to use the following simpler code for payment creation:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` val`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` listener = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`object`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` : `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerCheckoutListener`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutCompleted`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(checkoutData: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerCheckoutData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // show an order confirmation screen`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(listener = listener)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(context, clientToken)`})]}),`\n`]})})}),_jsx(_components.p,{children:`Earlier, the payment creation code was more complex:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`26`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`26`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` val`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` listener = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`object`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` : `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`CheckoutEventListener`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutEvent`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(e: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`CheckoutEvent`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` when`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (e) {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` is`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` CheckoutEvent.TokenizationSuccess `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`->`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Create a payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` is`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` CheckoutEvent.ResumeSuccess `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`->`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Resume the payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(listener = listener)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(context, clientToken)`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`In the earlier versions, you had to manually create and resume payments when receiving `,_jsx(_components.code,{children:`CheckoutEvent.TokenizationSuccess`}),` and `,_jsx(_components.code,{children:`CheckoutEvent.ResumeSuccess`}),`. `,_jsx(_components.strong,{children:`Not anymore.`})]}),_jsxs(_components.p,{children:[`We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.`]}),_jsx(_components.p,{children:`Those can be edited out of your integration code.`}),_jsx(_components.p,{children:_jsx(_components.em,{children:`All this results in an even simpler integration to maintain!`})}),_jsxs(_components.p,{children:[`With the new SDK, you can simply listen to the `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` webhook and the callback `,_jsx(_components.code,{children:`onCheckoutCompleted`}),` to process successful and even more secure payments as compared to the earlier versions.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=6266f6fb6f260695fa27c996ba502add`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`813`,height:`813`,\"data-path\":`images/changelogs/sdk-v1-to-v2/android/flow.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=280\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=6b93a8d983af6eba0c8c9b67ec75551f 280w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=560\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=e023b0f2f6b63ab65b7f90abcfcc7fe4 560w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=840\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=f96949f015b0b7c4761b702e9bf0f95c 840w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=423ebf5f49c6fc241d46415d97869f63 1100w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=f9fef51c65a89defc1460692e486c055 1650w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/android/flow.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=9ca5f46141b0877e0165e07940b0f0d0 2500w`})}),_jsx(Heading,{level:`2`,id:`primer-listener-changes`,children:`Primer listener changes`}),_jsx(_components.p,{children:`We have completely changed how you are receiving events/callbacks from Android SDK.`}),_jsxs(_components.p,{children:[`Previously you had to use `,_jsx(_components.code,{children:`onCheckoutEvent`}),` callback that was receiving different events from the SDK. We have updated it to a more natural approach and now all events are translated to different callbacks:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.TokenizationSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`onTokenizeSuccess`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.ResumeSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`onResumeSuccess`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.Exit`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onDismissed`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.TokenizationError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onFailed`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.APIError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onFailed`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CheckoutEvent.ResumeError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onFailed`})})]})]})]}),_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Only relevant on the `,_jsx(_components.code,{children:`manual`}),` flow. Won’t be called if `,_jsx(_components.code,{children:`paymentHandling`}),` is `,_jsx(_components.code,{children:`AUTO`}),`, which is the default value`]})}),_jsxs(_components.p,{children:[`Moreover, we have renamed `,_jsx(_components.code,{children:`CheckoutEventListener`}),` → `,_jsx(_components.code,{children:`PrimerCheckoutListener`})]}),_jsx(Heading,{level:`2`,id:`client-session-actions-automation-2`,children:`Client Session Actions Automation`}),_jsxs(_components.p,{children:[`Earlier versions of Primer Checkout SDK required you to integrate using `,_jsx(_components.code,{children:`onClientSessionActions`}),`.`]}),_jsxs(_components.p,{children:[`Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up “client session actions” via `,_jsx(_components.code,{children:`onClientsessionActions()`}),`.`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:`Developers are no longer required to call this function anymore and it has been removed from the SDK. Instead, now you can set up the following callbacks:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onClientSessionUpdated`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onBeforeClientSessionUpdated`})}),`\n`]})]}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[`Earlier release of SDK had Primer Checkout functionality that was sending you `,_jsx(_components.code,{children:`Client session actions`}),` in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal Android SDK v2.`]}),_jsxs(_components.p,{children:[`The latest SDK can now collect various customer data such as the `,_jsx(_components.code,{children:`billing address`}),`, `,_jsx(_components.code,{children:`customer contact`}),` details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.`]})]}),_jsxs(_components.p,{children:[`For more details, refer to the `,_jsx(_components.a,{href:`/checkout/checkout-builder`,children:`Universal Checkout Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`payment-options-updates-2`,children:`Payment Options Updates`}),_jsx(_components.p,{children:`The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`]}),_jsxs(_components.p,{children:[`Developers must now specify the `,_jsx(_components.code,{children:`order`}),` and `,_jsx(_components.code,{children:`customer`}),` details when creating the client session with `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`POST`,path:`/client-session`})}),`.`]}),_jsxs(_components.p,{children:[`We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing `,_jsx(_components.code,{children:`PrimerConfig`}),` object to the SDK with various options:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`PrimerConfig`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(...))`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Now, you should be passing `,_jsx(_components.code,{children:`PrimerSettings`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`PrimerSettings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(...))`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`miscellaneous-updates-2`,children:_jsx(_components.strong,{children:`Miscellaneous Updates`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerSettings`}),` structure has been refactored and `,_jsx(_components.code,{children:`PrimerTheme`}),` has been integrated within it. Check the `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-e58ee6d184ff4cd7ae2f90c6b28aaaba`,children:`PrimerSettings API Reference`}),` for details.`]}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`PaymentMethodToken`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`PrimerPaymentMethodToken`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ResumeHandler`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`PrimerResumeDecisionHandler`})})]})]})]}),_jsx(Heading,{level:`2`,id:`resume-handler-updates`,children:`Resume handler updates`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`handler.handleError(error: Error)`}),` → `,_jsx(_components.code,{children:`handler.handleFailure(message: String?)`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`handler.handleNewClientToken(clientToken: String)`}),` → `,_jsx(_components.code,{children:`handler.continueWithNewClientToken(clientToken: String)`})]}),`\n`]}),_jsx(Heading,{level:`2`,id:`removed-items`,children:`Removed Items`}),_jsx(_components.p,{children:`All the deprecated methods in v1 have been removed and replaced with other methods where applicable:`}),_jsxs(Heading,{level:`3`,id:`class-primer`,children:[`Class `,_jsx(_components.code,{children:`Primer`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`initialize`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`configure`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`showCheckout`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`showUniversalCheckout`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`showVault`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`showVaultManager`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`showSuccess`})}),_jsx(_components.td,{children:`Removed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`showError`})}),_jsx(_components.td,{children:`Removed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`showProgressIndicator`})}),_jsx(_components.td,{children:`Removed`})]})]})]}),_jsxs(Heading,{level:`3`,id:`interface-primercheckoutlistener`,children:[`Interface `,_jsx(_components.code,{children:`PrimerCheckoutListener`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`onClientSessionActions`}),` `,_jsxs(_components.em,{children:[`→ `,_jsx(_components.strong,{children:`Removed`})]})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`onTokenAddedToVault`}),` → `,_jsx(_components.em,{children:`Removed`})]}),`\n`]}),_jsxs(Heading,{level:`3`,id:`class-primersettings`,children:[`Class `,_jsx(_components.code,{children:`PrimerSettings`}),`:`]}),_jsx(_components.p,{children:`All the deprecated classes in v1 have been removed:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`]}),_jsx(_components.p,{children:`Also, we have removed:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`PrimerConfig`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Business`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Address`})}),`\n`]})]}),_jsxs(Tab,{title:`iOS`,id:`ios`,\"data-child-heading-ids\":`[\"migrating-from-v1-to-v2-3\",\"key-highlights-3\",\"automatic-payment-creation-3\",\"primer-listener-changes-2\",\"client-session-actions-automation-3\",\"payment-options-updates-3\",\"miscellaneous-updates-3\",\"resume-handler-updates-2\",\"removed-items-2\"]`,children:[_jsx(Heading,{level:`2`,id:`migrating-from-v1-to-v2-3`,children:`Migrating from v1 to v2`}),_jsx(_components.p,{children:`The latest iOS SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.`}),_jsx(Note,{children:_jsx(_components.p,{children:`The latest version v2 of Universal Checkout iOS SDK introduces a few breaking changes.`})}),_jsx(Note,{children:_jsx(_components.p,{children:`Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be no longer supported.`})}),_jsx(Heading,{level:`2`,id:`key-highlights-3`,children:`Key Highlights`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Universal Checkout now `,_jsx(_components.a,{href:`#automatic-payment-creation`,children:`creates payments automatically`}),` in a more secure manner`]}),`\n`,_jsxs(_components.li,{children:[`Some of the earlier `,_jsx(_components.a,{href:`#payment-options-updates`,children:`payment method options`}),` are no longer required, therefore removed or addressed via other calls or functions`]}),`\n`,_jsx(_components.li,{children:`We’ve made major improvements to the SDK’s delegate and settings`}),`\n`]}),_jsx(_components.p,{children:`For more details about the new features and to see specific code examples, refer to the other sections of this guide.`}),_jsx(Heading,{level:`2`,id:`automatic-payment-creation-3`,children:`Automatic Payment Creation`}),_jsx(_components.p,{children:`Universal Checkout iOS SDK v2 now creates, resumes and handles payments under the hood 🎉`}),_jsx(_components.p,{children:`The automatic payment flow is activated by default.`}),_jsx(_components.p,{children:`When migrating to iOS SDK v2, you need to use the following simpler code for payment creation:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`20`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` PrimerSDK`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` MyViewController`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`UIViewController `}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` viewDidLoad`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` super`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`viewDidLoad`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Initialize the SDK with the default settings.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`delegate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`self`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` startUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`self`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`extension`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` MyViewController`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerDelegate `}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` primerDidCompleteCheckoutWithData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` data`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: CheckoutData) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Primer checkout completed with data`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`Earlier, the payment creation code was more complex:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`58`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`58`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` PrimerSDK`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` MyViewController`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`UIViewController `}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` viewDidLoad`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` super`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`viewDidLoad`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Initialize the SDK with the default settings.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` settings = `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`PrimerSettings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` amount`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: amount,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` currency`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: currency`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: settings)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`delegate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`self`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` startUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`on`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`self`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`extension`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:` MyViewController`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerDelegate `}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` clientTokenCallback`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` completion`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`@escaping`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`?, `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`Error`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`?) -> `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`Void`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // API call to fetch client token from your backend.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` fetchClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() { (token, err) `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`in`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` completion`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(token, err)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` paymentMethodToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: PaymentMethodToken, `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`resumeHandler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: ResumeHandlerProtocol) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Send the payment method token to your server to create a payment`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` sendPaymentMethodToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`token`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: paymentMethodToken) { (res, err) `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`in`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` err = err {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` resumeHandler.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handle`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`error`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: err)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` res = res {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` guard`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` requiredActionDic = res[`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"requiredAction\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`] as? [`}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`Any`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` clientToken = requiredActionDic[`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"clientToken\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`] as? `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`String`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` else`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` resumeHandler.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` return`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` resumeHandler.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handle`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`newClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: clientToken)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onResumeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` resumeToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`resumeHandler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: ResumeHandlerProtocol) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Resume the payment`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` sendResumeToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(resumeToken) { (res, err) `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`in`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` err = err {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` resumeHandler.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handle`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`error`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: err)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` res = res {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` resumeHandler.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`In the earlier versions, you had to manually create and resume payments when receiving `,_jsx(_components.code,{children:`CheckoutEvent.TokenizationSuccess`}),` and `,_jsx(_components.code,{children:`CheckoutEvent.ResumeSuccess`}),`. `,_jsx(_components.strong,{children:`Not anymore.`})]}),_jsxs(_components.p,{children:[`We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.`]}),_jsx(_components.p,{children:`Those can be edited out of your integration code.`}),_jsx(_components.p,{children:_jsx(_components.em,{children:`All this results in an even simpler integration to maintain!`})}),_jsxs(_components.p,{children:[`With the new SDK, you can simply listen to the `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` webhook and the callback `,_jsx(_components.code,{children:`onCheckoutCompleted`}),` to process successful and even more secure payments as compared to the earlier versions.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=da5edb526e0a52b7e2eab1b98edc19ab`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`813`,height:`813`,\"data-path\":`images/changelogs/sdk-v1-to-v2/ios/flow.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=280\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=5a17753465431cf6a3ce2e65837fb2b2 280w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=560\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=189592bc01cc21eb4931ce300e5291f5 560w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=840\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=42c060334cacda11bf72cfd5c2f55b4b 840w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=4e1685b90f0e47afd09511d582e191f5 1100w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=ad420e731174bac2535bfb56a267be5c 1650w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/ios/flow.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=c5cae4a5130e8de24bf3921c1d11ef23 2500w`})}),_jsx(Heading,{level:`2`,id:`primer-listener-changes-2`,children:`Primer listener changes`}),_jsxs(_components.p,{children:[`We have completely changed how you are receiving events via the `,_jsx(_components.code,{children:`PrimerDelegate`}),`.`]}),_jsx(_components.p,{children:`Previously you had to use the delegate functions that were returning different SDK events. We have updated it to a more natural approach and now all events are translated to different callbacks:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onTokenizeSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`primerDidTokenizePaymentMethod`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onResumeSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`primerDidResumeWith`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onDismiss`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`primerDidDismiss`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checkoutFailed`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`primerDidFailWithError`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onResumeError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`primerDidFailWithError`})})]})]})]}),_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Only relevant on the `,_jsx(_components.code,{children:`manual`}),` flow. Won’t be called if `,_jsx(_components.code,{children:`paymentHandling`}),` is `,_jsx(_components.code,{children:`AUTO`}),`, which is the default value`]})}),_jsx(Heading,{level:`2`,id:`client-session-actions-automation-3`,children:`Client Session Actions Automation`}),_jsxs(_components.p,{children:[`Earlier versions of Primer Checkout SDK required you to integrate using `,_jsx(_components.code,{children:`onClientSessionActions`}),`.`]}),_jsx(_components.p,{children:`Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up the “client session actions”.`}),_jsxs(Note,{children:[_jsx(_components.p,{children:`🛑 Developers are no longer required to call this function and it has been removed from the SDK. Instead, now you can set up the following callbacks:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`primerClientSessionDidUpdate`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`primerClientSessionWillUpdate`})}),`\n`]})]}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[`Earlier release of SDK had Primer Checkout functionality that was sending you `,_jsx(_components.code,{children:`Client session actions`}),` in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal iOS SDK v2.`]}),_jsxs(_components.p,{children:[`The latest SDK can now collect various customer data such as the `,_jsx(_components.code,{children:`billing address`}),`, `,_jsx(_components.code,{children:`customer contact`}),` details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.`]})]}),_jsxs(_components.p,{children:[`For more details, refer to the `,_jsx(_components.a,{href:`/checkout/checkout-builder`,children:`Universal Checkout Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`payment-options-updates-3`,children:`Payment Options Updates`}),_jsx(_components.p,{children:`The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`OrderItem`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Address`})}),`\n`]}),_jsxs(_components.p,{children:[`Instead, developers must now specify the `,_jsx(_components.code,{children:`order`}),` and `,_jsx(_components.code,{children:`customer`}),` details when creating the client session with `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`POST`,path:`/client-session`})}),`.`]}),_jsxs(_components.p,{children:[`We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing `,_jsx(_components.code,{children:`PrimerSettings`}),` and a `,_jsx(_components.code,{children:`PrimerTheme`}),` object to the SDK with various options:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: settings, `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`theme`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: theme)`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Now, you should be passing PrimerSettings and set the delegate, as per the `,_jsx(_components.a,{href:`/checkout/drop-in/overview#ios`,children:`Quick Start Guide`}),`. In case you need more customization, you can find the PrimerSettings API reference `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-f62b4be8f24642989e63c25a8fb5f0ba`,children:`here`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`Primer.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`shared`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: settings, `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`delegate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`self`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`miscellaneous-updates-3`,children:_jsx(_components.strong,{children:`Miscellaneous Updates`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerSettings`}),` structure has been refactored and `,_jsx(_components.code,{children:`PrimerTheme`}),` has been integrated within it. Check the `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-f62b4be8f24642989e63c25a8fb5f0ba`,children:`PrimerSettings API Reference`}),` for details.`]}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`PaymentMethodToken`}),` → `,_jsx(_components.code,{children:`PrimerPaymentMethodTokenData`})]}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`ResumeHandler`}),` → `,_jsx(_components.code,{children:`PrimerResumeDecisionHandler`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`showUniversalCheckout`}),` and `,_jsx(_components.code,{children:`showVaultManager`}),` receive different arguments. You can find documentation on them in the `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-f62b4be8f24642989e63c25a8fb5f0ba`,children:`SDK API reference`}),`.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`resume-handler-updates-2`,children:`Resume handler updates`}),_jsxs(_components.p,{children:[`Some delegate functions provide a decision handler, e.g. `,_jsx(_components.code,{children:`primerWillCreatePaymentWithData(:decisionHandler:)`}),`. You can process the data provided and once you’re ready you can call the decision handler with your relevant decision. Once you do, the SDK will continue the flow.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`handler.handleError(error: Error)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`decisionHandler(.fail(withErrorMessage: String?))`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`handler.handleNewClientToken(clientToken: String)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`decisionHandler(.continueWithNewClientToken(_ clientToken: String))`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`handler.handleSuccess()`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`decisionHandler(.succeed())`})})]})]})]}),_jsx(Heading,{level:`2`,id:`removed-items-2`,children:`Removed Items`}),_jsx(_components.p,{children:`All the deprecated methods in v1 have been removed and replaced with other methods where applicable:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`tokenAddedToVault`}),` → Removed`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`onClientSessionActions`}),` → Removed`]}),`\n`]}),_jsxs(_components.p,{children:[`All the deprecated classes in v1 have been removed. They are instead set on the backend when creating the `,_jsx(_components.a,{href:``,children:`client session`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`OrderItem`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Address`})}),`\n`]})]}),_jsxs(Tab,{title:`React Native`,id:`react-native`,\"data-child-heading-ids\":`[\"migrating-from-v1-to-v2-4\",\"key-highlights-4\",\"automatic-payment-creation-4\",\"primer-listener-changes-3\",\"client-session-actions-automation-4\",\"payment-options-updates-4\",\"miscellaneous-updates-4\",\"removed-items-3\"]`,children:[_jsx(Heading,{level:`2`,id:`migrating-from-v1-to-v2-4`,children:`Migrating from v1 to v2`}),_jsx(_components.p,{children:`The latest React Native (RN) SDK has evolved significantly from the previous release SDK v1. This guide describes what is new in v2, what has changed from v1 and what you need to do to migrate to the latest Universal Checkout SDK v2.`}),_jsx(Note,{children:_jsx(_components.p,{children:`The latest version v2 of Universal Checkout RN SDK introduces a few breaking changes.`})}),_jsx(Note,{children:_jsx(_components.p,{children:`Universal Checkout v2 SDK is super efficient and simpler to integrate. Going forward, the prior Primer Checkout SDK v1.x.x will be deprecated.`})}),_jsx(Heading,{level:`2`,id:`key-highlights-4`,children:`Key Highlights`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Universal Checkout now `,_jsx(_components.a,{href:`#automatic-payment-creation`,children:`creates payments automatically`}),` in a more secure manner`]}),`\n`,_jsxs(_components.li,{children:[`Some of the earlier `,_jsx(_components.a,{href:`#payment-options-updates`,children:`payment method options`}),` are no longer required, therefore removed or addressed via other calls or functions`]}),`\n`,_jsxs(_components.li,{children:[`We’ve made major improvements to Universal Checkout’s `,_jsx(_components.a,{href:`#primer-listener-changes`,children:`listener`})]}),`\n`]}),_jsx(_components.p,{children:`For more details about the new features and to see specific code examples, refer to the sections below.`}),_jsx(Heading,{level:`2`,id:`automatic-payment-creation-4`,children:`Automatic Payment Creation`}),_jsx(_components.p,{children:`Universal Checkout React Native SDK v2 now creates, resumes and handles payments under the hood 🎉`}),_jsx(_components.p,{children:`The automatic payment flow is activated by default.`}),_jsx(_components.p,{children:`When migrating to React Native SDK v2, you need to use the following simpler code for payment creation:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`27`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`27`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` PrimerSettings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` PrimerCheckoutData`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`} `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` '@primer-io/react-native'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` CheckoutScreen`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`props`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`any`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutComplete`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`checkoutData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerCheckoutData`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Show a success screen`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onUniversalCheckoutButtonTapped`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerSettings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` onCheckoutComplete:`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` onCheckoutComplete`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Configure the SDK`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Ask your backend to create a client session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` createClientSession`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientSessionRequestParams`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Present Universal Checkout`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`Earlier, the payment creation code was more complex:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`52`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`52`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` '@primer-io/react-native'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` CheckoutScreen`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`props`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`any`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` createPayment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` paymentMethod:`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` req`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`token`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`then`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // handle required actions if present.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`requiredAction`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // ensure the result id is stored somewhere.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setPaymentId`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // resume the SDK with the result clientToken.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleNewClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`requiredAction`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // resume the SDK passing a null object.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`catch`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(() `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`resumeWithError`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`errorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onResumeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` resumeSession`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` id:`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` paymentId`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` resumeToken:`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` req`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`then`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` in`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'FAILED'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'DECLINED'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'CANCELLED'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'PENDING'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`]) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleError`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`errorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`catch`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(() `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`handleError`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`errorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onUniversalCheckoutButtonTapped`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` try`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#4FC1FF`,\"--shiki-dark\":`#4FC1FF`},children:` clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` createClientSession`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientSessionRequestParams`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Present Universal Checkout`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` onTokenizeSuccess`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` onResumeSuccess`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`catch`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Handle error`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`In the earlier versions, you had to manually create and resume payments when the delegate functions `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` were called. `,_jsx(_components.strong,{children:`Not anymore`}),`.`]}),_jsxs(_components.p,{children:[`We have redesigned and changed this callback and you will no longer have to listen to different events but rather to different callbacks. But even now, you are no longer required to use `,_jsx(_components.code,{children:`onTokenizeSuccess`}),` and `,_jsx(_components.code,{children:`onResumeSuccess`}),` callbacks. This essentially means that you do not need to make any API calls for creating and resuming payments.`]}),_jsx(_components.p,{children:`Those can be edited out of your integration code.`}),_jsx(_components.p,{children:_jsx(_components.em,{children:`All this results in an even simpler integration to maintain!`})}),_jsxs(_components.p,{children:[`With the new SDK, you can simply listen to the `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` webhook and the callback `,_jsx(_components.code,{children:`onCheckoutCompleted`}),` callback will be called.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=a76a9b18894e95b8eb6aee5893177d9e`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`813`,height:`813`,\"data-path\":`images/changelogs/sdk-v1-to-v2/react-native/flow.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=280\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=ea51df6f189cb525fd5ac7b30107c82c 280w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=560\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=0f3b1036abb28867e4ee4fe267868ce3 560w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=840\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=672e8e8b0b54f704065c5baf6d040c92 840w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=34428fc084799114cc33a398598a1a3f 1100w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=5139b446487bbb855c2a0482ce229aef 1650w, https://mintcdn.com/primer-cc826789/dM-udzSll5kL79ou/images/changelogs/sdk-v1-to-v2/react-native/flow.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dM-udzSll5kL79ou\u0026q=85\u0026s=6e610b604af3bba2907c56fcb1515468 2500w`})}),_jsx(Heading,{level:`2`,id:`primer-listener-changes-3`,children:`Primer listener changes`}),_jsx(_components.p,{children:`We have completely changed how you are receiving events, now you can add your callbacks in the SDK’s settings when you configure the SDK.`}),_jsxs(_components.p,{children:[`Previously you had to separately add callbacks in the `,_jsx(_components.code,{children:`showUniversalCheckout`}),` function.`]}),_jsx(_components.p,{children:`We have updated it to a more natural approach and now all events are translated to different callbacks:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Earlier v1.x.x`}),_jsx(_components.th,{children:`Latest v2 SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onTokenizeSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`onTokenizeSuccess`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onResumeSuccess`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`onResumeSuccess`}),` *`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Exit`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onDismissed`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onDismiss`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onDismiss`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`checkoutFailed`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onFailed`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`onResumeError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`onFailed`})})]})]})]}),_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Only relevant on the `,_jsx(_components.code,{children:`manual`}),` flow. Won’t be called if `,_jsx(_components.code,{children:`paymentHandling`}),` is `,_jsx(_components.code,{children:`AUTO`}),`, which is the default value`]})}),_jsx(Heading,{level:`2`,id:`client-session-actions-automation-4`,children:`Client Session Actions Automation`}),_jsxs(_components.p,{children:[`Earlier versions of Primer Checkout SDK required you to integrate using `,_jsx(_components.code,{children:`onClientSessionActions`}),`.`]}),_jsx(_components.p,{children:`Now, with the latest SDK v2, as the customer interacts with the UI, Universal Checkout takes care of setting up the “client session actions”.`}),_jsxs(Note,{children:[_jsx(_components.p,{children:`Developers are no longer required to call this function and it has been removed from the SDK. Instead, now you can set up the following callbacks:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onClientSessionUpdate`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`onBeforeClientSessionUpdate`})}),`\n`]})]}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[`Earlier release of SDK had Primer Checkout functionality that was sending you `,_jsx(_components.code,{children:`Client session actions`}),` in order to enable you to update the client session according to the merchant checkout requirements. This is now completely managed automatically by the Primer Universal React Native SDK v2.`]}),_jsxs(_components.p,{children:[`The latest SDK can now collect various customer data such as the `,_jsx(_components.code,{children:`billing address`}),`, `,_jsx(_components.code,{children:`customer contact`}),` details and update the client session by itself. It no longer requires any explicit developer initiated actions or function calls to update these details while integrating with Primer.`]})]}),_jsxs(_components.p,{children:[`For more details, refer to the `,_jsx(_components.a,{href:`/checkout/overview`,children:`Universal Checkout Guide`}),`.`]}),_jsx(Heading,{level:`2`,id:`payment-options-updates-4`,children:`Payment Options Updates`}),_jsx(_components.p,{children:`The following payment method options in Primer Checkout SDK v1.x.x are no longer available in the latest Universal Checkout SDK v2.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`OrderItem`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Address`})}),`\n`]}),_jsxs(_components.p,{children:[`Instead, developers must now specify the `,_jsx(_components.code,{children:`order`}),` and `,_jsx(_components.code,{children:`customer`}),` details when creating the client session with `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`POST`,path:`/client-session`})}),`.`]}),_jsxs(_components.p,{children:[`We have completely restructured how you are passing your local settings to SDK. Earlier, you would be passing a `,_jsx(_components.code,{children:`PrimerConfig`}),` object—that contained the SDK settings and callbacks—to the SDK in the `,_jsx(_components.code,{children:`showUniversalCheckout`}),` function.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Now, you should be passing `,_jsx(_components.code,{children:`PrimerSettings`}),` on the `,_jsx(_components.code,{children:`configure`}),` function, as per the `,_jsx(_components.a,{href:`/checkout/drop-in/overview#react-native`,children:`Quick Start Guide`}),`. In case you need more customization, you can find the `,_jsx(_components.code,{children:`PrimerSettings`}),` API reference `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-1ce697cf1de6425794df9feeb831f3c3`,children:`here`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`Primer`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`clientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`miscellaneous-updates-4`,children:`Miscellaneous Updates`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerSettings`}),` structure has been refactored and `,_jsx(_components.code,{children:`PrimerTheme`}),` has been integrated within it. Check the `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-1ce697cf1de6425794df9feeb831f3c3`,children:`PrimerSettings API Reference`}),` for details.`]}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`PaymentMethodToken`}),` → `,_jsx(_components.code,{children:`PrimerPaymentMethodTokenData`})]}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`ResumeHandler`}),` → `,_jsx(_components.code,{children:`PrimerResumeDecisionHandler`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`showUniversalCheckout`}),` and `,_jsx(_components.code,{children:`showVaultManager`}),` receive different arguments. You can find documentation on them in the `,_jsx(_components.a,{href:`https://www.notion.so/primerio/API-Reference-1ce697cf1de6425794df9feeb831f3c3`,children:`SDK API reference`}),`.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`removed-items-3`,children:`Removed Items`}),_jsx(_components.p,{children:`All the deprecated methods in v1 have been removed and replaced with other methods where applicable:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`onVaultSuccess`}),` → Removed`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`onClientSessionActions`}),` → Removed`]}),`\n`]}),_jsxs(_components.p,{children:[`All the deprecated classes in v1 have been removed. They are instead set on the backend when creating the `,_jsx(_components.a,{href:`/checkout/client-session`,children:`client session`}),`.`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Order`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`OrderItem`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Customer`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`Address`})}),`\n`]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{ApiEndpoint,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"SDK v1 to v2","description":null,"href":"/changelogs/migration-guides/sdk-v1-to-v2"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[128,3123,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Migrating from v1 to v2","slug":"migrating-from-v1-to-v2","depth":2,"children":[],"tabId":"web"},{"title":"Key Highlights","slug":"key-highlights","depth":2,"children":[],"tabId":"web"},{"title":"Initializing Universal Checkout","slug":"initializing-universal-checkout","depth":2,"children":[],"tabId":"web"},{"title":"Initialize Vault Manager","slug":"initialize-vault-manager","depth":2,"children":[],"tabId":"web"},{"title":"Other Initialization Changes","slug":"other-initialization-changes","depth":2,"children":[],"tabId":"web"},{"title":"Automatic Payment Creation","slug":"automatic-payment-creation","depth":2,"children":[],"tabId":"web"},{"title":"onTokenizeSuccess and onResumeSuccess change","slug":"ontokenizesuccess-and-onresumesuccess-change","depth":2,"children":[],"tabId":"web"},{"title":"Improved 3DS","slug":"improved-3ds","depth":2,"children":[{"title":"Payment Options Updates","slug":"payment-options-updates","depth":3,"children":[],"tabId":"web"}],"tabId":"web"},{"title":"Setters Removed","slug":"setters-removed","depth":2,"children":[{"title":"allowedPaymentMethods Removed","slug":"allowedpaymentmethods-removed","depth":3,"children":[],"tabId":"web"}],"tabId":"web"},{"title":"Client Session Actions Automation","slug":"client-session-actions-automation","depth":2,"children":[],"tabId":"web"},{"title":"Submit Button Updates","slug":"submit-button-updates","depth":2,"children":[],"tabId":"web"},{"title":"Styling Customization Changes","slug":"styling-customization-changes","depth":2,"children":[],"tabId":"web"},{"title":"Miscellaneous Updates","slug":"miscellaneous-updates","depth":2,"children":[],"tabId":"web"},{"title":"Deprecated Items","slug":"deprecated-items","depth":2,"children":[],"tabId":"web"},{"title":"Migrating from v1 to v2","slug":"migrating-from-v1-to-v2-2","depth":2,"children":[],"tabId":"android"},{"title":"Key Highlights","slug":"key-highlights-2","depth":2,"children":[],"tabId":"android"},{"title":"Automatic Payment Creation","slug":"automatic-payment-creation-2","depth":2,"children":[],"tabId":"android"},{"title":"Primer listener changes","slug":"primer-listener-changes","depth":2,"children":[],"tabId":"android"},{"title":"Client Session Actions Automation","slug":"client-session-actions-automation-2","depth":2,"children":[],"tabId":"android"},{"title":"Payment Options Updates","slug":"payment-options-updates-2","depth":2,"children":[],"tabId":"android"},{"title":"Miscellaneous Updates","slug":"miscellaneous-updates-2","depth":2,"children":[],"tabId":"android"},{"title":"Resume handler updates","slug":"resume-handler-updates","depth":2,"children":[],"tabId":"android"},{"title":"Removed Items","slug":"removed-items","depth":2,"children":[{"title":"Class Primer:","slug":"class-primer","depth":3,"children":[],"tabId":"android"},{"title":"Interface PrimerCheckoutListener:","slug":"interface-primercheckoutlistener","depth":3,"children":[],"tabId":"android"},{"title":"Class PrimerSettings:","slug":"class-primersettings","depth":3,"children":[],"tabId":"android"}],"tabId":"android"},{"title":"Migrating from v1 to v2","slug":"migrating-from-v1-to-v2-3","depth":2,"children":[],"tabId":"ios"},{"title":"Key Highlights","slug":"key-highlights-3","depth":2,"children":[],"tabId":"ios"},{"title":"Automatic Payment Creation","slug":"automatic-payment-creation-3","depth":2,"children":[],"tabId":"ios"},{"title":"Primer listener changes","slug":"primer-listener-changes-2","depth":2,"children":[],"tabId":"ios"},{"title":"Client Session Actions Automation","slug":"client-session-actions-automation-3","depth":2,"children":[],"tabId":"ios"},{"title":"Payment Options Updates","slug":"payment-options-updates-3","depth":2,"children":[],"tabId":"ios"},{"title":"Miscellaneous Updates","slug":"miscellaneous-updates-3","depth":2,"children":[],"tabId":"ios"},{"title":"Resume handler updates","slug":"resume-handler-updates-2","depth":2,"children":[],"tabId":"ios"},{"title":"Removed Items","slug":"removed-items-2","depth":2,"children":[],"tabId":"ios"},{"title":"Migrating from v1 to v2","slug":"migrating-from-v1-to-v2-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Key Highlights","slug":"key-highlights-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Automatic Payment Creation","slug":"automatic-payment-creation-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Primer listener changes","slug":"primer-listener-changes-3","depth":2,"children":[],"tabId":"react-native"},{"title":"Client Session Actions Automation","slug":"client-session-actions-automation-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Payment Options Updates","slug":"payment-options-updates-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Miscellaneous Updates","slug":"miscellaneous-updates-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Removed Items","slug":"removed-items-3","depth":2,"children":[],"tabId":"react-native"}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/primer-cc826789/f9b3e76a02542eba/js/codeblocklayout.js"],"subdomain":"primer-cc826789","siteName":"Primer","title":"SDK v1 to v2 - Primer","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T15:07:00.665Z","originalFileLocation":"changelogs/migration-guides/sdk-v1-to-v2.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Primer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"SDK v1 to v2 - Primer\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Primer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://primer.io/docs/changelogs/migration-guides/sdk-v1-to-v2\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://primer-cc826789.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=SDK+v1+to+v2\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=ffdd3071790450a8cd8f9da16bb216f5ea9d8b771640cf47f747cf8883606356\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"SDK v1 to v2 - Primer\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://primer-cc826789.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=SDK+v1+to+v2\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=ffdd3071790450a8cd8f9da16bb216f5ea9d8b771640cf47f747cf8883606356\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Primer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF7C4F\">\u003clink data-mint-head rel=\"canonical\" href=\"https://primer.io/docs/changelogs/migration-guides/sdk-v1-to-v2\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/changelogs/migration-guides/sdk-v1-to-v2.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Primer\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Primer","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","mode":"custom","href":"/home"}]},{"tab":"Documentation","anchors":[{"anchor":"Get started","icon":"book-open","groups":[{"group":"Get started","pages":[{"title":"Welcome to Primer","href":"/get-started/overview"},{"title":"Connect a processor","sidebarTitle":"1. Connect a processor","href":"/get-started/connect-a-processor"},{"title":"Create a Workflow","sidebarTitle":"2. Create a workflow","href":"/get-started/create-workflow"},{"title":"Set up Universal Checkout","sidebarTitle":"3. Set up universal checkout","href":"/get-started/set-up-a-checkout"},{"title":"Set up payment updates","sidebarTitle":"4. Set up payment updates","href":"/get-started/payment-updates"},{"title":"Explore your payments","sidebarTitle":"5. Explore your payments","href":"/get-started/explore-your-payments"},{"title":"Recurring payments","sidebarTitle":"6. Recurring payments","href":"/get-started/recurring-payments"}]}]},{"anchor":"Primer concepts","icon":"brain","pages":[{"group":"Primer concepts","pages":[{"title":"Overview","href":"/concepts/overview"},{"title":"Primer Payment","sidebarTitle":"Primer payment","href":"/concepts/primer-payment"},{"title":"Payment lifecycle","sidebarTitle":"Payment lifecycle","href":"/concepts/payment-lifecycle"},{"title":"Payment timeline","sidebarTitle":"Payment timeline","href":"/concepts/payment-timeline"},{"title":"Payment method token","sidebarTitle":"Payment method token","href":"/concepts/payment-method-token"},{"group":"Decline codes","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/concepts/decline-codes/overview"},{"title":"Primer's Unified Mapping Standard","sidebarTitle":"Unified mapping standard","href":"/concepts/decline-codes/mapping-standard"},{"title":"Payment method decline codes","sidebarTitle":"Payment method decline codes","href":"/concepts/decline-codes/payment-method-decline-codes"},{"title":"Timeouts","sidebarTitle":"Timeouts","href":"/concepts/decline-codes/timeouts"}]},{"title":"Advised actions","sidebarTitle":"Advised actions","href":"/concepts/advised-actions"},{"title":"Currencies","sidebarTitle":"Currencies","href":"/concepts/currencies"},{"title":"Metrics","sidebarTitle":"Metrics","href":"/concepts/metrics"},{"title":"Filters \u0026 Dimensions","sidebarTitle":"Filters \u0026 dimensions","href":"/concepts/filters-and-dimensions"}]}]},{"anchor":"Checkout","icon":"cart-shopping","pages":[{"group":"Checkout","pages":[{"title":"Overview","href":"/checkout/overview"},{"title":"Checkout Builder","sidebarTitle":"Checkout Builder","href":"/checkout/checkout-builder"},{"title":"Capture billing address","href":"/checkout/capture-billing-address"},{"title":"Client Session","sidebarTitle":"Client session","href":"/checkout/client-session"},{"group":"Primer Checkout","hidden":false,"tag":"NEW","pages":[{"group":"Get started","pages":[{"title":"Primer Checkout overview","sidebarTitle":"Overview","href":"/checkout/primer-checkout/product-overview"},{"title":"Install Primer Checkout","sidebarTitle":"Installation","href":"/checkout/primer-checkout/installation"},{"title":"Accept your first payment","sidebarTitle":"First payment","href":"/checkout/primer-checkout/first-payment"},{"title":"How Primer Checkout works","sidebarTitle":"Core concepts","href":"/checkout/primer-checkout/core-concepts"},{"title":"Use AI coding assistants with Primer Checkout","sidebarTitle":"Build with AI","href":"/checkout/primer-checkout/resources/build-with-ai"}]},{"group":"Migrate to Primer Checkout","pages":[{"title":"Migrate from Drop-in or Headless","sidebarTitle":"Migrate from Drop-in or Headless","href":"/checkout/primer-checkout/migration/overview"},{"title":"Framework-Specific Migration Guide","sidebarTitle":"Framework migration","href":"/checkout/primer-checkout/migration/frameworks"},{"title":"Migrate the manual flow","sidebarTitle":"Migrate the manual flow","href":"/checkout/primer-checkout/migration/manual-flow"}]},{"group":"Configure Primer Checkout","pages":[{"title":"Integration best practices","sidebarTitle":"Integration best practices","href":"/checkout/primer-checkout/configuration/best-practices"},{"title":"Components","sidebarTitle":"Components","href":"/checkout/primer-checkout/configuration/components"},{"title":"Configuring checkout","sidebarTitle":"Configuring checkout","href":"/checkout/primer-checkout/configuration/sdk-options"},{"title":"Events guide","sidebarTitle":"Events","href":"/checkout/primer-checkout/configuration/events"},{"title":"Error Handling \u0026 Failure States","sidebarTitle":"Error handling","href":"/checkout/primer-checkout/build-your-ui/error-handling"},{"title":"Supported locales","sidebarTitle":"Supported locales","href":"/checkout/primer-checkout/configuration/localization"},{"title":"UI styling","sidebarTitle":"UI styling","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/styling-customization"},{"title":"Layout customization","sidebarTitle":"Layout customization","href":"/checkout/primer-checkout/build-your-ui/layout-customization"},{"group":"Design Tokens Explorer","pages":[{"title":"Design Tokens Explorer — Web","sidebarTitle":"Web","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/design-tokens-explorer-web"},{"title":"Design Tokens Explorer — iOS","sidebarTitle":"iOS","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/design-tokens-explorer-ios"},{"title":"Design Tokens Explorer — Android","sidebarTitle":"Android","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/design-tokens-explorer-android"}]},{"group":"Architecture Explorer","pages":[{"title":"Slot Architecture Explorer — Web","sidebarTitle":"Web","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/slot-architecture-explorer-web"},{"title":"Component Architecture Explorer — iOS","sidebarTitle":"iOS","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/scope-architecture-explorer-ios"},{"title":"Component Architecture Explorer — Android","sidebarTitle":"Android","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/component-architecture-explorer-android"}]},{"title":"Card Form Layout Builder","mode":"wide","href":"/checkout/primer-checkout/build-your-ui/card-form-layout-builder"},{"title":"Advanced layout with events","sidebarTitle":"Advanced layout with events","href":"/checkout/primer-checkout/build-your-ui/advanced-layout-customization"},{"title":"React integration guide","sidebarTitle":"React","href":"/checkout/primer-checkout/frameworks/react-integration-guide"},{"title":"Server-side rendering","sidebarTitle":"Server-side rendering","href":"/checkout/primer-checkout/frameworks/ssr-guide"}]},{"group":"Guides and Recipes","pages":[{"title":"Guides and recipes","sidebarTitle":"Overview","href":"/checkout/primer-checkout/guides-and-recipes/overview"},{"title":"Build a custom card form","sidebarTitle":"Build a custom card form","href":"/checkout/primer-checkout/guides-and-recipes/build-custom-card-form"},{"group":"Payment flow","pages":[{"title":"Redirect after successful payment","sidebarTitle":"Redirect after payment","href":"/checkout/primer-checkout/guides-and-recipes/redirect-after-payment"},{"title":"Show custom success message","sidebarTitle":"Show success message","href":"/checkout/primer-checkout/guides-and-recipes/show-success-message"},{"title":"Track payment in analytics","sidebarTitle":"Track in analytics","href":"/checkout/primer-checkout/guides-and-recipes/track-payment-analytics"},{"title":"Log errors for debugging","sidebarTitle":"Log errors","href":"/checkout/primer-checkout/guides-and-recipes/log-errors-debugging"},{"title":"Prevent duplicate payments with idempotency keys","sidebarTitle":"Prevent duplicate payments","href":"/checkout/primer-checkout/guides-and-recipes/use-idempotency-keys"},{"title":"Manual payment approval","sidebarTitle":"Manual payment approval","href":"/checkout/primer-checkout/guides-and-recipes/manual-payment-approval"},{"title":"Express Checkout: shipping in the Apple Pay and Google Pay sheets","sidebarTitle":"Express Checkout shipping","href":"/checkout/primer-checkout/guides-and-recipes/express-checkout-shipping"},{"title":"Use BIN Data to Control Click to Pay","sidebarTitle":"BIN data and Click to Pay","href":"/checkout/primer-checkout/guides-and-recipes/use-bin-data-to-control-click-to-pay"}]},{"group":"User experience","pages":[{"title":"Pre-fill cardholder name","sidebarTitle":"Pre-fill cardholder name","href":"/checkout/primer-checkout/guides-and-recipes/prefill-cardholder-name"},{"title":"Show loading indicator","sidebarTitle":"Show loading indicator","href":"/checkout/primer-checkout/guides-and-recipes/show-loading-indicator"},{"title":"Disable buttons during payment","sidebarTitle":"Disable buttons during payment","href":"/checkout/primer-checkout/guides-and-recipes/disable-buttons-during-payment"}]},{"group":"Custom controls","pages":[{"title":"External submit button","sidebarTitle":"External submit button","href":"/checkout/primer-checkout/guides-and-recipes/external-submit-button"},{"title":"Display detected card network","sidebarTitle":"Display card network","href":"/checkout/primer-checkout/guides-and-recipes/display-card-network"}]},{"group":"Vault","pages":[{"title":"Display saved payment methods","sidebarTitle":"Display saved payment methods","href":"/checkout/primer-checkout/guides-and-recipes/display-saved-payment-methods"}]}]},{"group":"Troubleshooting","pages":[{"title":"Troubleshooting — Web","sidebarTitle":"Web","href":"/checkout/primer-checkout/troubleshooting-web"},{"title":"Troubleshooting — iOS","sidebarTitle":"iOS","href":"/checkout/primer-checkout/troubleshooting-ios"},{"title":"Troubleshooting — Android","sidebarTitle":"Android","href":"/checkout/primer-checkout/troubleshooting-android"}]},{"title":"Glossary","sidebarTitle":"Glossary","href":"/checkout/primer-checkout/glossary"}]},{"group":"Legacy SDK","pages":[{"group":"Drop-in checkout","pages":[{"title":"Drop-in Checkout: Get started","sidebarTitle":"Get started","href":"/checkout/drop-in/overview"},{"group":"Customization","pages":[{"title":"Customization","sidebarTitle":"Overview","href":"/checkout/drop-in/customization"},{"title":"Web","sidebarTitle":"Web","href":"/checkout/drop-in/customization/web"},{"title":"iOS","sidebarTitle":"iOS","href":"/checkout/drop-in/customization/ios"},{"title":"Android","sidebarTitle":"Android","href":"/checkout/drop-in/customization/android"},{"title":"React Native","sidebarTitle":"React Native","href":"/checkout/drop-in/customization/react-native"}]}]},{"title":"Headless Checkout","sidebarTitle":"Headless checkout","href":"/checkout/headless"}]},{"group":"Advanced","pages":[{"title":"Manual payment creation","sidebarTitle":"Manual payment creation","href":"/checkout/advanced/manual-payment-creation"},{"title":"Content Security Policy","sidebarTitle":"Content security policy","href":"/checkout/advanced/content-security-policy"}]}]}]},{"anchor":"Workflows","icon":"arrow-progress","pages":[{"group":"Workflows","pages":[{"title":"Overview","href":"/workflows/overview"},{"group":"Apps","pages":[{"title":"Workflow Apps","sidebarTitle":"Workflow Apps","href":"/workflows/apps/overview"},{"group":"Native apps","pages":[{"title":"Overview","href":"/workflows/apps/native-apps/overview"},{"group":"Primer payments app","pages":[{"group":"Triggers","pages":[{"title":"Payment created Trigger","sidebarTitle":"Payment created trigger","href":"/workflows/apps/native-apps/primer-payments-app/payment-created-trigger"},{"title":"Payment status updated Trigger","sidebarTitle":"Payment status updated trigger","href":"/workflows/apps/native-apps/primer-payments-app/payment-status-updated-trigger"}]},{"group":"Actions","pages":[{"title":"Continue payment flow Action","sidebarTitle":"Continue payment flow action","href":"/workflows/apps/native-apps/primer-payments-app/continue-payment-flow-action"},{"title":"Refund payment Action","sidebarTitle":"Refund payment action","href":"/workflows/apps/native-apps/primer-payments-app/refund-payment-action"},{"title":"Capture payment Action","sidebarTitle":"Capture payment action","href":"/workflows/apps/native-apps/primer-payments-app/capture-payment-action"},{"title":"Decline payment Action","sidebarTitle":"Decline payment action","href":"/workflows/apps/native-apps/primer-payments-app/decline-payment-action"},{"title":"Authorize payment Action","sidebarTitle":"Authorize payment action","href":"/workflows/apps/native-apps/primer-payments-app/authorize-payment-action"},{"title":"Perform 3DS Action","sidebarTitle":"Perform 3DS action","href":"/workflows/apps/native-apps/primer-payments-app/perform-3ds-action"},{"title":"Cancel payment Action","sidebarTitle":"Cancel payment action","href":"/workflows/apps/native-apps/primer-payments-app/cancel-payment-action"}]}]},{"group":"Primer web requests app","pages":[{"title":"Web request received Trigger","sidebarTitle":"Web request received trigger","href":"/workflows/apps/native-apps/primer-web-requests-app/web-request-received-trigger"},{"title":"Send web request Action","sidebarTitle":"Send web request action","href":"/workflows/apps/native-apps/primer-web-requests-app/send-web-request-action"}]},{"group":"Primer vault app","pages":[{"title":"Send card details Action","sidebarTitle":"Send card details action","href":"/workflows/apps/native-apps/primer-vault-app/send-card-details-action"}]},{"group":"Primer monitors app","pages":[{"title":"Monitor event created Trigger","sidebarTitle":"Monitor event created trigger","href":"/workflows/apps/native-apps/primer-monitors-app/monitor-event-created-trigger"}]},{"group":"Primer emails app","pages":[{"title":"Send email Action","sidebarTitle":"Send email action","href":"/workflows/apps/native-apps/primer-emails-app/send-email-action"}]},{"group":"Primer disputes app","pages":[{"title":"Dispute status update Trigger","sidebarTitle":"Dispute status update trigger","href":"/workflows/apps/native-apps/primer-disputes-app/dispute-status-update-trigger"}]}]}]},{"group":"Utilities","pages":[{"title":"Workflow Utilities","sidebarTitle":"Workflow utilities","href":"/workflows/utilities/workflow-utilities"},{"title":"Conditions","sidebarTitle":"Conditions","href":"/workflows/utilities/conditions-block"},{"title":"Split","sidebarTitle":"Split","href":"/workflows/utilities/split"}]},{"title":"Workflow validation","sidebarTitle":"Workflow validation","href":"/workflows/workflow-validation"},{"group":"Monitor workflows","pages":[{"title":"Monitor workflows","sidebarTitle":"Monitor workflows","href":"/workflows/monitor-workflows/overview"},{"title":"Workflow Run failed","sidebarTitle":"Workflow run failed","href":"/workflows/monitor-workflows/workflow-run-failed-webhook"}]},{"title":"Templates","sidebarTitle":"Templates","href":"/workflows/templates"},{"title":"Export \u0026 Import","sidebarTitle":"Export \u0026 import","href":"/workflows/export-import"},{"title":"Best practices","sidebarTitle":"Best practices","href":"/workflows/best-practices"},{"group":"Use cases","pages":[{"title":"Send KYC verification link","sidebarTitle":"Send KYC verification link","href":"/workflows/use-cases/send-kyc-verification-link"}]}]}]},{"anchor":"Manage payments","icon":"money-bills","pages":[{"group":"Manage payments","pages":[{"title":"Overview","href":"/manage-payments/overview"},{"title":"Capture payments","sidebarTitle":"Capture payments","href":"/manage-payments/capture-payment"},{"title":"Cancel payments","sidebarTitle":"Cancel payments","href":"/manage-payments/cancel-payment"},{"title":"Refund payments","sidebarTitle":"Refund payments","href":"/manage-payments/refund-payment"},{"title":"Adjust authorization","sidebarTitle":"Adjust authorization","href":"/manage-payments/adjust-authorization"},{"title":"Search payments","sidebarTitle":"Search payments","href":"/manage-payments/search-payments"}]}]},{"anchor":"Payment services","icon":"credit-card","pages":[{"group":"Payment services","pages":[{"title":"Overview","href":"/payment-services/overview"},{"title":"Save Payment Methods","sidebarTitle":"Save payment methods","href":"/payment-services/save-payment-methods"},{"title":"Advanced Metadata Mapper","sidebarTitle":"Advanced metadata mapper","href":"/payment-services/advanced-metadata-mapper"},{"title":"Surcharge","sidebarTitle":"Surcharge","href":"/payment-services/surcharge"},{"title":"Network Tokenization","sidebarTitle":"Network tokenization","href":"/payment-services/network-tokenization"},{"title":"Fallbacks","sidebarTitle":"Fallbacks","href":"/payment-services/fallbacks"},{"group":"3D Secure","pages":[{"title":"3D Secure: Overview","sidebarTitle":"Overview","href":"/payment-services/3d-secure/overview"},{"title":null,"href":"/payment-services/3d-secure/get-started"},{"title":"3D Secure: Exemptions","sidebarTitle":"Exemptions","href":"/payment-services/3d-secure/exemptions"},{"title":"3DS Challenge Mandate","sidebarTitle":"Mandate a Challenge","href":"/payment-services/3d-secure/mandatechallenge"}]},{"title":"BIN data","sidebarTitle":"BIN data","href":"/payment-services/bin-data"},{"group":"Co-badged cards","pages":[{"title":"Co-badged cards: Overview","sidebarTitle":"Overview","href":"/payment-services/cobadged-cards/Overview"},{"title":"Enable local card schemes with Primer","sidebarTitle":"Enable local schemes","href":"/payment-services/cobadged-cards/Enable-local-card-schemes-with-Primer"},{"title":"Get started with Headless Checkout","sidebarTitle":"Headless Checkout","href":"/payment-services/cobadged-cards/Get-started-with-Headless-Checkout"}]},{"group":"Fraud Checks","pages":[{"title":"Fraud Checks: Overview","sidebarTitle":"Overview","href":"/payment-services/fraud-checks/overview"},{"title":"Fraud Checks: Get Started","sidebarTitle":"Get started","href":"/payment-services/fraud-checks/get-started"}]},{"title":"Fingerprinting","sidebarTitle":"Fingerprinting","href":"/payment-services/fingerprinting"}]}]},{"anchor":"Primer Vault","icon":"vault","pages":[{"group":"Primer Vault","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/vault/overview"},{"title":"Get started","sidebarTitle":"Get started","href":"/vault/get-started"},{"title":"During the payment","sidebarTitle":"During the payment","href":"/vault/during-the-payment"},{"title":"After the payment","sidebarTitle":"After the payment","href":"/vault/after-the-payment"},{"title":"Reference","sidebarTitle":"Reference","href":"/vault/reference"}]}]},{"anchor":"Subscriptions","icon":"rotate","groups":[{"group":"Subscriptions","pages":[{"title":"Overview ","href":"/subscriptions/overview"},{"title":"Use Stripe Billing with Primer","href":"/subscriptions/stripe-billing"},{"title":"Use FunnelFox with Primer","href":"/subscriptions/funnelfox"}]}]},{"anchor":"Observability","icon":"chart-simple","pages":[{"group":"Observability","pages":[{"title":"Overview","href":"/observability/overview"},{"group":"Curated dashboards","pages":[{"title":"Curated dashboards","sidebarTitle":"Overview","href":"/observability/dashboards/overview"},{"title":"Snapshot","sidebarTitle":"Snapshot","href":"/observability/dashboards/snapshot"},{"title":"Payments","sidebarTitle":"Payments","href":"/observability/dashboards/payments"},{"title":"Sales","sidebarTitle":"Sales","href":"/observability/dashboards/sales"},{"title":"Refunds","sidebarTitle":"Refunds","href":"/observability/dashboards/refunds"},{"title":"Dashboards: 3D Secure","sidebarTitle":"3D Secure","href":"/observability/dashboards/3d-secure"},{"title":"Sales Recovery","sidebarTitle":"Sales recovery","href":"/observability/dashboards/sales-recovery"},{"title":"Declines","sidebarTitle":"Declines","href":"/observability/dashboards/declines"},{"title":"Dashboards: Network Tokenization","sidebarTitle":"Network Tokenization","href":"/observability/dashboards/network-tokenization"}]},{"title":"Custom Dashboards","sidebarTitle":"Custom dashboards","href":"/observability/custom-dashboards/overview"},{"group":"Use cases","pages":[{"title":"Optimizing 3D Secure Conversion","sidebarTitle":"Optimizing 3D secure conversion","href":"/observability/use-cases/optimizing-3ds-conversion"},{"title":"Analyze A/B test results with Split utility","href":"/observability/use-cases/analyze-ab-test"},{"title":"Using Dashboards to Optimize Payment Orchestration","sidebarTitle":"Using dashboards to optimize payment orchestration","href":"/observability/use-cases/optimize-payment-routing"}]}]}]},{"anchor":"Monitors","icon":"wave-pulse","pages":[{"group":"Monitors","pages":[{"title":"Overview","href":"/monitors/overview"},{"title":"Managing Monitors","sidebarTitle":"Managing Monitors","href":"/monitors/management"},{"title":"Monitor notifications","sidebarTitle":"Monitor notifications","href":"/monitors/notifications"},{"group":"Use cases","pages":[{"title":"Monitoring for processor outages","sidebarTitle":"Monitoring for processor outages","href":"/monitors/use-cases/monitoring-for-processor-outages"},{"title":"Monitor fallback usage","sidebarTitle":"Monitor fallback usage","href":"/monitors/use-cases/monitor-fallback-usage"}]}]}]},{"anchor":"Reconciliation","icon":"file-lines","pages":[{"group":"Reconciliation","pages":[{"title":"Overview","href":"/reconciliation/overview"},{"title":"Primer's Unified Settlement Report","sidebarTitle":"Primer's unified settlement report","href":"/reconciliation/unified-settlement-report"},{"title":"Report Content","sidebarTitle":"Report content","href":"/reconciliation/report-content"},{"title":"Supported Processors","sidebarTitle":"Supported processors","href":"/reconciliation/supported-processors"},{"title":"Cost Insights","sidebarTitle":"Cost insights","href":"/reconciliation/cost-insights"}]}]},{"anchor":"Disputes","icon":"triangle-exclamation","pages":[{"group":"Disputes","pages":[{"title":"Overview","href":"/disputes/overview"},{"title":"Manage disputes","href":"/disputes/manage-disputes"},{"title":"Dispute lifecycle","sidebarTitle":"Dispute lifecycle","href":"/disputes/dispute-lifecycle"}]}]},{"anchor":"Testing","icon":"vial-circle-check","pages":[{"group":"Testing","pages":[{"title":"Overview","href":"/testing/overview"},{"title":"Primer Sandbox Processor","sidebarTitle":"Primer sandbox processor","href":"/testing/primer-sandbox-processor"},{"title":"Testing 3d-secure","href":"/testing/3d-secure"},{"title":"Testing Fallbacks","sidebarTitle":"Testing fallbacks","href":"/testing/fallbacks"},{"title":"Testing Fraud Checks","sidebarTitle":"Testing fraud checks","href":"/testing/fraud-checks"},{"title":"Testing Network Tokens","sidebarTitle":"Testing network tokens","href":"/testing/network-tokenization"}]}]}]},{"tab":"API Reference","versions":[{"version":"v2.4","tag":"GA","anchors":[{"anchor":"Getting started","icon":"rocket","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/api-reference/get-started/v2.4/overview"},{"title":"API lifecycle","sidebarTitle":"API lifecycle","href":"/api-reference/get-started/api-lifecycle"},{"title":"Authentication","sidebarTitle":"Authentication","href":"/api-reference/get-started/authentication"},{"title":"API Responses","sidebarTitle":"API responses","href":"/api-reference/get-started/api-responses"},{"title":"Idempotency Key","sidebarTitle":"Idempotency key","href":"/api-reference/get-started/idempotency-key"},{"title":"Request requirements","sidebarTitle":"Request requirements","href":"/api-reference/get-started/request-requirements"},{"title":"Configure Webhooks","sidebarTitle":"Configure webhooks","href":"/api-reference/get-started/configure-webhooks"}]}]},{"anchor":"API reference","icon":"book-open","groups":[{"group":"API reference","pages":[{"group":"Client Session API","pages":[{"title":"Retrieve a client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/retrieve-a-client-session"},{"title":"Create a client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/create-a-client-session"},{"title":"Update client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml patch /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/update-client-session"}]},{"group":"Payments API","pages":[{"title":"Search \u0026 list payments","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payments","href":"/api-reference/v2.4/api-reference/payments-api/search-\u0026-list-payments"},{"title":"Create a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments","href":"/api-reference/v2.4/api-reference/payments-api/create-a-payment"},{"title":"Authorize a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/authorize","href":"/api-reference/v2.4/api-reference/payments-api/authorize-a-payment"},{"title":"Capture a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/capture","href":"/api-reference/v2.4/api-reference/payments-api/capture-a-payment"},{"title":"Cancel a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/cancel","href":"/api-reference/v2.4/api-reference/payments-api/cancel-a-payment"},{"title":"Refund a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/refund","href":"/api-reference/v2.4/api-reference/payments-api/refund-a-payment"},{"title":"Resume a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/resume","href":"/api-reference/v2.4/api-reference/payments-api/resume-a-payment"},{"title":"Adjust authorized amount","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/adjust-authorization","href":"/api-reference/v2.4/api-reference/payments-api/adjust-authorized-amount"},{"title":"Get a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payments/{id}","href":"/api-reference/v2.4/api-reference/payments-api/get-a-payment"}]},{"group":"Payment Attempts API","pages":[{"title":"Approve a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/approve","href":"/api-reference/v2.4/api-reference/payment-attempts-api/approve-a-payment-attempt"},{"title":"Abort a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/abort","href":"/api-reference/v2.4/api-reference/payment-attempts-api/abort-a-payment-attempt"},{"title":"Resolve a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/resolve","href":"/api-reference/v2.4/api-reference/payment-attempts-api/resolve-a-payment-attempt"}]},{"group":"Payment Methods API","pages":[{"title":"Save a payment method token","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-instruments/{paymentMethodToken}/vault","href":"/api-reference/v2.4/api-reference/payment-methods-api/save-a-payment-method-token"},{"title":"List saved payment methods","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payment-instruments","href":"/api-reference/v2.4/api-reference/payment-methods-api/list-saved-payment-methods"},{"title":"Delete a saved payment method","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml delete /payment-instruments/{paymentMethodToken}","href":"/api-reference/v2.4/api-reference/payment-methods-api/delete-a-saved-payment-method"},{"title":"Update the default saved payment method","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-instruments/{paymentMethodToken}/default","href":"/api-reference/v2.4/api-reference/payment-methods-api/update-the-default-saved-payment-method"}]},{"group":"Primer Proxy API","pages":[{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml put /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-1"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-2"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml delete /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-3"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml patch /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-4"}]}]}]},{"anchor":"Webhooks","icon":"webhook","groups":[{"group":"Webhooks","pages":[{"group":"Payment Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-status","playground":"none","title":"Payment Status Update","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-status-update"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-refund","playground":"none","title":"Payment Refund","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-refund"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-operation-failure","playground":"none","title":"Payment Operation Failure","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-operation-failure"}]},{"group":"Workflow Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /workflow-run-failed","playground":"none","title":"Workflow Run Failed","href":"/api-reference/endpoints/v2.4/workflow-webhooks/workflow-run-failed"}]},{"group":"Disputes \u0026 Chargebacks Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /dispute-opened","playground":"none","title":"Dispute Open","href":"/api-reference/endpoints/v2.4/dispute-and-chargebacks-webhooks/dispute-open"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /dispute-status","playground":"none","title":"Dispute Status","href":"/api-reference/endpoints/v2.4/dispute-and-chargebacks-webhooks/dispute-status"}]}]}]},{"anchor":"Changelogs","icon":"lines-leaning","pages":[{"title":"Changelog","url":"/changelogs/api-changelog","href":"/api-reference/changelog"}]}]},{"version":"v2.3","tag":"Supported","pages":[{"title":"v2.3","href":"/api-reference/get-started/v2.3/overview"}]},{"version":"v2.2","tag":"Supported","pages":[{"title":"v2.2","href":"/api-reference/get-started/v2.2/overview"}]},{"version":"v2.1","tag":"Supported","pages":[{"title":"v2.1","href":"/api-reference/get-started/v2.1/overview"}]},{"version":"v2","tag":"Supported","pages":[{"title":"v2","href":"/api-reference/get-started/v2/overview"}]}]},{"tab":"SDK Reference","anchors":[{"anchor":"Web","icon":"globe","groups":[{"group":"Web","pages":[{"title":"SDK reference overview","sidebarTitle":"Overview","href":"/sdk/primer-checkout-web/sdk-reference-overview"},{"title":"SDK options reference","sidebarTitle":"SDK options","href":"/sdk/primer-checkout-web/sdk-options-reference"},{"title":"Styling variables","href":"/sdk/primer-checkout-web/styling-variables"},{"title":"Events reference","sidebarTitle":"Events reference","href":"/sdk/primer-checkout-web/events-reference"},{"title":"Apple Pay options","sidebarTitle":"Apple Pay","href":"/sdk/primer-checkout-web/apple-pay"},{"title":"PayPal options","sidebarTitle":"PayPal","href":"/sdk/primer-checkout-web/paypal"},{"title":"Google Pay options","sidebarTitle":"Google Pay","href":"/sdk/primer-checkout-web/google-pay"},{"title":"Klarna options","sidebarTitle":"Klarna","href":"/sdk/primer-checkout-web/klarna"},{"title":"Klarna via Adyen options","sidebarTitle":"Klarna via Adyen","href":"/sdk/primer-checkout-web/adyen-klarna"},{"group":"Components","pages":[{"title":"Checkout component","sidebarTitle":"\u003cprimer-checkout>","href":"/sdk/primer-checkout-web/components/primer-checkout"},{"title":"Provider component","sidebarTitle":"\u003cprimer-provider>","href":"/sdk/primer-checkout-web/components/primer-provider"},{"title":"Main component","sidebarTitle":"\u003cprimer-main>","href":"/sdk/primer-checkout-web/components/primer-main"},{"title":"Payment Method Component","sidebarTitle":"\u003cprimer-payment-method>","href":"/sdk/primer-checkout-web/components/primer-payment-method"},{"title":"Payment Method Container","sidebarTitle":"\u003cprimer-payment-method-container>","href":"/sdk/primer-checkout-web/components/primer-payment-method-container"},{"group":"Card Form Components","pages":[{"title":"Card form","sidebarTitle":"\u003cprimer-card-form>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-card-form"},{"title":"Billing Address","sidebarTitle":"\u003cprimer-billing-address>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-billing-address"},{"title":"Card Number Input","sidebarTitle":"\u003cprimer-input-card-number>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-number"},{"title":"CVV Input","sidebarTitle":"\u003cprimer-input-cvv>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-cvv"},{"title":"Card Expiry Input","sidebarTitle":"\u003cprimer-input-card-expiry>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-expiry"},{"title":"Cardholder Name Input","sidebarTitle":"\u003cprimer-input-card-holder-name>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-holder-name"},{"title":"Card Form Submit Button","sidebarTitle":"\u003cprimer-card-form-submit>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-card-form-submit"},{"title":"Input Label","sidebarTitle":"\u003cprimer-input-label>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-label"},{"title":"Input Wrapper","sidebarTitle":"\u003cprimer-input-wrapper>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-wrapper"}]},{"title":"Vault Manager Component","sidebarTitle":"\u003cprimer-vault-manager>","href":"/sdk/primer-checkout-web/components/primer-vault-manager"},{"title":"Show Other Payments Component","sidebarTitle":"\u003cprimer-show-other-payments>","href":"/sdk/primer-checkout-web/components/primer-show-other-payments"},{"title":"Error Message Container","sidebarTitle":"\u003cprimer-error-message-container>","href":"/sdk/primer-checkout-web/components/primer-error-message-container"}]}]}]},{"anchor":"iOS","icon":"apple","versions":[{"version":"3.0.0-beta","groups":[{"group":"iOS","pages":[{"title":"Installation","sidebarTitle":"Installation","href":"/sdk/ios-checkout/v3.0.0-beta/installation"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/sdk/ios-checkout/v3.0.0-beta/troubleshooting"},{"group":"Guides","pages":[{"title":"Handle the payment result","sidebarTitle":"Handle payment result","href":"/sdk/ios-checkout/v3.0.0-beta/guides/handle-payment-result"},{"title":"Apple Pay integration","sidebarTitle":"Apple Pay","href":"/sdk/ios-checkout/v3.0.0-beta/guides/apple-pay-integration"},{"title":"UIKit integration","sidebarTitle":"UIKit integration","href":"/sdk/ios-checkout/v3.0.0-beta/guides/uikit-integration"},{"title":"SwiftUI navigation","sidebarTitle":"SwiftUI navigation","href":"/sdk/ios-checkout/v3.0.0-beta/guides/swiftui-navigation"}]},{"group":"API Reference","pages":[{"title":"API Reference","sidebarTitle":"API Reference","href":"/sdk/ios-checkout/v3.0.0-beta/api/overview"},{"group":"Core API","pages":[{"title":"PrimerCheckout","sidebarTitle":"PrimerCheckout","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout"},{"title":"PrimerCheckoutSession","sidebarTitle":"PrimerCheckoutSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-session"},{"title":"PrimerCheckoutPresenter","sidebarTitle":"PrimerCheckoutPresenter","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-presenter"},{"title":"PrimerCheckoutState","sidebarTitle":"PrimerCheckoutState","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-state"}]},{"group":"Card Form","pages":[{"title":"PrimerCardForm","sidebarTitle":"PrimerCardForm","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/primer-card-form"},{"title":"PrimerCardFormSession","sidebarTitle":"PrimerCardFormSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-form-session"},{"title":"CardFormDefaults","sidebarTitle":"CardFormDefaults","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-form-defaults"},{"title":"Card Field Components","sidebarTitle":"Card Field Components","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-field-components"}]},{"group":"Payment Methods","pages":[{"title":"PrimerPaymentMethods","sidebarTitle":"PrimerPaymentMethods","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/primer-payment-methods"},{"title":"PrimerSelectionSession","sidebarTitle":"PrimerSelectionSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/payment-methods-session"},{"title":"PaymentMethodsDefaults","sidebarTitle":"PaymentMethodsDefaults","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/payment-methods-defaults"},{"title":"PrimerVaultedPaymentMethods","sidebarTitle":"PrimerVaultedPaymentMethods","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/vaulted-payment-methods"}]},{"group":"Theming","pages":[{"title":"PrimerCheckoutTheme","sidebarTitle":"PrimerCheckoutTheme","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/primer-theme"},{"title":"Color Tokens","sidebarTitle":"Color Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/color-tokens"},{"title":"Spacing Tokens","sidebarTitle":"Spacing Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/spacing-tokens"},{"title":"Typography Tokens","sidebarTitle":"Typography Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/typography-tokens"},{"title":"Shape Tokens","sidebarTitle":"Shape Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/shape-tokens"}]},{"group":"Common Objects","pages":[{"title":"PrimerSettings","sidebarTitle":"PrimerSettings","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-settings"},{"title":"PrimerError","sidebarTitle":"PrimerError","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-error"},{"title":"Validation","sidebarTitle":"Validation","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/validation-result"},{"title":"PrimerCardNetwork","sidebarTitle":"PrimerCardNetwork","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-card-network"},{"title":"PrimerCountry","sidebarTitle":"PrimerCountry","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-country"}]}]}]}]}]},{"anchor":"Android","icon":"android","versions":[{"version":"3.0.0-beta","groups":[{"group":"Android","pages":[{"title":"Installation","sidebarTitle":"Installation","href":"/sdk/android-checkout/v3.0.0-beta/installation"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/sdk/android-checkout/v3.0.0-beta/troubleshooting"},{"group":"API Reference","pages":[{"title":"API Reference","sidebarTitle":"API Reference","href":"/sdk/android-checkout/v3.0.0-beta/api/overview"},{"group":"Core API","pages":[{"title":"PrimerCheckoutController","sidebarTitle":"PrimerCheckoutController","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-controller"},{"title":"PrimerCheckoutState","sidebarTitle":"PrimerCheckoutState","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-state"},{"title":"Payment outcomes","sidebarTitle":"Payment outcomes","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-event"},{"title":"PrimerCheckoutSheet","sidebarTitle":"PrimerCheckoutSheet","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-sheet"},{"title":"PrimerCheckoutHost","sidebarTitle":"PrimerCheckoutHost","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-host"}]},{"group":"Card Form","pages":[{"title":"PrimerCardForm","sidebarTitle":"PrimerCardForm","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/primer-card-form"},{"title":"PrimerCardFormController","sidebarTitle":"PrimerCardFormController","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-form-controller"},{"title":"CardFormDefaults","sidebarTitle":"CardFormDefaults","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-form-defaults"},{"title":"Card Field Components","sidebarTitle":"Card Field Components","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-field-components"}]},{"group":"Payment Methods","pages":[{"title":"PrimerPaymentMethods","sidebarTitle":"PrimerPaymentMethods","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/primer-payment-methods"},{"title":"PrimerPaymentMethodsController","sidebarTitle":"PrimerPaymentMethodsController","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/payment-methods-controller"},{"title":"PaymentMethodsDefaults","sidebarTitle":"PaymentMethodsDefaults","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/payment-methods-defaults"},{"title":"PrimerVaultedPaymentMethodsController","sidebarTitle":"VaultedPaymentMethodsController","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/vaulted-payment-methods-controller"}]},{"group":"Theming","pages":[{"title":"PrimerTheme","sidebarTitle":"PrimerTheme","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/primer-theme"},{"title":"Color Tokens","sidebarTitle":"Color Tokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/color-tokens"},{"title":"SpacingTokens","sidebarTitle":"SpacingTokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/spacing-tokens"},{"title":"TypographyTokens","sidebarTitle":"TypographyTokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/typography-tokens"},{"title":"Shape Tokens","sidebarTitle":"Shape Tokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/shape-tokens"}]},{"group":"Common Objects","pages":[{"title":"PrimerSettings","sidebarTitle":"PrimerSettings","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-settings"},{"title":"PrimerError","sidebarTitle":"PrimerError","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-error"},{"title":"Validation","sidebarTitle":"Validation","href":"/sdk/android-checkout/v3.0.0-beta/api/common/validation-result"},{"title":"PrimerCardNetwork","sidebarTitle":"PrimerCardNetwork","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-card-network"},{"title":"PrimerCountry","sidebarTitle":"PrimerCountry","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-country"}]}]}]}]}]},{"anchor":"React Native","icon":"react","versions":[{"version":"v2.x.x","groups":[{"group":"React Native SDK","pages":[{"title":"React Native installation","sidebarTitle":"Installation","href":"/sdk/react-native/v2.x.x/installation"},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/react-native/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/react-native/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/react-native/v2.x.x/primer/methods/showVaultManager"},{"title":"showPaymentMethod","href":"/sdk/react-native/v2.x.x/primer/methods/showPaymentMethod"},{"title":"dismiss","href":"/sdk/react-native/v2.x.x/primer/methods/dismiss"}]}]},{"group":"PrimerHeadlessCheckout","pages":[{"group":"Assets manager","pages":[{"title":"getPaymentMethodResource","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodResource"},{"title":"getPaymentMethodResources","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodResources"},{"title":"getPaymentMethodAssets","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAsset"},{"title":"getCardNetworkImage","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/constructor"},{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/configure"},{"title":"showPaymentMethod","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw data manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/constructor"},{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"getRequiredInputElementTypes","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/getRequiredInputElementTypes"},{"title":"setRawData","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/setRawData"},{"title":"submit","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/submit"},{"title":"cleanUp","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/cleanup"}]},{"group":"Component with redirect manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/component-with-redirect-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"}]},{"group":"Klarna headless manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/klarna-headless-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/klarna-headless-manager/provide"}]},{"group":"ACH headless manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/ach-headless-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/configure"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Common objects","pages":[{"title":"PrimerSettings","href":"/sdk/react-native/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerCheckoutData","href":"/sdk/react-native/v2.x.x/common-objects/PrimerCheckoutData"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/react-native/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PrimerError","href":"/sdk/react-native/v2.x.x/common-objects/PrimerError"}]}]}]}]},{"anchor":"Legacy SDKs","icon":"clock-rotate-left","groups":[{"group":"Web SDK (v2.x.x)","pages":[{"group":"Getting started","pages":[{"title":"Web installation","sidebarTitle":"Installation","href":"/sdk/web/v2.x.x/installation"},{"title":"Handle redirects \u0026 deep links","sidebarTitle":"Handle redirects \u0026 deep links","href":"/sdk/web/v2.x.x/handle-redirects-and-deeplinks"}]},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"showUniversalCheckout","href":"/sdk/web/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"createHeadless","href":"/sdk/web/v2.x.x/primer/methods/createHeadless"},{"title":"showVaultManager","href":"/sdk/web/v2.x.x/primer/methods/showVaultManager"}]}]},{"group":"PrimerCheckout","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/sdk/web/v2.x.x/primer-checkout/overview"},{"group":"Methods","pages":[{"title":"refreshClientSession","href":"/sdk/web/v2.x.x/primer-checkout/methods/refreshClientSession"},{"title":"setPaymentCreationEnabled","href":"/sdk/web/v2.x.x/primer-checkout/methods/setPaymentCreationEnabled"},{"title":"setTokenizationEnabled","href":"/sdk/web/v2.x.x/primer-checkout/methods/setTokenizationEnabled"},{"title":"submit","href":"/sdk/web/v2.x.x/primer-checkout/methods/submit"},{"title":"teardown","href":"/sdk/web/v2.x.x/primer-checkout/methods/teardown"}]}]},{"group":"PrimerHeadlessCheckout","pages":[{"group":"Methods","pages":[{"title":"start","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/start"},{"title":"refreshClientSession","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/refreshClientSession"},{"title":"createPaymentMethodManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/createPaymentMethodManager"},{"title":"getAssetsManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/getAssetsManager"},{"title":"createVaultManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/createVaultManager"},{"title":"configure","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/configure"}]},{"group":"Types","pages":[{"title":"HeadlessHostedInput","href":"/sdk/web/v2.x.x/primer-headless-checkout/types/HeadlessHostedInput"},{"title":"HeadlessPaymentMethodButton","href":"/sdk/web/v2.x.x/primer-headless-checkout/types/HeadlessPaymentMethodButton"}]}]},{"group":"CheckoutStyle","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/sdk/web/v2.x.x/checkout-style/Overview"},{"title":"InputStyle","href":"/sdk/web/v2.x.x/checkout-style/InputStyle"},{"title":"BaseInputStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseInputStyle"},{"title":"TextStyle","href":"/sdk/web/v2.x.x/checkout-style/TextStyle"},{"title":"SavedPaymentMethodButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/SavedPaymentMethodButtonStyle"},{"title":"BaseSavedPaymentMethodButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseSavedPaymentMethodButtonStyle"},{"title":"SubmitButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/SubmitButtonStyle"},{"title":"BaseSubmitButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseSubmitButtonStyle"}]},{"group":"Common objects","pages":[{"title":"PrimerClientError","href":"/sdk/web/v2.x.x/common-objects/PrimerClientError"}]},{"group":"Constants","pages":[{"title":"Card networks","sidebarTitle":"Card networks","href":"/sdk/web/v2.x.x/constants/card-networks"},{"title":"Payment method types","sidebarTitle":"Payment method types","href":"/sdk/web/v2.x.x/constants/payment-method-types"},{"title":"Payment instrument types","sidebarTitle":"Payment instrument types","href":"/sdk/web/v2.x.x/constants/payment-instrument-types"}]}]},{"group":"iOS SDK (v2.x.x)","pages":[{"group":"Getting started","pages":[{"title":"iOS installation","sidebarTitle":"Installation","href":"/sdk/ios/v2.x.x/installation"},{"title":"Handle redirects \u0026 deep links","sidebarTitle":"Handle redirects \u0026 deep links","href":"/sdk/ios/v2.x.x/handle-redirects-and-deeplinks"}]},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/ios/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/ios/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/ios/v2.x.x/primer/methods/showVaultManager"},{"title":"dismiss","href":"/sdk/ios/v2.x.x/primer/methods/dismiss"}]},{"group":"Delegates","pages":[{"title":"PrimerDelegate","href":"/sdk/ios/v2.x.x/primer/delegates/PrimerDelegate"}]},{"group":"Properties","pages":[{"title":"logger","href":"/sdk/ios/v2.x.x/primer/properties/logger"}]}]},{"group":"PrimerHeadlessUniversalCheckout","pages":[{"group":"Properties","pages":[{"title":"delegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/properties/delegate"}]},{"group":"Methods","pages":[{"title":"start","href":"/sdk/ios/v2.x.x/primer-headless-checkout/methods/start"},{"title":"cleanUp","href":"/sdk/ios/v2.x.x/primer-headless-checkout/methods/cleanUp"}]},{"group":"Delegates","pages":[{"title":"PrimerHeadlessUniversalCheckoutDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/delegates/PrimerHeadlessUniversalCheckoutDelegate"},{"title":"PrimerHeadlessUniversalCheckoutUIDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/delegates/PrimerHeadlessUniversalCheckoutUIDelegate"}]},{"group":"Assets manager","pages":[{"title":"getPaymentMethodAssets","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAsset"},{"title":"getCardNetworkAsset","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkAsset"},{"title":"getCardNetworkImage","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/native-ui-manager/init"},{"title":"showPaymentMethod","href":"/sdk/ios/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw data manager","pages":[{"title":"delegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/delegate"},{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/init"},{"title":"configure","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"listRequiredInputElementTypes","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/listRequiredInputElementTypes"},{"title":"submit","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/submit"}]},{"group":"Raw data manager delegate","pages":[{"title":"PrimerHeadlessUniversalCheckoutRawDataManagerDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager-delegate/PrimerHeadlessUniversalCheckoutRawDataManagerDelegate"}]},{"group":"NOL pay manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/init"},{"title":"provideNolPayLinkedCardsComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent"},{"title":"provideNolPayLinkCardComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent"},{"title":"provideNolPayUnlinkCardComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent"},{"title":"provideNolPayPaymentComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent"},{"title":"PrimerNolPaymentCard","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/PrimerNolPaymentCard"}]},{"group":"Component with redirect manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/init"},{"title":"provide","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"},{"title":"provideBanksComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provideBanksComponent"},{"title":"provideComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provideComponent"},{"title":"PrimerHeadlessMainComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/PrimerHeadlessMainComponent"}]},{"group":"Klarna headless manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/klarna-headless-manager/init"},{"title":"provideKlarnaComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent"}]},{"group":"ACH headless manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/ach-headless-manager/init"},{"title":"provide","href":"/sdk/ios/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/init"},{"title":"configure","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/configure"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Common objects","pages":[{"title":"PrimerSessionIntent","href":"/sdk/ios/v2.x.x/common-objects/PrimerSessionIntent"},{"title":"PrimerSettings","href":"/sdk/ios/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/ios/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PaymentMethod","href":"/sdk/ios/v2.x.x/common-objects/PaymentMethod"},{"title":"PrimerError","href":"/sdk/ios/v2.x.x/common-objects/PrimerError"},{"title":"PrimerValidationError","href":"/sdk/ios/v2.x.x/common-objects/PrimerValidationError"}]}]},{"group":"Android SDK (v2.x.x)","pages":[{"title":"Android installation","sidebarTitle":"Installation","href":"/sdk/android/v2.x.x/installation"},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/android/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/android/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/android/v2.x.x/primer/methods/showVaultManager"},{"title":"showPaymentMethod","href":"/sdk/android/v2.x.x/primer/methods/showPaymentMethod"},{"title":"dismiss","href":"/sdk/android/v2.x.x/primer/methods/dismiss"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer/methods/cleanup"}]},{"group":"Listeners","pages":[{"title":"PrimerCheckoutListener","href":"/sdk/android/v2.x.x/primer/listeners/PrimerCheckoutListener"}]}]},{"group":"PrimerHeadlessUniversalCheckout","pages":[{"group":"Methods","pages":[{"title":"start","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/start"},{"title":"setCheckoutListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/setCheckoutListener"},{"title":"setCheckoutUiListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/setCheckoutUiListener"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/cleanup"}]},{"group":"Listeners","pages":[{"title":"PrimerHeadlessUniversalCheckoutListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/listeners/PrimerHeadlessUniversalCheckoutListener"},{"title":"PrimerHeadlessUniversalCheckoutUiListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/listeners/PrimerHeadlessUniversalCheckoutUiListener"}]},{"group":"Assets Managers","pages":[{"title":"getPaymentMethodResources","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResources"},{"title":"getPaymentMethodResource","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResource"},{"title":"getPaymentMethodAssets","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAsset"},{"title":"getCardNetworkAsset","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getCardNetworkAsset"},{"title":"getCardNetworkImage","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/native-ui-manager/newInstance"},{"title":"showPaymentMethod","href":"/sdk/android/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw Data manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/newInstance"},{"title":"configure","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"getRequiredInputElementTypes","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/getRequiredInputElementTypes"},{"title":"setListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/setListener"},{"title":"setRawData","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/setRawData"},{"title":"submit","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/submit"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/cleanup"}]},{"group":"Raw Data Manager Listener","pages":[{"title":"PrimerHeadlessUniversalCheckoutRawDataManagerListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager-listener/PrimerHeadlessUniversalCheckoutRawDataManagerListener"}]},{"group":"NOL Pay manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/init"},{"title":"provideNolPayLinkedCardsComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent"},{"title":"provideNolPayNfcComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayNfcComponent"},{"title":"provideNolPayLinkCardComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent"},{"title":"provideNolPayUnlinkCardComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent"},{"title":"provideNolPayPaymentComponent","sidebarTitle":"Provide nol Pay Payment Component","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent"}]},{"group":"Component With Redirect manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/component-with-redirect-manager/init"},{"title":"provide","href":"/sdk/android/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"}]},{"group":"Klarna Headless manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/init"},{"title":"provideKlarnaComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent"}]},{"group":"ACH Headless manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/ach-headless-manager/init"},{"title":"provide","href":"/sdk/android/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/newInstance"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Logging","pages":[{"title":"PrimerLogger","href":"/sdk/android/v2.x.x/logging/PrimerLogger"}]},{"group":"Common objects","pages":[{"title":"PrimerSessionIntent","href":"/sdk/android/v2.x.x/common-objects/PrimerSessionIntent"},{"title":"PrimerSettings","href":"/sdk/android/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerCheckoutData","href":"/sdk/android/v2.x.x/common-objects/PrimerCheckoutData"},{"title":"PrimerPaymentMethodData","href":"/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodData"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PrimerError","href":"/sdk/android/v2.x.x/common-objects/PrimerError"},{"title":"PrimerValidationError","href":"/sdk/android/v2.x.x/common-objects/PrimerValidationError"},{"title":"PrimerInputValidationError","href":"/sdk/android/v2.x.x/common-objects/PrimerInputValidationError"}]}]}]},{"anchor":"Lifecycle","icon":"clock","groups":[{"group":"Lifecycle","pages":[{"title":"SDK lifecycle","sidebarTitle":"Overview","href":"/sdk/lifecycle"}]}]}]},{"tab":"Connections","anchors":[{"anchor":"Processors","icon":"server","groups":[{"group":"Processors","pages":[{"title":"Overview","href":"/connections/processors/overview"},{"title":"Ecommpay","icon":"https://goat-assets.production.core.primer.io/brand/icon/ecommpay.svg","href":"/connections/processors/ecommpay"}]}]},{"anchor":"Payment methods","icon":"money-check","groups":[{"group":"Payment methods","pages":[{"title":"Overview","href":"/connections/payment-methods/overview"},{"title":"Available Payment Methods","href":"/connections/payment-methods/available-payment-methods"},{"group":"ACH","icon":"building-columns","pages":[{"title":"ACH","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/ach/overview"},{"title":"ACH via Stripe","sidebarTitle":"Stripe","icon":"https://goat-assets.production.core.primer.io/brand/icon/stripe.svg","href":"/connections/payment-methods/ach/stripe"}]},{"group":"Afterpay","icon":"https://goat-assets.production.core.primer.io/brand/icon/afterpay.svg","pages":[{"title":"Afterpay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/afterpay/overview"}]},{"group":"Alipay","icon":"https://goat-assets.production.core.primer.io/brand/icon/alipay.svg","pages":[{"title":"Alipay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/alipay/overview"}]},{"group":"Alipay+","icon":"https://goat-assets.production.core.primer.io/brand/icon/alipay-plus.svg","pages":[{"title":"Alipay+","icon":"align-left","sidebarTitle":"Overview","href":"/connections/payment-methods/alipay-plus/overview"},{"title":"Alipay+ via Onerway","sidebarTitle":"Onerway","icon":"https://goat-assets.production.core.primer.io/brand/icon/onerway.svg","href":"/connections/payment-methods/alipay-plus/onerway"}]},{"group":"Alma","icon":"https://goat-assets.production.core.primer.io/brand/icon/alma.svg","pages":[{"sidebarTitle":"Overview","icon":"align-left","title":null,"href":"/connections/payment-methods/alma/overview"},{"title":"Alma","sidebarTitle":"Alma","href":"/connections/payment-methods/alma/alma"}]},{"group":"ANCV","icon":"https://goat-assets.production.core.primer.io/brand/icon/ancv.svg","pages":[{"title":"ANCV","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/ancv/overview"},{"title":"ANCV via 1Point6","sidebarTitle":"1Point6","icon":"https://goat-assets.production.core.primer.io/brand/icon/onepoint6.svg","href":"/connections/payment-methods/ancv/1point6"}]},{"title":"Apple Pay","icon":"https://goat-assets.production.core.primer.io/brand/icon/apple-pay.svg","sidebarTitle":"Apple Pay","href":"/connections/payment-methods/apple-pay/overview"},{"group":"Atome","icon":"https://goat-assets.production.core.primer.io/brand/icon/atome.svg","pages":[{"title":"Atome","sidebarTitle":"Atome","icon":"align-left","href":"/connections/payment-methods/atome/overview"},{"title":"Atome via Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/atome/direct-integration"},{"title":"Atome via HitPay","sidebarTitle":"HitPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/hitpay.svg","href":"/connections/payment-methods/atome/hitpay"}]},{"group":"Bancontact","icon":"https://goat-assets.production.core.primer.io/brand/icon/bancontact.svg","pages":[{"title":"Bancontact","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/bancontact/overview"},{"title":"Bancontact via 1Point6","sidebarTitle":"1Point6","icon":"https://goat-assets.production.core.primer.io/brand/icon/onepoint6.svg","href":"/connections/payment-methods/bancontact/1point6"},{"title":"Bancontact via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/bancontact/checkout"}]},{"group":"Bancontact Payconiq","icon":"https://goat-assets.production.core.primer.io/brand/icon/payconiq-by-bancontact.svg","pages":[{"title":"Bancontact Payconiq","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/bancontact-payconiq/overview"}]},{"group":"Bank Transfer","icon":"building-columns","pages":[{"title":"Bank Transfer","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/bank-transfer/overview"},{"title":"SCT (Pay by IBAN) via 1Point6","sidebarTitle":"1Point6","icon":"https://goat-assets.production.core.primer.io/brand/icon/onepoint6.svg","href":"/connections/payment-methods/bank-transfer/1point6"},{"title":"Instant Bank Transfer via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/bank-transfer/nuvei"}]},{"group":"Bizum","icon":"https://goat-assets.production.core.primer.io/brand/icon/bizum.svg","pages":[{"title":"Bizum","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/bizum/overview"},{"title":"BIZUM via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/bizum/nuvei"}]},{"group":"Blik","icon":"https://goat-assets.production.core.primer.io/brand/icon/blik.svg","pages":[{"title":"Blik","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/blik/overview"},{"title":"BLIK via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/blik/nomupay"}]},{"title":"Card","sidebarTitle":"Card","icon":"credit-card","href":"/connections/payment-methods/card/overview"},{"group":"Carte Cadeau","icon":"https://goat-assets.production.core.primer.io/brand/icon/carte-cadeau-conforama.svg","pages":[{"title":"Carte Cadeau","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/carte-cadeau/overview"},{"title":"Carte Cadeau via Thunes","sidebarTitle":"Thunes","icon":"https://goat-assets.production.core.primer.io/brand/icon/thunes.svg","href":"/connections/payment-methods/carte-cadeau/thunes"}]},{"group":"Cetelem","icon":"https://goat-assets.production.core.primer.io/brand/icon/cetelem.svg","pages":[{"title":"Cetelem","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/cetelem/overview"},{"title":"Cetelem via Monext","sidebarTitle":"Monext","icon":"https://goat-assets.production.core.primer.io/brand/icon/monext.svg","href":"/connections/payment-methods/cetelem/monext"}]},{"group":"Chèque Fidélité","icon":"https://goat-assets.production.core.primer.io/brand/icon/cheque-fidelite-conforama.svg","pages":[{"title":"Chèque Fidélité","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/cheque-fid/overview"},{"title":"Chèque Fidélité via Thunes","sidebarTitle":"Thunes","icon":"https://goat-assets.production.core.primer.io/brand/icon/thunes.svg","href":"/connections/payment-methods/cheque-fid/thunes"}]},{"group":"Clearpay","icon":"https://goat-assets.production.core.primer.io/brand/icon/clearpay.svg","pages":[{"title":"Clearpay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/clearpay/overview"}]},{"group":"Coinbase","icon":"https://goat-assets.production.core.primer.io/brand/icon/coinbase.svg","pages":[{"title":"Coinbase","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/coinbase/overview"}]},{"group":"Confo+","icon":"https://goat-assets.production.core.primer.io/brand/icon/confo-plus.svg","pages":[{"title":"Confo+","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/confo/overview"},{"title":"Confo+ via Worldline SIPS","sidebarTitle":"Worldline SIPS","icon":"https://mintlify-assets.b-cdn.net/primer-new/confo.svg","href":"/connections/payment-methods/confo/worldline-sips"}]},{"group":"CPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/cpay.svg","pages":[{"title":"CPay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/cpay/overview"},{"title":"CPay via Monext","sidebarTitle":"Monext","icon":"https://mintlify-assets.b-cdn.net/primer-new/cpay%20(1).svg","href":"/connections/payment-methods/cpay/monext"},{"title":"CPay via Worldline SIPS","sidebarTitle":"Worldline SIPS","icon":"https://mintlify-assets.b-cdn.net/primer-new/cpay%20(1).svg","href":"/connections/payment-methods/cpay/worldline-sips"}]},{"group":"Dana","icon":"https://goat-assets.production.core.primer.io/brand/icon/dana.svg","pages":[{"title":"Dana","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/dana/overview"}]},{"group":"EPS","icon":"https://goat-assets.production.core.primer.io/brand/icon/eps.svg","pages":[{"title":"EPS","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/eps/overview"},{"title":"EPS via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/eps/nuvei"}]},{"group":"Fintecture Smart Transfer","icon":"https://goat-assets.production.core.primer.io/brand/icon/fintecture.svg","pages":[{"title":"Fintecture Smart Transfer","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/fintecture-smart/overview"},{"title":"Fintecture Smart Transfer: Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/fintecture-smart/direct-integration"}]},{"group":"Fintecture Transfer","icon":"https://goat-assets.production.core.primer.io/brand/icon/fintecture.svg","pages":[{"title":"Fintecture Immediate Transfer","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/fintecture-transfer/overview"},{"title":"Fintecture Immediate Transfer via Direct Integration","sidebarTitle":"Direct integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/fintecture-transfer/direct-integration"}]},{"group":"FLOA","icon":"https://goat-assets.production.core.primer.io/brand/icon/floa_pay.svg","pages":[{"title":"FLOA","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/floa/overview"},{"title":"FLOA via 1Point6","sidebarTitle":"1Point6","icon":"https://goat-assets.production.core.primer.io/brand/icon/onepoint6.svg","href":"/connections/payment-methods/floa/1point6"},{"title":"Floa","sidebarTitle":"Floa","icon":"https://goat-assets.production.core.primer.io/brand/icon/floa_pay.svg","href":"/connections/payment-methods/floa/direct-integration"}]},{"group":"GCash","icon":"https://goat-assets.production.core.primer.io/brand/icon/gcash.svg","pages":[{"title":"GCash","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/gcash/overview"},{"title":"GCash via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/gcash/nomupay"}]},{"group":"Google Pay","icon":"https://goat-assets.production.core.primer.io/brand/icon/google-pay.svg","pages":[{"title":"Google Pay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/google-pay/overview"},{"title":"Manage Google Pay domains through Primer","sidebarTitle":"Domain management","tag":"BETA","href":"/connections/payment-methods/google-pay/domain-management"}]},{"group":"GrabPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/grabpay.svg","pages":[{"title":"GrabPay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/grabpay/overview"},{"title":"GrabPay via HitPay","sidebarTitle":"HitPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/hitpay.svg","href":"/connections/payment-methods/grabpay/hitpay"},{"title":"GrabPay via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/grabpay/nomupay"}]},{"group":"iDEAL","icon":"https://goat-assets.production.core.primer.io/brand/icon/ideal.svg","pages":[{"title":"iDEAL","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/ideal/overview"},{"title":"iDEAL via 1Point6","sidebarTitle":"1Point6","icon":"https://goat-assets.production.core.primer.io/brand/icon/onepoint6.svg","href":"/connections/payment-methods/ideal/1point6"},{"title":"iDEAL via Adyen","sidebarTitle":"Adyen","icon":"https://goat-assets.production.core.primer.io/brand/icon/adyen.svg","href":"/connections/payment-methods/ideal/adyen"},{"title":"iDEAL via Mollie","sidebarTitle":"Mollie","icon":"https://goat-assets.production.core.primer.io/brand/icon/mollie.svg","href":"/connections/payment-methods/ideal/mollie"},{"title":"iDEAL via Stripe","sidebarTitle":"Stripe","icon":"https://goat-assets.production.core.primer.io/brand/icon/stripe.svg","href":"/connections/payment-methods/ideal/stripe"},{"title":"iDEAL via Worldpay","sidebarTitle":"WorldPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/worldpay.svg","href":"/connections/payment-methods/ideal/worldpay"},{"title":"iDEAL via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/ideal/checkout"},{"title":"iDEAL via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/ideal/nuvei"}]},{"group":"Illicado","icon":"https://goat-assets.production.core.primer.io/brand/icon/illicado.svg","pages":[{"title":"Illicado","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/illicado/overview"},{"title":"Illicado via Thunes","sidebarTitle":"Thunes","icon":"https://goat-assets.production.core.primer.io/brand/icon/thunes.svg","href":"/connections/payment-methods/illicado/thunes"}]},{"group":"Kaartdirect","icon":"https://goat-assets.production.core.primer.io/brand/icon/kaartdirect.svg","pages":[{"title":"Kaartdirect","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/kaartdirect/overview"}]},{"group":"Klarna","icon":"https://goat-assets.production.core.primer.io/brand/icon/klarna.svg","pages":[{"title":"Klarna","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/klarna/overview"},{"title":"Klarna via Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/klarna/direct-integration"}]},{"group":"MBWay","icon":"https://goat-assets.production.core.primer.io/brand/icon/mbway.svg","pages":[{"title":"MBWay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/mbway/overview"}]},{"group":"Mobilepay","icon":"https://goat-assets.production.core.primer.io/brand/icon/mobilepay.svg","pages":[{"title":"MobilePay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/mobilepay/overview"},{"title":"MobilePay via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/mobilepay/checkout"},{"title":"MobilePay via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/mobilepay/nuvei"}]},{"group":"Multibanco","icon":"https://goat-assets.production.core.primer.io/brand/icon/multibanco.svg","pages":[{"title":"Multibanco","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/multibanco/overview"}]},{"group":"Netaxept","icon":"https://goat-assets.production.core.primer.io/brand/icon/netaxept.svg","pages":[{"title":"Netaxept","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/netaxept/overview"}]},{"group":"Nets Easy","icon":"https://goat-assets.production.core.primer.io/brand/icon/nets.svg","pages":[{"title":"Nets Easy","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/nets-easy/overview"}]},{"group":"nol Pay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nol-pay.svg","pages":[{"title":"nol Pay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/nol-pay/overview"},{"title":"nol Pay via Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/nol-pay/direct-integration"}]},{"group":"NPP","icon":"https://goat-assets.production.core.primer.io/brand/icon/npp.svg","pages":[{"title":"NPP","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/npp/overview"},{"title":"NPP via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/npp/nuvei"}]},{"group":"Ovo","icon":"https://goat-assets.production.core.primer.io/brand/icon/ovo.svg","pages":[{"title":"Ovo","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/ovo/overview"}]},{"group":"P24","icon":"https://goat-assets.production.core.primer.io/brand/icon/p24.svg","pages":[{"title":"P24","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/p24/overview"},{"title":"P24 via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/p24/nomupay"}]},{"group":"Payconiq","icon":"https://goat-assets.production.core.primer.io/brand/icon/payconiq.svg","pages":[{"title":"Payconiq","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/payconiq/overview"}]},{"group":"PayNow","icon":"https://goat-assets.production.core.primer.io/brand/icon/paynow.svg","pages":[{"title":"PayNow","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/paynow/overview"}]},{"group":"PayPal","icon":"https://goat-assets.production.core.primer.io/brand/icon/paypal.svg","pages":[{"title":"PayPal","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/paypal/overview"},{"title":"PayPal via Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/primer.svg","href":"/connections/payment-methods/paypal/direct-integration"}]},{"group":"Paytrail","icon":"https://goat-assets.production.core.primer.io/brand/icon/paytrail.svg","pages":[{"title":"Paytrail","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/paytrail/overview"}]},{"group":"Pinless Debit","icon":"credit-card","pages":[{"title":"Pinless Debit","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/pinless-debit/overview"},{"title":"Pinless Debit via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/pinless-debit/checkout"}]},{"group":"PromptPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/promptpay.svg","pages":[{"title":"PromptPay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/promptpay/overview"}]},{"group":"Revolut Pay","icon":"https://goat-assets.production.core.primer.io/brand/icon/revolut.svg","pages":[{"title":"Revolut Pay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/revolut-pay/overview"},{"title":"Revolut Pay via Direct Integration","sidebarTitle":"Direct Integration","icon":"https://goat-assets.production.core.primer.io/brand/icon/revolut.svg","href":"/connections/payment-methods/revolut-pay/revolut-pay"}]},{"group":"Riverty","icon":"https://goat-assets.production.core.primer.io/brand/icon/riverty.svg","pages":[{"title":"Riverty","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/riverty/overview"},{"title":"RIVERTY via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/riverty/nuvei"}]},{"group":"ShopBack","icon":"https://goat-assets.production.core.primer.io/brand/icon/shopback.svg","pages":[{"title":"ShopBack","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/shopback/overview"}]},{"group":"ShopeePay","icon":"https://goat-assets.production.core.primer.io/brand/icon/shopee-pay.svg","pages":[{"title":"ShopeePay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/shopeepay/overview"},{"title":"ShopeePay via HitPay","sidebarTitle":"HitPay","icon":"https://goat-assets.production.core.primer.io/brand/icon/hitpay.svg","href":"/connections/payment-methods/shopeepay/hitpay"}]},{"group":"Spirit of Cadeau","icon":"https://goat-assets.production.core.primer.io/brand/icon/spirit-of-cadeau.svg","pages":[{"title":"Spirit of Cadeau","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/spirit-of-cadeau/overview"},{"title":"Spirit of Cadeau via Thunes","sidebarTitle":"Thunes","icon":"https://goat-assets.production.core.primer.io/brand/icon/thunes.svg","href":"/connections/payment-methods/spirit-of-cadeau/thunes"}]},{"group":"Swish","icon":"https://goat-assets.production.core.primer.io/brand/icon/swish.svg","pages":[{"title":"Swish","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/swish/overview"},{"title":"Swish via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/swish/nomupay"},{"title":"Swish via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/swish/nuvei"}]},{"group":"TripleA","icon":"https://goat-assets.production.core.primer.io/brand/icon/triple-a.svg","pages":[{"title":"TripleA","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/triplea/overview"}]},{"group":"TrueMoney","icon":"https://goat-assets.production.core.primer.io/brand/icon/truemoney.svg","pages":[{"title":"TrueMoney","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/truemoney/overview"}]},{"group":"Trustly","icon":"https://goat-assets.production.core.primer.io/brand/icon/trustly.svg","pages":[{"title":"Trustly","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/trustly/overview"},{"title":"Trustly via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/trustly/nomupay"}]},{"group":"Twint","icon":"https://goat-assets.production.core.primer.io/brand/icon/twint.svg","pages":[{"title":"Twint","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/twint/overview"},{"title":"TWINT via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/twint/nomupay"},{"title":"TWINT via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/twint/checkout"},{"title":"TWINT via Nuvei","sidebarTitle":"Nuvei","icon":"https://goat-assets.production.core.primer.io/brand/icon/nuvei.svg","href":"/connections/payment-methods/twint/nuvei"}]},{"group":"Venmo","icon":"https://goat-assets.production.core.primer.io/brand/icon/venmo.svg","pages":[{"title":"Venmo","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/venmo/overview"},{"title":"Venmo via Braintree","sidebarTitle":"Braintree","icon":"https://goat-assets.production.core.primer.io/brand/icon/braintree.svg","href":"/connections/payment-methods/venmo/braintree"}]},{"group":"Vipps","icon":"https://goat-assets.production.core.primer.io/brand/icon/vipps.svg","pages":[{"title":"Vipps","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/vipps/overview"},{"title":"Vipps via Checkout.com","sidebarTitle":"Checkout.com","icon":"https://goat-assets.production.core.primer.io/brand/icon/checkout.com.svg","href":"/connections/payment-methods/vipps/checkout"}]},{"group":"WeChat Pay","icon":"https://goat-assets.production.core.primer.io/brand/icon/wechat-pay.svg","pages":[{"title":"WeChat Pay","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/wechat-pay/overview"},{"title":"WeChat Pay via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/wechat-pay/nomupay"}]},{"group":"Wero","icon":"https://goat-assets.production.core.primer.io/brand/icon/wero.svg","pages":[{"title":"Wero","sidebarTitle":"Overview","icon":"align-left","href":"/connections/payment-methods/wero/overview"},{"title":"Wero via Nomupay","sidebarTitle":"Nomupay","icon":"https://goat-assets.production.core.primer.io/brand/icon/nomupay.svg","href":"/connections/payment-methods/wero/nomupay"}]}]}]},{"anchor":"Fraud providers","icon":"shield","groups":[{"group":"Fraud providers","pages":[{"title":"Overview","href":"/connections/fraud-providers/overview"},{"title":"Forter","sidebarTitle":"Forter","icon":"https://goat-assets.production.core.primer.io/brand/icon/forter.svg","href":"/connections/fraud-providers/forter"},{"title":"Riskified","sidebarTitle":"Riskified","icon":"https://goat-assets.production.core.primer.io/brand/icon/riskified.svg","href":"/connections/fraud-providers/riskified"},{"title":"Sift","sidebarTitle":"Sift","icon":"https://goat-assets.production.core.primer.io/brand/icon/sift.svg","href":"/connections/fraud-providers/sift"},{"title":"Signifyd","sidebarTitle":"Signifyd","icon":"https://goat-assets.production.core.primer.io/brand/icon/signifyd.svg","href":"/connections/fraud-providers/signifyd"}]}]},{"anchor":"Primer for Partners","icon":"handshake","groups":[{"group":"Primer for Partners","icon":"handshake","pages":[{"title":"Overview","href":"/connections/primer-for-partners/overview"}]}]}]},{"tab":"Changelogs","groups":[{"group":"API changelogs","pages":[{"title":"API Changelog","sidebarTitle":"API Changelog","href":"/changelogs/api-changelog"}]},{"group":"SDK changelogs","pages":[{"group":"Web","icon":"globe","pages":[{"title":"Web SDK changelogs","sidebarTitle":"Overview","icon":"list","href":"/changelogs/web"},{"title":"Primer checkout SDK","sidebarTitle":"Primer checkout SDK","icon":"sparkles","href":"/changelogs/primer-checkout-sdk"},{"title":"Web SDK","sidebarTitle":"Web SDK","icon":"code","href":"/changelogs/web-sdk"}]},{"group":"Mobile","icon":"mobile","pages":[{"title":"iOS SDK","sidebarTitle":"iOS SDK","icon":"apple","href":"/changelogs/ios-sdk"},{"title":"Android SDK","sidebarTitle":"Android SDK","icon":"android","href":"/changelogs/android-sdk"},{"title":"React Native SDK","sidebarTitle":"React Native SDK","icon":"react","href":"/changelogs/react-native-sdk"}]}]},{"group":"Migration guides","pages":[{"title":"Token migration","href":"/changelogs/migration-guides/token-migration"},{"title":"Token export","href":"/changelogs/migration-guides/token-export"},{"title":"API v2.3 to v2.4","sidebarTitle":"API v2.3 to v2.4","href":"/changelogs/migration-guides/API-2.3-to-2.4"},{"title":"Payment Status Webhooks","sidebarTitle":"Payment status webhooks","href":"/changelogs/migration-guides/payment-status-webhooks"},{"title":"Headless mobile v2.16 to v2.17","href":"/changelogs/migration-guides/headless-mobile-out-of-beta"},{"title":"Migrating from v0 to v1","sidebarTitle":"Primer Checkout - migrating from v0 to v1","href":"/changelogs/migration-guides/primer-js-v0-to-v1"},{"title":"Migrate to Primer Checkout","sidebarTitle":"Migrate to Primer Checkout","href":"/changelogs/migration-guides/migrate-to-primer-checkout"},{"title":"Migrate the manual flow to Primer Checkout","sidebarTitle":"Legacy manual flow → Primer Checkout manual flow","href":"/changelogs/migration-guides/manual-flow"}]}]}]},"basePath":"","title":"SDK v1 to v2 - Primer","buildId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","deploymentId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DRxXE_WT.js","DynamicMarkdown-AlxJK8VR.js","zoom-image-lightbox-B_-GSaTf.js","lightbox-handle-r17bVUz3.js"]}