We’ve introduced a new way to integrate our Checkout for Web
Learn how to build a fully customizable checkout using modular components through our documentation here
The simplest way to integrate Universal Checkout is with our drop-in UI. With just a few lines of code, you can display a fully in-context checkout UI with all your payment methods.
Not all payment methods are currently compatible with Drop-in Checkout.Please refer to this table to learn more about the payment methods available for Drop-in Checkout.
A client session is the starting point for integrating payments at Primer. You can attach any data associated with the order to your client session.Creating a client session provides you with a client token, a temporary key used to initialize the Universal Checkout.The information you include in the client session is used in the Dashboard:
to conditionally route payments with Workflows
to activate payment methods and other features in Universal Checkout
Requests to our API are authenticated using an API key in the X-Api-Key header. Create an API key by visiting the developer page of the Primer Dashboard.Make sure to set the following scopes for your API Key:
Make sure to keep track of orderId - you will later receive updates to the payment via Webhooks. The payment will contain the orderId specified in the client session.
Our Web SDK is available on npm under the name @primer-io/checkout-web.This package includes TypeScript definitions.
BASH
# With yarnyarn add @primer-io/checkout-web# With npmnpm install --save @primer-io/checkout-web
Typescript
import { Primer } from "@primer-io/checkout-web";Primer.showUniversalCheckout(clientToken, { /* Options */});
The npm package only works if used alongside a bundler such as Webpack or Parcel. If you’re directly writing JavaScript using script tag, please use our CDN instead.
As of today, the npm package does not work in a server environment. If you are using Next.js, Gatsby, or a similar framework, make sure the Primer functions are called on the client side, or use our CDN instead.
Include the Primer.min.js script and the Checkout.css stylesheet on the page where you want to render the Checkout. Make sure to pass the proper version in the URL.
Use the generated client token on the client-side to show Universal Checkout by calling Primer.showUniversalCheckout(clientToken, options). Make sure to pass a selector to your container in the options.
Javascript
const universalCheckout = await Primer.showUniversalCheckout(clientToken, { // Specify the selector of the container element container: "#checkout-container", /** * When the checkout flow has been completed, you'll receive * the successful payment via `onCheckoutComplete`. * Implement this callback to redirect the user to an order confirmation page. */ onCheckoutComplete({ payment }) { console.log("Checkout Complete!", payment); }, /** * When the checkout flow has been fail, you'll receive * the error via `onCheckoutFail` */ onCheckoutFail(error, { payment }, handler) { console.log("Checkout Fail!", error, payment); },});
On the client-side, listen to the onCheckoutComplete callback to be notified when the payment has been successfully completed. Use it to show an order confirmation screen.
To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.Head to the Developers section of the Primer Dashboard to setup and test a webhook for PAYMENT.STATUS event.If you are not yet ready to receive webhooks, you can use https://webhook.site to test your implementation.
Some payment methods require redirecting to another web page in order to capture payment details.Drop-in checkout automatically renders that web page in a popup window in order to maintain the current context.
If the browser cannot open popup windows, the current window will be redirected instead.To ensure maximum compatibility, read the guide on how to handle redirects.
Any errors, cancelled payment interactions or failed payments will trigger the onCheckoutFail callback with a PrimerClientError
Javascript
onCheckoutFail(error, { payment }, handler) { // Notifies you that the checkout flow has failed and a payment could not be created // This callback can also be used to display an error state within your own UI. // ⚠️ `handler` is undefined if the SDK does not expect anything from you if (!handler) { return; } // ⚠️ If `handler` exists, you MUST call one of the functions of the handler // Show a default error message return handler.showErrorMessage(); // Show a custom error message return handler.showErrorMessage('This is my custom error message');}
Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side before asking the user to pay again.
Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer iOS SDK 2.34.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.
use_frameworks!target 'MyApp' do # 👇 Add this line pod 'PrimerSDK' # ...end
Then run pod install to install PrimerSDK on your workspace.
In case you encounter an error that the bundle needs signing on Xcode 14, add the following post-install script in your podfile.
post_install do |installer| installer.pods_project.targets.each do |target| if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" target.build_configurations.each do |config| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end endend
The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into Xcode. In order to add PrimerSDK with Swift Package Manager:
Select your project, and then navigate to Package Dependencies
Click on the + button at the bottom-left of the Packages section
At this step you should have a client token available - see Manage Client Sessions for more.Call the showUniversalCheckout(clientToken:) function (as shown below) to present Universal Checkout.
You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on primerDidCompleteCheckoutWithData(_:) configured in the previous step.
When the user interacts with the checkout and clicks to pay, the Universal Checkout:
Listen to the primerDidCompleteCheckoutWithData(_:) delegate functionThis function will notify you of a successful payment.
SWIFT
class MyViewController: UIViewController { // ... func primerDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) { // Primer checkout completed with data // Do something with the data, e.g. show the payment id }}
To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.Head to the Developers section of the Primer Dashboard to setup and test a webhook for PAYMENT.STATUS event.If you are not yet ready to receive webhooks, you can use https://webhook.site to test your implementation.
Any errors, cancelled payment interactions or failed payments will trigger the primerDidFailWithError(_:data:decisionHandler:) delegate function.
SWIFT
class MyViewController: UIViewController, PrimerDelegate { // ... func primerDidFailWithError(_ error: Error, data: PrimerCheckoutData?, decisionHandler: @escaping ((PrimerErrorDecision) -> Void)) { // 👇 Call the decision handler to show a failure message decisionHandler(.fail(withErrorMessage: message)) }}
Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through payment webhooks or the Payments API — before asking the user to pay again.
Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer Android SDK 2.35.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.
Add the Primer BOM and the SDK to your app module’s build.gradle.kts or build.gradle file, replacing <version> with the latest version from the Android SDK changelog. The BOM keeps the SDK and any Primer payment method libraries on the same version:
Some payment methods and features, such as Klarna and 3D Secure, need a separate Primer library. The integration guide for each one shows the library to add, and Version alignment explains how its version is set.
It is highly recommended adding the following settings to your app/build.gradle file:
Prepare the PrimerCheckoutListener that will handle the callbacks that happen during the lifecycle. Import the Primer SDK and set its listener as shown in the following example:
Kotlin
class CheckoutActivity : AppCompatActivity() { private val listener = object : PrimerCheckoutListener { // 👇 [Required] This function is called when the checkout has been completed override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) { // Show an order confirmation screen... // checkoutData contains the payment that has been created } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) configureCheckout() } private fun configureCheckout() { // 👇 Initialize the SDK with the default settings. Primer.instance.configure(settings = PrimerSettings(), listener = listener) }}
At this step you should have a client token available - see Manage Client Sessions for more.When the client token is retrieved, show Universal Checkout by calling showUniversalCheckout method:
Kotlin
class CheckoutActivity : AppCompatActivity() { // other code goes here private lateinit var viewModel: CheckoutViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setupViewModel() setupObservers() fetchClientToken() } private fun setupViewModel() { viewModel = ViewModelProvider(this).get(CheckoutViewModel::class.java) } private fun fetchClientToken() = viewModel.fetchClientToken() private fun setupObservers() { viewModel.clientToken.observe(this) { clientToken -> showUniversalCheckout(clientToken) } } private fun showUniversalCheckout(clientToken: String) { Primer.instance.showUniversalCheckout(this, clientToken) }}
You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on onCheckoutCompleted() configured in the previous step.
When the user interacts with the checkout and clicks to pay, the Universal Checkout:
Listen to onCheckoutCompleted callbackThis function will notify you of a successful payment
Kotlin
private val listener = object : PrimerCheckoutListener { override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) { // Show an order confirmation screen... // checkoutData contains the payment that has been created }}
To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.Head to the Developers section of the Primer Dashboard to setup and test a webhook for PAYMENT.STATUS event.If you are not yet ready to receive webhooks, you can use https://webhook.site to test your implementation.
Any errors, cancelled payment interactions or failed payments will trigger the onFailed callback
Kotlin
private val listener = object : PrimerCheckoutListener { override fun onFailed( error: PrimerError, checkoutData: PrimerCheckoutData?, errorHandler: PrimerErrorDecisionHandler? ) { // Notifies you that the checkout flow has failed and a payment could not be created // This callback can also be used to display an error state within your own UI. // Show a default error message errorHandler?.showErrorMessage(null) // Show a custom error message errorHandler?.showErrorMessage("This is my custom error message") }}
Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through payment webhooks or the Payments API — before asking the user to pay again.
Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer React Native SDK 2.35.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.
First, make an API call to your backend to fetch a client token. Here is a simple example of how it can be done from your component. Once successful store your client token for future use.
You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on primerDidCompleteCheckoutWithData(_:) configured in the previous step.
When the user interacts with the checkout and clicks to pay, the Universal Checkout:
To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.Head to the Developers section of the Primer Dashboard to setup and test a webhook for PAYMENT.STATUS event.If you are not yet ready to receive webhooks, you can use https://webhook.site to test your implementation.
Any errors, cancelled payment interactions or failed payments will trigger the onError callback
Typescript
const onError = ( error: PrimerError, checkoutData: PrimerCheckoutData | null, handler: PrimerErrorHandler | undefined,) => { // Notifies you that the checkout flow has failed and a payment could not be created // This callback can also be used to display an error state within your own UI. // ⚠️ `handler` is undefined if the SDK does not expect anything from you if (!handler) { return; } // ⚠️ If `handler` exists, you MUST call one of the functions of the handler // Show a default error message handler.showErrorMessage(); // Show a custom error message handler.showErrorMessage('This is my custom error message');
Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through payment webhooks or the Payments API — before asking the user to pay again.
{"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":""},"chroma":{"liveDeploymentHistoryId":"6aec97f0574963a2d11dbfed","collectionId":"d4772cf4-44a3-491c-bdf4-fcea1b1b0406","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec97f0574963a2d11dbfed"},"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.4076","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":"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":"checkout/drop-in/overview","slug":"/checkout/drop-in/overview","pageMetadata":{"title":"Drop-in Checkout: Get started","sidebarTitle":"Get started","description":null,"href":"/checkout/drop-in/overview"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,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`,br:`br`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Note,Tab,Table,Tabs,Warning,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`We’ve introduced a new way to integrate our Checkout for Web`,_jsx(_components.br,{}),`\n`,`Learn how to build a fully customizable checkout using modular components through `,_jsx(_components.a,{href:`/checkout/overview`,children:`our documentation here`})]})}),`\n`,_jsx(_components.p,{children:`The simplest way to integrate Universal Checkout is with our drop-in UI. With just a few lines of code, you can display a fully in-context checkout UI with all your payment methods.`}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:`Not all payment methods are currently compatible with Drop-in Checkout.`}),_jsxs(_components.p,{children:[`Please refer to `,_jsx(_components.a,{href:`/connections/payment-methods/available-payment-methods`,children:`this table`}),` to learn more about the payment methods available for Drop-in Checkout.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsx(_components.p,{children:`Before you start, make sure:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`you are ready to `,_jsx(_components.a,{href:`/get-started/connect-a-processor`,children:`process a payment`})]}),`\n`,_jsxs(_components.li,{children:[`Universal Checkout is properly `,_jsx(_components.a,{href:`/checkout/checkout-builder`,children:`configured in the dashboard`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-client-session`,children:`Create a client session`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`client session`}),` is the starting point for integrating payments at Primer. You can attach any data associated with the `,_jsx(_components.code,{children:`order`}),` to your client session.`]}),`\n`,_jsxs(_components.p,{children:[`Creating a client session provides you with a `,_jsx(_components.strong,{children:`client token`}),`, a temporary key used to initialize the Universal Checkout.`]}),`\n`,_jsx(_components.p,{children:`The information you include in the client session is used in the Dashboard:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`to conditionally route payments with Workflows`}),`\n`,_jsx(_components.li,{children:`to activate payment methods and other features in Universal Checkout`}),`\n`]}),`\n`,_jsx(_components.p,{children:`So pass as much information as you can!`}),`\n`,_jsx(Heading,{level:`3`,id:`generate-an-api-key`,children:`Generate an API key`}),`\n`,_jsxs(_components.p,{children:[`Requests to our API are authenticated using an API key in the `,_jsx(_components.code,{children:`X-Api-Key`}),` header. Create an API key by visiting the `,_jsx(_components.a,{href:`https://dashboard.primer.io/developers/apiKeys`,children:`developer page`}),` of the Primer Dashboard.`]}),`\n`,_jsx(_components.p,{children:`Make sure to set the following scopes for your API Key:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`client_tokens:write`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`transactions:authorize`})}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`make-a-client-session-request`,children:`Make a client session request`}),`\n`,_jsxs(_components.p,{children:[`On your server, create a client session with `,_jsx(_MdxComponentBoundary,{name:`ApiEndpoint`,children:_jsx(ApiEndpoint,{method:`POST`,path:`/client-session`})}),`\n.`]}),`\n`,_jsx(_components.p,{children:`Make sure to pass at least the following data:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Field`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.a,{href:`/api-reference/v2.4/api-reference/client-session-api/create-a-client-session#body-order-id`,children:`orderId`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Your reference for the payment. `,_jsx(`br`,{}),_jsx(`br`,{}),` `,_jsx(_components.em,{children:_jsx(_components.code,{children:`Make sure to keep track of orderId - you will later receive updates to the payment via Webhooks. The payment will contain the orderId specified in the client session.`})})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.a,{href:`/api-reference/v2.4/api-reference/client-session-api/create-a-client-session#body-currency-code`,children:`currencyCode`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`The three-letter currency code in `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/ISO_4217#Active_codes`,children:`ISO 4217 format`}),`. `,_jsx(`br`,{}),` e.g. use `,_jsx(_components.code,{children:`USD`}),` for US dollars.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.a,{href:`/api-reference/v2.4/api-reference/client-session-api/create-a-client-session#body-order-line-items`,children:`order.lineItems`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`The details of the line items of the order.`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The body of a successful response contains a `,_jsx(_components.a,{href:`/api-reference/v2.4/api-reference/client-session-api/create-a-client-session#response-client-token`,children:`clientToken`}),` that you will use to initialize the Universal Checkout.`]})}),`\n`,_jsx(_components.p,{children:`Here is how the client session request to the Primer API should look like:`}),`\n`,_jsx(CodeBlock,{filename:`BASH`,numberOfLines:`36`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`36`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --location`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.sandbox.primer.io/client-session'`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 'X-Api-Key: \u003cYOUR_API_KEY>'`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 'X-Api-Version: 2.4'`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#D7BA7D`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --data`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"orderId\": \"\u003cYOUR_ORDER_ID>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"currencyCode\": \"GBP\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"amount\": 5000,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"order\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"lineItems\": [{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"itemId\": \"shoes-123\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"amount\": 2500,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"quantity\": 2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` }],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"countryCode\": \"GB\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# Here is a (heavily truncated) example response`})}),`\n`,_jsx(_components.span,{className:`line`}),`\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:` \"clientToken\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"THE_CHECKOUT_SESSION_TOKEN\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"clientExpirationDate\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"2022-03-08T14:00:00Z\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"orderId\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"\u003cYOUR_ORDER_ID>\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"currencyCode\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"GBP\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 5000,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`\t\"order\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"lineItems\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},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:` \"itemId\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"shoes-123\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` 2500,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` \"quantity\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:` 2`})]}),`\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:` \"countryCode\"`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"GB\",`})]}),`\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`]})})}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Web`,id:`web`,\"data-child-heading-ids\":`[\"install-the-sdk\",\"with-npm\",\"with-our-cdn\",\"initialize-and-show-universal-checkout\",\"handle-successful-payments\",\"listen-to-callback\",\"handle-webhooks\",\"handle-redirects\",\"handle-failed-payments\"]`,children:[_jsx(Heading,{level:`2`,id:`install-the-sdk`,children:`Install the SDK`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Please review the `,_jsx(_components.a,{href:`/checkout/advanced/content-security-policy`,children:`Content Security Policy (CSP)`}),` recommendations before installing!`]})}),_jsx(Heading,{level:`3`,id:`with-npm`,children:`With npm`}),_jsxs(_components.p,{children:[`Our Web SDK is available on npm under the name `,_jsx(_components.a,{href:`https://www.npmjs.com/package/@primer-io/checkout-web`,children:_jsx(_components.code,{children:`@primer-io/checkout-web`})}),`.`]}),_jsx(_components.p,{children:`This package includes TypeScript definitions.`}),_jsx(CodeBlock,{filename:`BASH`,numberOfLines:`5`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# With yarn`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` add`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` @primer-io/checkout-web`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# With npm`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --save`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` @primer-io/checkout-web`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`5`,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:`5`,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/checkout-web\"`}),_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:`#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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` /* Options */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(Warning,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The npm package only works if used alongside a bundler such as Webpack or Parcel. If you’re directly writing JavaScript using `,_jsx(_components.code,{children:`script`}),` tag, please use our `,_jsx(_components.a,{href:`#with-our-cdn`,children:`CDN`}),` instead.`]}),`\n`,_jsxs(_components.li,{children:[`As of today, the npm package does not work in a server environment. If you are using Next.js, Gatsby, or a similar framework, make sure the `,_jsx(_components.code,{children:`Primer`}),` functions are called on the client side, or use our `,_jsx(_components.a,{href:`#with-our-cdn`,children:`CDN`}),` instead.`]}),`\n`]})}),_jsx(Heading,{level:`3`,id:`with-our-cdn`,children:`With our CDN`}),_jsxs(_components.p,{children:[`Include the `,_jsx(_components.code,{children:`Primer.min.js`}),` script and the `,_jsx(_components.code,{children:`Checkout.css`}),` stylesheet on the page where you want to render the Checkout. Make sure to pass the proper version in the URL.`]}),_jsx(CodeBlock,{filename:`HTML`,numberOfLines:`7`,language:`html`,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:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#808080`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`link`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` rel`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"stylesheet\"`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` href`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"https://sdk.primer.io/web/v2.66.1/Checkout.css\"`}),_jsx(_components.span,{style:{color:`#808080`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#808080`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`script`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"https://sdk.primer.io/web/v2.66.1/Primer.min.js\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` integrity`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"sha384-u7VslNrVZDblkrGkcrMwHyMHKAgu+ndoiwn0FWlAH9pmGkaMkclLGpdHN5wAzgnc\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` crossorigin`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"anonymous\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#808080`,\"--shiki-dark\":`#808080`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#808080`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`Primer.min.js`}),` will add the `,_jsx(_components.code,{children:`Primer`}),` object to the global scope:`]}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`5`,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:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_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:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`window`}),_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:`#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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` /* Options */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`initialize-and-show-universal-checkout`,children:`Initialize and Show Universal Checkout`}),_jsxs(_components.p,{children:[`Use the generated client token on the client-side to show Universal Checkout by calling `,_jsx(_components.code,{children:`Primer.showUniversalCheckout(clientToken, options)`}),`. Make sure to pass a selector to your container in the options.`]}),_jsx(CodeBlock,{filename:`Javascript`,numberOfLines:`21`,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:`21`,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:`, {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Specify the selector of the container element`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` container:`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` \"#checkout-container\"`}),_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:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` * When the checkout flow has been completed, you'll receive`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" * the successful payment via `onCheckoutComplete`.\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` * Implement this callback to redirect the user to an order confirmation page.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Checkout Complete!\"`}),_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:`#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:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` * When the checkout flow has been fail, you'll receive`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" * the error via `onCheckoutFail`\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutFail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_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:`handler`}),_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:` console`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Checkout Fail!\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_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:`#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:`When the user interacts with the checkout:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Update the client session`}),`\n`,_jsx(_components.li,{children:`Create a payment (by default)`}),`\n`]}),_jsx(Heading,{level:`2`,id:`handle-successful-payments`,children:`Handle successful payments`}),_jsx(Heading,{level:`3`,id:`listen-to-callback`,children:`Listen to callback`}),_jsxs(_components.p,{children:[`On the client-side, listen to the `,_jsx(_components.code,{children:`onCheckoutComplete`}),` callback to be notified when the payment has been successfully completed. Use it to show an order confirmation screen.`]}),_jsx(Heading,{level:`3`,id:`handle-webhooks`,children:`Handle webhooks`}),_jsx(_components.p,{children:`To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.`}),_jsxs(_components.p,{children:[`Head to the `,_jsx(_components.a,{href:`https://dashboard.primer.io/developers`,children:`Developers section`}),` of the Primer Dashboard to setup and test a webhook for `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` event.`]}),_jsxs(_components.p,{children:[`If you are not yet ready to receive webhooks, you can use `,_jsx(_components.a,{href:`https://webhook.site/`,children:`https://webhook.site`}),` to test your implementation.`]}),_jsx(Heading,{level:`3`,id:`handle-redirects`,children:`Handle redirects`}),_jsx(_components.p,{children:`Some payment methods require redirecting to another web page in order to capture payment details.`}),_jsx(_components.p,{children:`Drop-in checkout automatically renders that web page in a popup window in order to maintain the current context.`}),_jsxs(Note,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`If the browser cannot open popup windows, the current window will be redirected instead.`})}),_jsxs(_components.p,{children:[`To ensure maximum compatibility, read the guide on `,_jsx(_components.a,{href:`/sdk/web/v2.x.x/handle-redirects-and-deeplinks`,children:`how to handle redirects`}),`.`]})]}),_jsx(Heading,{level:`2`,id:`handle-failed-payments`,children:`Handle failed payments`}),_jsxs(_components.p,{children:[`Any errors, cancelled payment interactions or failed payments will trigger the `,_jsx(_components.code,{children:`onCheckoutFail`}),` callback with a `,_jsx(_components.a,{href:`/sdk/web/v2.x.x/common-objects/PrimerClientError`,children:`PrimerClientError`})]}),_jsx(CodeBlock,{filename:`Javascript`,numberOfLines:`17`,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:`17`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`onCheckoutFail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_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:`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:` // Notifies you that the checkout flow has failed and a payment could not be created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // This callback can also be used to display an error state within your own UI.`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" // ⚠️ `handler` is undefined if the SDK does not expect anything from you\"})}),`\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:`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:`#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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" // ⚠️ If `handler` exists, you MUST call one of the functions of the handler\"})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Show a default error message`})}),`\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:`showErrorMessage`}),_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:` // Show a custom error message`})}),`\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:`showErrorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'This is my custom error message'`}),_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(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/sdk/web/v2.x.x/common-objects/PrimerClientError#not-all-failures-are-retryable`,children:`Not all failures are retryable`}),`. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side before asking the user to pay again.`]})})]}),_jsxs(Tab,{title:`iOS`,id:`ios`,\"data-child-heading-ids\":`[\"install-the-sdk-2\",\"with-cocoapods\",\"with-swift-package-manager\",\"initialize-universal-checkout\",\"show-universal-checkout\",\"handle-successful-payments-2\",\"listen-to-delegate-function\",\"handle-webhooks-in-your-dashboard\",\"handle-failed-payments-2\"]`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer iOS SDK 2.34.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.`})}),_jsx(Heading,{level:`2`,id:`install-the-sdk-2`,children:`Install the SDK`}),_jsx(Heading,{level:`3`,id:`with-cocoapods`,children:`With CocoaPods`}),_jsxs(_components.p,{children:[`Add the following in your `,_jsx(_components.code,{children:`Podfile`}),`:`]}),_jsx(CodeBlock,{filename:`RUBY`,numberOfLines:`10`,language:`ruby`,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:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`use_frameworks!`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`target `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'MyApp'`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` do`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` # 👇 Add this line`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` pod `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'PrimerSDK'`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` # ...`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`end`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Then run `,_jsx(_components.code,{children:`pod install`}),` to install `,_jsx(_components.code,{children:`PrimerSDK`}),` on your workspace.`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:`In case you encounter an error that the bundle needs signing on Xcode 14, add the following post-install script in your podfile.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`ruby`,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:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`post_install `}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`do`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`installer`}),_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:` installer.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`pods_project`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`targets`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`each`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` do`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`target`}),_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:` target.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`respond_to?`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`:product_type`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) and target.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`product_type`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` == `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"com.apple.product-type.bundle\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` target.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`build_configurations`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`each`}),_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` do`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`config`}),_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:` config.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`build_settings`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'CODE_SIGNING_ALLOWED'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`] = `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'NO'`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` end`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` end`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` end`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:`end`})}),`\n`]})})})]}),_jsx(Heading,{level:`3`,id:`with-swift-package-manager`,children:`With Swift Package Manager`}),_jsx(_components.p,{children:`The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into Xcode. In order to add PrimerSDK with Swift Package Manager:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select your project, and then navigate to `,_jsx(_components.code,{children:`Package Dependencies`})]}),`\n`,_jsxs(_components.li,{children:[`Click on the `,_jsx(_components.strong,{children:`+`}),` button at the bottom-left of the `,_jsx(_components.code,{children:`Packages`}),` section`]}),`\n`,_jsxs(_components.li,{children:[`Paste `,_jsx(_components.a,{href:`https://github.com/primer-io/primer-sdk-ios.git`,children:`https://github.com/primer-io/primer-sdk-ios.git`}),` into the `,_jsx(_components.strong,{children:`Search Bar,`}),` or search for `,_jsx(_components.code,{children:`primer-sdk-ios`}),` in the `,_jsx(_components.strong,{children:`Search Bar`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Press `,_jsx(_components.strong,{children:`Add Package`})]}),`\n`,_jsx(_components.li,{children:`Let Xcode download the package and set everything up`}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`For more details about SDK versions, please see our `,_jsx(_components.a,{href:`/changelogs/android-sdk`,children:`changelog`}),`.`]})}),_jsx(Heading,{level:`2`,id:`initialize-universal-checkout`,children:`Initialize Universal Checkout`}),_jsxs(_components.p,{children:[`Import the `,_jsx(_components.code,{children:`PrimerSDK`}),` and set its delegate as shown in the following example:`]}),_jsx(CodeBlock,{filename:`SWIFT`,numberOfLines:`16`,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:`16`,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:`, `}),_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:` 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`}),`\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:` 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:`: PrimerCheckoutData) {`})]}),`\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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // do something...`})}),`\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(Note,{children:_jsxs(_components.p,{children:[`See all the configurations in the `,_jsx(_components.a,{href:`/sdk/ios/v2.x.x/installation`,children:`SDK Reference`}),`.`]})}),_jsx(Heading,{level:`2`,id:`show-universal-checkout`,children:`Show Universal Checkout`}),_jsxs(_components.p,{children:[`At this step you should have a client token available - see `,_jsx(_components.a,{href:`/checkout/client-session`,children:`Manage Client Sessions`}),` for more.`]}),_jsxs(_components.p,{children:[`Call the `,_jsx(_components.code,{children:`showUniversalCheckout(clientToken:)`}),` function (as shown below) to present Universal Checkout.`]}),_jsx(CodeBlock,{filename:`SWIFT`,numberOfLines:`6`,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:`6`,children:[_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:`, `}),_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:` 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(Note,{children:_jsxs(_components.p,{children:[`You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on `,_jsx(_components.code,{children:`primerDidCompleteCheckoutWithData(_:)`}),` configured in the previous step.`]})}),_jsx(_components.p,{children:`When the user interacts with the checkout and clicks to pay, the Universal Checkout:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Shows the payment method screen if applicable`}),`\n`,_jsx(_components.li,{children:`Tokenizes the payment method for payment`}),`\n`,_jsx(_components.li,{children:`Creates the payment`}),`\n`,_jsx(_components.li,{children:`Handles any other interactions (e.g. 3DS)`}),`\n`]}),_jsx(Heading,{level:`2`,id:`handle-successful-payments-2`,children:`Handle successful payments`}),_jsx(Heading,{level:`3`,id:`listen-to-delegate-function`,children:`Listen to delegate function`}),_jsxs(_components.p,{children:[`Listen to the `,_jsx(_components.code,{children:`primerDidCompleteCheckoutWithData(_:)`}),` delegate function`]}),_jsx(_components.p,{children:`This function will notify you of a successful payment.`}),_jsx(CodeBlock,{filename:`SWIFT`,numberOfLines:`9`,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:`9`,children:[_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`\t\t// ...`})}),`\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:` 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:`: PrimerCheckoutData) {`})]}),`\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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Do something with the data, e.g. show the payment id`})}),`\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(Heading,{level:`3`,id:`handle-webhooks-in-your-dashboard`,children:`Handle webhooks in your dashboard`}),_jsx(_components.p,{children:`To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.`}),_jsxs(_components.p,{children:[`Head to the `,_jsx(_components.a,{href:`https://dashboard.primer.io/developers`,children:`Developers section`}),` of the Primer Dashboard to setup and test a webhook for `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` event.`]}),_jsxs(_components.p,{children:[`If you are not yet ready to receive webhooks, you can use `,_jsx(_components.a,{href:`https://webhook.site/`,children:`https://webhook.site`}),` to test your implementation.`]}),_jsx(Heading,{level:`2`,id:`handle-failed-payments-2`,children:`Handle failed payments`}),_jsxs(_components.p,{children:[`Any errors, cancelled payment interactions or failed payments will trigger the `,_jsx(_components.code,{children:`primerDidFailWithError(_:data:decisionHandler:)`}),` delegate function.`]}),_jsx(CodeBlock,{filename:`SWIFT`,numberOfLines:`9`,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:`9`,children:[_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:`, `}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`\t\t// ...`})}),`\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:` primerDidFailWithError`}),_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:` error`}),_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:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`data`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: PrimerCheckoutData?, `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`decisionHandler`}),_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:` ((PrimerErrorDecision) -> `}),_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:` // 👇 Call the decision handler to show a failure message`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` decisionHandler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`fail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`withErrorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: 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(Warning,{children:_jsxs(_components.p,{children:[`Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through `,_jsx(_components.a,{href:`/get-started/payment-updates`,children:`payment webhooks`}),` or the Payments API — before asking the user to pay again.`]})})]}),_jsxs(Tab,{title:`Android`,id:`android`,\"data-child-heading-ids\":`[\"install-the-sdk-3\",\"initialize-universal-checkout-2\",\"show-universal-checkout-2\",\"handle-successful-payments-3\",\"listen-to-callback-2\",\"handle-webhooks-in-your-dashboard-2\",\"handle-failed-payments-3\"]`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer Android SDK 2.35.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.`})}),_jsx(Heading,{level:`2`,id:`install-the-sdk-3`,children:`Install the SDK`}),_jsxs(_components.p,{children:[`Add the Primer BOM and the SDK to your app module’s `,_jsx(_components.code,{children:`build.gradle.kts`}),` or `,_jsx(_components.code,{children:`build.gradle`}),` file, replacing `,_jsx(_components.code,{children:`\u003cversion>`}),` with the latest version from the `,_jsx(_components.a,{href:`/changelogs/android-sdk`,children:`Android SDK changelog`}),`. The BOM keeps the SDK and any Primer payment method libraries on the same version:`]}),_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`8`,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:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`repositories`}),_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:` mavenCentral`}),_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:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`dependencies`}),_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:` implementation`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`platform`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"io.primer:bom:\u003cversion>\"`}),_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:` implementation`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"io.primer:android\"`}),_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(CodeBlock,{filename:`Groovy`,numberOfLines:`8`,language:`groovy`,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:`groovy`,children:_jsxs(_components.code,{language:`groovy`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`repositories {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` mavenCentral()`})}),`\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:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`dependencies {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` implementation platform(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'io.primer:bom:\u003cversion>'`}),_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:` implementation `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'io.primer:android'`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Some payment methods and features, such as Klarna and 3D Secure, need a separate Primer library. The integration guide for each one shows the library to add, and `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/installation#version-alignment`,children:`Version alignment`}),` explains how its version is set.`]})}),_jsxs(_components.p,{children:[`It is highly recommended adding the following settings to your `,_jsx(_components.code,{children:`app/build.gradle`}),` file:`]}),_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`5`,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:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`android`}),_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:` kotlinOptions`}),_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:` freeCompilerArgs += `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'-Xjvm-default=all'`})]}),`\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(Heading,{level:`2`,id:`initialize-universal-checkout-2`,children:`Initialize Universal Checkout`}),_jsxs(_components.p,{children:[`Prepare the `,_jsx(_components.code,{children:`PrimerCheckoutListener`}),` that will handle the callbacks that happen during the lifecycle. Import the Primer SDK and set its listener as shown in the following example:`]}),_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`23`,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:`23`,children:[_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:` CheckoutActivity`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` : `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`AppCompatActivity`}),_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:` 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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // 👇 [Required] This function is called when the checkout has been completed`})}),`\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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // checkoutData contains the payment that has been created`})}),`\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:` override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCreate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(savedInstanceState: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`Bundle`}),_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:`onCreate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(savedInstanceState)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setContentView`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(R.layout.activity_main)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` configureCheckout`}),_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:` private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` configureCheckout`}),_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.instance.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`configure`}),_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:`(), listener = listener)`})]}),`\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(Note,{children:_jsxs(_components.p,{children:[`See all the configurations in the `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings`,children:`SDK Reference`}),`.`]})}),_jsx(Heading,{level:`2`,id:`show-universal-checkout-2`,children:`Show Universal Checkout`}),_jsxs(_components.p,{children:[`At this step you should have a client token available - see `,_jsx(_components.a,{href:`/checkout/client-session`,children:`Manage Client Sessions`}),` for more.`]}),_jsxs(_components.p,{children:[`When the client token is retrieved, show Universal Checkout by calling `,_jsx(_components.code,{children:`showUniversalCheckout`}),` method:`]}),_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`30`,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:`30`,children:[_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:` CheckoutActivity`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` : `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`AppCompatActivity`}),_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 code goes here`})}),`\n`,_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:` lateinit`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` var`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` viewModel: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`CheckoutViewModel`})]}),`\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:` onCreate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(savedInstanceState: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`Bundle`}),_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:`onCreate`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(savedInstanceState)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setContentView`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(R.layout.activity_main)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setupViewModel`}),_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:` setupObservers`}),_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:` fetchClientToken`}),_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:` private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setupViewModel`}),_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:` viewModel = `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`ViewModelProvider`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`this`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(CheckoutViewModel::`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`class`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`.java)`})]}),`\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:` private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` fetchClientToken`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() = viewModel.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`fetchClientToken`}),_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:` private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` setupObservers`}),_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:` viewModel.clientToken.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`observe`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`this`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) { clientToken `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`->`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` showUniversalCheckout`}),_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`}),`\n`,_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:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` showUniversalCheckout`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(clientToken: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_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.instance.`}),_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:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`this`}),_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(Note,{children:_jsxs(_components.p,{children:[`You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on `,_jsx(_components.code,{children:`onCheckoutCompleted()`}),` configured in the previous step.`]})}),_jsx(_components.p,{children:`When the user interacts with the checkout and clicks to pay, the Universal Checkout:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Shows the payment method screen if applicable`}),`\n`,_jsx(_components.li,{children:`Tokenizes the payment method for payment`}),`\n`,_jsx(_components.li,{children:`Creates the payment`}),`\n`,_jsx(_components.li,{children:`Handles any other interactions (e.g. 3DS)`}),`\n`]}),_jsx(Heading,{level:`2`,id:`handle-successful-payments-3`,children:`Handle successful payments`}),_jsx(Heading,{level:`3`,id:`listen-to-callback-2`,children:`Listen to callback`}),_jsxs(_components.p,{children:[`Listen to `,_jsx(_components.code,{children:`onCheckoutCompleted`}),` callback`]}),_jsx(_components.p,{children:`This function will notify you of a successful payment`}),_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`7`,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:`7`,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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // checkoutData contains the payment that has been created`})}),`\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(Heading,{level:`3`,id:`handle-webhooks-in-your-dashboard-2`,children:`Handle webhooks in your dashboard`}),_jsx(_components.p,{children:`To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.`}),_jsxs(_components.p,{children:[`Head to the `,_jsx(_components.a,{href:`https://dashboard.primer.io/developers`,children:`Developers section`}),` of the Primer Dashboard to setup and test a webhook for `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` event.`]}),_jsxs(_components.p,{children:[`If you are not yet ready to receive webhooks, you can use `,_jsx(_components.a,{href:`https://webhook.site/`,children:`https://webhook.site`}),` to test your implementation.`]}),_jsx(Heading,{level:`2`,id:`handle-failed-payments-3`,children:`Handle failed payments`}),_jsxs(_components.p,{children:[`Any errors, cancelled payment interactions or failed payments will trigger the `,_jsx(_components.code,{children:`onFailed`}),` callback`]}),_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`17`,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:`17`,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:` onFailed`}),_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:` error: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerError`}),_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:` checkoutData: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerCheckoutData`}),_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:` errorHandler: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerErrorDecisionHandler`}),_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:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Notifies you that the checkout flow has failed and a payment could not be created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // This callback can also be used to display an error state within your own UI.`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Show a default error message`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` errorHandler?.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showErrorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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:` // Show a custom error message`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` errorHandler?.`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`showErrorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"This is my custom error message\"`}),_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(Warning,{children:_jsxs(_components.p,{children:[`Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through `,_jsx(_components.a,{href:`/get-started/payment-updates`,children:`payment webhooks`}),` or the Payments API — before asking the user to pay again.`]})})]}),_jsxs(Tab,{title:`React Native`,id:`react-native`,\"data-child-heading-ids\":`[\"install-the-sdk-4\",\"initialize-universal-checkout-3\",\"show-universal-checkout-3\",\"handle-successful-payments-4\",\"listen-to-callback-3\",\"handle-webhooks-in-your-dashboard-3\",\"handle-failed-payments-4\"]`,children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`This SDK requires React Native `,_jsx(_components.a,{href:`https://reactnative.dev/versions`,children:`v0.63`}),` or higher.`]})}),_jsx(Note,{children:_jsx(_components.p,{children:`Backend API V2.4 enhances reliability and minimizes synchronization issues with external processors by significantly extending payment timeouts. This longer timeout accommodates external processor limits and internal operations, ensuring more reliable transaction handling. These improvements are fully supported starting with Primer React Native SDK 2.35.0, so upgrading your app to use the newest SDK version is highly recommended when creating client sessions with API V2.4.`})}),_jsx(Heading,{level:`2`,id:`install-the-sdk-4`,children:`Install the SDK`}),_jsx(_components.p,{children:`Add the SDK package`}),_jsx(CodeBlock,{filename:`BASH`,numberOfLines:`5`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# With yarn`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` add`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` @primer-io/react-native`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:`# With npm`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` i`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` @primer-io/react-native`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` --save`})]}),`\n`]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Requirement for iOS`})}),_jsxs(_components.p,{children:[`Once you are done, navigate to the `,_jsx(_components.code,{children:`/ios`}),` folder and run `,_jsx(_components.code,{children:`pod install`}),`.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`For more details about SDK versions, please see our `,_jsx(_components.a,{href:`/sdk/react-native/v2.x.x/installation`,children:`changelog`}),`.`]})}),_jsx(Heading,{level:`2`,id:`initialize-universal-checkout-3`,children:`Initialize Universal Checkout`}),_jsxs(_components.p,{children:[`Import the Primer SDK, construct your settings and call the SDK’s `,_jsx(_components.code,{children:`configure`}),` function.`]}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`24`,language:`tsx`,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:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`24`,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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` PrimerCheckoutData`}),_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:`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`,_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:` // Perform an action based on the payment creation response`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // ex. show success screen, redirect to order confirmation view, etc.`})}),`\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:` 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:`#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:`#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`,_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`]})})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`See all the configurations in the `,_jsx(_components.a,{href:`/sdk/react-native/v2.x.x/installation`,children:`SDK Reference`}),`.`]})}),_jsx(Heading,{level:`2`,id:`show-universal-checkout-3`,children:`Show Universal Checkout`}),_jsx(_components.p,{children:`First, make an API call to your backend to fetch a client token. Here is a simple example of how it can be done from your component. Once successful store your client token for future use.`}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`13`,language:`tsx`,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:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`13`,children:[_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`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // ...`})}),`\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:`();`})]}),`\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:[`See `,_jsx(_components.a,{href:`/checkout/client-session`,children:`Manage Client Sessions`}),` for more.`]}),_jsxs(_components.p,{children:[`Now, call the `,_jsx(_components.code,{children:`showUniversalCheckout(clientToken)`}),` function, with the client token to present Universal Checkout.`]}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`17`,language:`tsx`,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:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`17`,children:[_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`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // ...`})}),`\n`,_jsx(_components.span,{className:`line`}),`\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`,_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:`();`})]}),`\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`,_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`]})})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`You should now be able to see Universal Checkout! The user can now interact with Universal Checkout, and the SDK will create the payment. The payment’s data will be returned on `,_jsx(_components.code,{children:`primerDidCompleteCheckoutWithData(_:)`}),` configured in the previous step.`]})}),_jsx(_components.p,{children:`When the user interacts with the checkout and clicks to pay, the Universal Checkout:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Shows the payment method screen if applicable`}),`\n`,_jsx(_components.li,{children:`Tokenizes the payment method for payment`}),`\n`,_jsx(_components.li,{children:`Creates the payment`}),`\n`,_jsx(_components.li,{children:`Handles any other interactions (e.g. 3DS)`}),`\n`]}),_jsx(Heading,{level:`2`,id:`handle-successful-payments-4`,children:`Handle successful payments`}),_jsx(Heading,{level:`3`,id:`listen-to-callback-3`,children:`Listen to callback`}),_jsx(_components.p,{children:`This function will notify you of a successful payment`}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`3`,language:`tsx`,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:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`3`,children:[_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(Heading,{level:`3`,id:`handle-webhooks-in-your-dashboard-3`,children:`Handle webhooks in your dashboard`}),_jsx(_components.p,{children:`To receive updates about the status of your payments you’ll need to listen to webhooks. This is particularly useful for updating an order or any other data stored server-side.`}),_jsxs(_components.p,{children:[`Head to the `,_jsx(_components.a,{href:`https://dashboard.primer.io/developers`,children:`Developers section`}),` of the Primer Dashboard to setup and test a webhook for `,_jsx(_components.code,{children:`PAYMENT.STATUS`}),` event.`]}),_jsxs(_components.p,{children:[`If you are not yet ready to receive webhooks, you can use `,_jsx(_components.a,{href:`https://webhook.site/`,children:`https://webhook.site`}),` to test your implementation.`]}),_jsx(Heading,{level:`2`,id:`handle-failed-payments-4`,children:`Handle failed payments`}),_jsxs(_components.p,{children:[`Any errors, cancelled payment interactions or failed payments will trigger the `,_jsx(_components.code,{children:`onError`}),` callback`]}),_jsx(CodeBlock,{filename:`Typescript`,numberOfLines:`20`,language:`tsx`,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:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`20`,children:[_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:` onError`}),_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:`\terror`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerError`}),_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:`\tcheckoutData`}),_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:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`null`}),_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:`\thandler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`PrimerErrorHandler`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`undefined`}),_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:`#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:` // Notifies you that the checkout flow has failed and a payment could not be created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // This callback can also be used to display an error state within your own UI.`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" // ⚠️ `handler` is undefined if the SDK does not expect anything from you\"})}),`\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:`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:`#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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:\" // ⚠️ If `handler` exists, you MUST call one of the functions of the handler\"})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Show a default error message`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_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:`showErrorMessage`}),_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:` // Show a custom error message`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_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:`showErrorMessage`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'This is my custom error message'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Not all failures are retryable. A client-side error doesn’t always mean the payment failed, and decline reasons are intentionally generic. Verify the payment status server-side — through `,_jsx(_components.a,{href:`/get-started/payment-updates`,children:`payment webhooks`}),` or the Payments API — before asking the user to pay again.`]})})]})]})]})}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":"Drop-in Checkout: Get started","sidebarTitle":"Get started","description":null,"href":"/checkout/drop-in/overview"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[147,3142,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Create a client session","slug":"create-a-client-session","depth":2,"children":[{"title":"Generate an API key","slug":"generate-an-api-key","depth":3,"children":[]},{"title":"Make a client session request","slug":"make-a-client-session-request","depth":3,"children":[]}]},{"title":"Install the SDK","slug":"install-the-sdk","depth":2,"children":[{"title":"With npm","slug":"with-npm","depth":3,"children":[],"tabId":"web"},{"title":"With our CDN","slug":"with-our-cdn","depth":3,"children":[],"tabId":"web"}],"tabId":"web"},{"title":"Initialize and Show Universal Checkout","slug":"initialize-and-show-universal-checkout","depth":2,"children":[],"tabId":"web"},{"title":"Handle successful payments","slug":"handle-successful-payments","depth":2,"children":[{"title":"Listen to callback","slug":"listen-to-callback","depth":3,"children":[],"tabId":"web"},{"title":"Handle webhooks","slug":"handle-webhooks","depth":3,"children":[],"tabId":"web"},{"title":"Handle redirects","slug":"handle-redirects","depth":3,"children":[],"tabId":"web"}],"tabId":"web"},{"title":"Handle failed payments","slug":"handle-failed-payments","depth":2,"children":[],"tabId":"web"},{"title":"Install the SDK","slug":"install-the-sdk-2","depth":2,"children":[{"title":"With CocoaPods","slug":"with-cocoapods","depth":3,"children":[],"tabId":"ios"},{"title":"With Swift Package Manager","slug":"with-swift-package-manager","depth":3,"children":[],"tabId":"ios"}],"tabId":"ios"},{"title":"Initialize Universal Checkout","slug":"initialize-universal-checkout","depth":2,"children":[],"tabId":"ios"},{"title":"Show Universal Checkout","slug":"show-universal-checkout","depth":2,"children":[],"tabId":"ios"},{"title":"Handle successful payments","slug":"handle-successful-payments-2","depth":2,"children":[{"title":"Listen to delegate function","slug":"listen-to-delegate-function","depth":3,"children":[],"tabId":"ios"},{"title":"Handle webhooks in your dashboard","slug":"handle-webhooks-in-your-dashboard","depth":3,"children":[],"tabId":"ios"}],"tabId":"ios"},{"title":"Handle failed payments","slug":"handle-failed-payments-2","depth":2,"children":[],"tabId":"ios"},{"title":"Install the SDK","slug":"install-the-sdk-3","depth":2,"children":[],"tabId":"android"},{"title":"Initialize Universal Checkout","slug":"initialize-universal-checkout-2","depth":2,"children":[],"tabId":"android"},{"title":"Show Universal Checkout","slug":"show-universal-checkout-2","depth":2,"children":[],"tabId":"android"},{"title":"Handle successful payments","slug":"handle-successful-payments-3","depth":2,"children":[{"title":"Listen to callback","slug":"listen-to-callback-2","depth":3,"children":[],"tabId":"android"},{"title":"Handle webhooks in your dashboard","slug":"handle-webhooks-in-your-dashboard-2","depth":3,"children":[],"tabId":"android"}],"tabId":"android"},{"title":"Handle failed payments","slug":"handle-failed-payments-3","depth":2,"children":[],"tabId":"android"},{"title":"Install the SDK","slug":"install-the-sdk-4","depth":2,"children":[],"tabId":"react-native"},{"title":"Initialize Universal Checkout","slug":"initialize-universal-checkout-3","depth":2,"children":[],"tabId":"react-native"},{"title":"Show Universal Checkout","slug":"show-universal-checkout-3","depth":2,"children":[],"tabId":"react-native"},{"title":"Handle successful payments","slug":"handle-successful-payments-4","depth":2,"children":[{"title":"Listen to callback","slug":"listen-to-callback-3","depth":3,"children":[],"tabId":"react-native"},{"title":"Handle webhooks in your dashboard","slug":"handle-webhooks-in-your-dashboard-3","depth":3,"children":[],"tabId":"react-native"}],"tabId":"react-native"},{"title":"Handle failed payments","slug":"handle-failed-payments-4","depth":2,"children":[],"tabId":"react-native"}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/primer-cc826789/f9b3e76a02542eba/js/codeblocklayout.js"],"subdomain":"primer-cc826789","siteName":"Primer","title":"Drop-in Checkout: Get started - Primer","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T15:07:00.646Z","originalFileLocation":"checkout/drop-in/overview.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=\"Drop-in Checkout: Get started - Primer\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Primer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://primer.io/docs/checkout/drop-in/overview\">\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=Drop-in+checkout\u0026amp;title=Drop-in+Checkout%3A+Get+started\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=18a2af91118495f5e0af61a06675076fb7c559c2f14049d92b85289f3a893b88\">\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=\"Drop-in Checkout: Get started - Primer\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://primer-cc826789.mintlify.site/docs/_mintlify/api/og/v2?division=Drop-in+checkout\u0026amp;title=Drop-in+Checkout%3A+Get+started\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=18a2af91118495f5e0af61a06675076fb7c559c2f14049d92b85289f3a893b88\">\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/checkout/drop-in/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/checkout/drop-in/overview.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://primer.io/#organization\",\"name\":\"Primer\",\"url\":\"https://primer.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366\"}},{\"@type\":\"WebSite\",\"@id\":\"https://primer.io/docs#website\",\"name\":\"Primer\",\"url\":\"https://primer.io/docs\",\"publisher\":{\"@id\":\"https://primer.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://primer.io/docs/checkout/drop-in/overview#webpage\",\"url\":\"https://primer.io/docs/checkout/drop-in/overview\",\"name\":\"Drop-in Checkout: Get started\",\"dateModified\":\"2026-11-06T15:07:00.646Z\",\"isPartOf\":{\"@id\":\"https://primer.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://primer.io/docs/checkout/drop-in/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://primer.io/docs/checkout/drop-in/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Checkout\",\"item\":\"https://primer.io/docs/checkout/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Drop-in Checkout: Get started\",\"item\":\"https://primer.io/docs/checkout/drop-in/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://primer.io/docs/checkout/drop-in/overview#article\",\"headline\":\"Drop-in Checkout: Get started\",\"name\":\"Drop-in Checkout: Get started\",\"url\":\"https://primer.io/docs/checkout/drop-in/overview\",\"mainEntityOfPage\":{\"@id\":\"https://primer.io/docs/checkout/drop-in/overview#webpage\"},\"dateModified\":\"2026-11-06T15:07:00.646Z\",\"publisher\":{\"@id\":\"https://primer.io/#organization\"},\"isPartOf\":{\"@id\":\"https://primer.io/docs#website\"}}]}\u003c/script>\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","href":"/home"}]},{"tab":"Documentation","anchors":[{"anchor":"Get started","icon":"book-open","pages":[{"title":"Get started","href":"/get-started/overview"}]},{"anchor":"Primer concepts","icon":"brain","pages":[{"title":"Primer concepts","href":"/concepts/overview"}]},{"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","description":"Definitions of key terms used throughout the Primer Checkout documentation.","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","description":null,"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":[{"title":"Workflows","href":"/workflows/overview"}]},{"anchor":"Manage payments","icon":"money-bills","pages":[{"title":"Manage payments","href":"/manage-payments/overview"}]},{"anchor":"Payment services","icon":"credit-card","pages":[{"title":"Payment services","href":"/payment-services/overview"}]},{"anchor":"Primer Vault","icon":"vault","pages":[{"title":"Primer Vault","href":"/vault/overview"}]},{"anchor":"Subscriptions","icon":"rotate","pages":[{"title":"Subscriptions","href":"/subscriptions/overview"}]},{"anchor":"Observability","icon":"chart-simple","pages":[{"title":"Observability","href":"/observability/overview"}]},{"anchor":"Monitors","icon":"wave-pulse","pages":[{"title":"Monitors","href":"/monitors/overview"}]},{"anchor":"Reconciliation","icon":"file-lines","pages":[{"title":"Reconciliation","href":"/reconciliation/overview"}]},{"anchor":"Disputes","icon":"triangle-exclamation","pages":[{"title":"Disputes","href":"/disputes/overview"}]},{"anchor":"Testing","icon":"vial-circle-check","pages":[{"title":"Testing","href":"/testing/overview"}]}]},{"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","pages":[{"title":"Connections","href":"/connections/processors/overview"}]},{"tab":"Changelogs","pages":[{"title":"Changelogs","href":"/changelogs/api-changelog"}]}]},"basePath":"","title":"Drop-in Checkout: Get started - Primer","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":[],"chunks":[]}