# Home

<h2 align="center">Welcome to the Xplor Pay Documentation Center</h2>

<h4 align="center"><em>Build powerful, seamless integrations with confidence.</em></h4>

<p align="center">Access product overviews, SDKs, API references, and support resources—everything you need to innovate faster and deliver exceptional partner experiences.</p>

***

### Key Docs

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-rocket-launch" style="color:$primary;">:rocket-launch:</i></td><td><strong>Getting Started</strong></td><td>Discover our products and devices, learn how our integration process works, and explore the safeguards that protect your business.</td><td><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/EZvmIacz8GSBfV1JWcIt">Learn more</a></td><td></td><td></td></tr><tr><td><i class="fa-square-code" style="color:$primary;">:square-code:</i></td><td><strong>SDKs</strong></td><td>Access SDKs to streamline how you integrate our products into your development flow.</td><td><a href="/spaces/yN9CLsR8tlS8G8avRMB5">Learn more</a></td><td></td><td></td></tr><tr><td><i class="fa-gear-complex-code" style="color:$primary;">:gear-complex-code:</i></td><td><strong>API References</strong></td><td>Explore our APIs to integrate seamlessly with your platform.</td><td><a href="/spaces/j9heLdoDRsfnChUQohvj/pages/YSCthrOPIC6CmPnMFOPh">Learn more</a></td><td></td><td></td></tr></tbody></table>

### Supporting Docs

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-handshake-angle" style="color:$primary;">:handshake-angle:</i></td><td><strong>Partner Portal</strong></td><td>Partner-facing portal workflows and navigation.</td><td><a href="/spaces/Us4U42giioY3jQj0TJQl/pages/blYV6paKjtTx3THWfHMQ">Learn more</a></td><td></td><td></td></tr><tr><td><i class="fa-store-lock" style="color:$primary;">:store-lock:</i></td><td><strong>Merchant Portal</strong></td><td>Merchant-facing portal workflows and navigation.</td><td><a href="/spaces/WNkAy7CO9ci3kcil9jOX/pages/PzL6KkR8ZkrZqT4ICLHV">Learn more</a></td><td></td><td></td></tr><tr><td><i class="fa-key" style="color:$primary;">:key:</i></td><td><strong>Token Portal</strong></td><td>Token migration workflows and guidance.</td><td><a href="/spaces/UkPcVWWbpoXLYF0bSQLH/pages/W8igN9yx8lEFdMqhOdmk">Learn more</a></td><td></td><td></td></tr></tbody></table>

### Quick Docs

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-play" style="color:$primary;">:play:</i></td><td><strong>Quick Starts</strong></td><td>Start fast with focused guides for common integration flows.</td><td><a href="/spaces/CCotSN7FHQ042kcnAcoe">Learn more</a></td><td></td><td></td></tr></tbody></table>


# Our Products

Explore our suite of products designed to meet diverse business needs, from seamless onboarding to powerful payment processing solutions.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><i class="fa-briefcase">:briefcase:</i></td><td><strong>Onboard Merchants</strong></td><td>Collect details, run checks, submit applications.</td><td><p></p><p><a href="/pages/XRvquKk8dxJW69D60MdL">Learn more</a></p></td></tr><tr><td><i class="fa-cash-register">:cash-register:</i></td><td><strong>Accept Payments</strong></td><td>Card-present, card-not-present, recurring, and ACH.</td><td><a href="/pages/uXN8e3tjqynFBCxy1lgw">Learn more</a></td></tr><tr><td><i class="fa-coins">:coins:</i></td><td><strong>Manage Finance &#x26; Resolve Disputes</strong></td><td>Keep margins clear and reduce chargeback impact.</td><td><a href="/pages/a37f24cdd722ce62c3484be8e683e012732412ae">Learn more</a></td></tr><tr><td><i class="fa-file-chart-column">:file-chart-column:</i></td><td><strong>Report &#x26; Reconcile</strong></td><td>Track transactions, funding, and operational performance.</td><td><a href="/pages/OCn9URlZZ2dD3k7p2rY7">Learn more</a></td></tr><tr><td><i class="fa-display-chart-up">:display-chart-up:</i></td><td><strong>Operate With Portals</strong></td><td>Give partners and merchants self-serve tools.</td><td><p></p><p><a href="/pages/EjWjmNqnKZDFFPjGLLYs">Learn more</a></p></td></tr></tbody></table>

<details>

<summary>Expand for a complete flat list of product overview links</summary>

* [Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding)
  * [Hosted Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding/hosted-merchant-onboarding)
  * [Merchant Onboarding via API](/getting-started/getting-started/our-products/merchant-onboarding/merchant-onboarding-via-api)
  * [Merchant Onboarding via Partner Portal](/getting-started/getting-started/our-products/merchant-onboarding/merchant-onboarding-via-partner-portal)
* [Payment Processing](/getting-started/getting-started/our-products/payment-processing)
  * [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk)
  * [Cloud EMV](/getting-started/getting-started/our-products/payment-processing/cloud-emv)
  * [Recurring Payments](/getting-started/getting-started/our-products/payment-processing/recurring-payments)
  * [JavaScript SDK](/getting-started/getting-started/our-products/payment-processing/javascript-sdk)
  * [ACH Transactions](/getting-started/getting-started/our-products/payment-processing/ach-transactions)
  * [Paylink](/getting-started/getting-started/our-products/payment-processing/paylink)
* [Financial Management](/getting-started/getting-started/our-products/financial-management)
  * [Merchant Pricing](/getting-started/getting-started/our-products/financial-management/merchant-pricing)
  * [Merchant Billing & Funding](/getting-started/getting-started/our-products/financial-management/merchant-billing-and-funding)
  * [Financial Reporting](/getting-started/getting-started/our-products/financial-management/financial-reporting)
  * [Disputes Management](/getting-started/getting-started/our-products/financial-management/disputes-management)
* [Reporting Solutions](/getting-started/getting-started/our-products/reporting-solutions)
  * [Reporting](/getting-started/getting-started/our-products/reporting-solutions/reporting)
* [Partner & Merchant Solutions](/getting-started/getting-started/our-products/partner-and-merchant-solutions)
  * [Partner Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/partner-portal)
  * [Merchant Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/merchant-portal)

</details>

{% hint style="success" %}
**Need help?**

If you’re unsure where to start, get in touch. We’ll help you choose the right integration path.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Merchant Onboarding

Merchant onboarding registers and verifies a business so it can accept payments. Pick the flow based on how much UX control and engineering time you want.

### Pick an Onboarding Flow

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Hosted Merchant Onboarding</strong></td><td>Fastest launch. Hosted, configurable, and white-labelled.</td><td><a href="/pages/8abc482e1d83d64111cc30e7349759d9786cf092">Learn more</a></td></tr><tr><td><strong>Merchant Onboarding via Partner Portal</strong></td><td>No build. Submit applications in a portal workflow.</td><td><a href="/pages/650ae64cb8e85074d9129658270148523b9bc58f">Learn more</a></td></tr><tr><td><strong>Merchant Onboarding via API</strong></td><td>Most control. Embed onboarding into your product.</td><td><a href="/pages/7b2477bf62e612ddc7447d0c4489afa948fe4f52">Learn more</a></td></tr></tbody></table>

{% hint style="info" %}
Rule of thumb:

* Need the quickest go-live: use **Hosted**.
* Need zero engineering: use **Partner Portal**.
* Need full UX + data flow control: use **APIs**.
  {% endhint %}

### Comparison matrix

| Criteria               | [Hosted Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding/hosted-merchant-onboarding) | [Merchant Onboarding via Partner Portal](/getting-started/getting-started/our-products/merchant-onboarding/merchant-onboarding-via-partner-portal) | [Merchant Onboarding via API](/getting-started/getting-started/our-products/merchant-onboarding/merchant-onboarding-via-api) |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Primary goal**       | Launch a configurable onboarding flow with minimal build.                                                                  | Submit applications manually in a portal.                                                                                                          | Build a fully embedded onboarding experience.                                                                                |
| **Best for**           | Partners who want speed and consistency.                                                                                   | Teams who want a simple process and no integration.                                                                                                | Platforms who need full control and deep integration.                                                                        |
| **Integration effort** | Low                                                                                                                        | None                                                                                                                                               | High                                                                                                                         |
| **Who owns the UX**    | Xplor Pay hosted UI (configurable, white-labeled)                                                                          | Partner Portal UI                                                                                                                                  | You (your app/UI)                                                                                                            |
| **Customization**      | Field and workflow configuration                                                                                           | Fixed experience                                                                                                                                   | Full control                                                                                                                 |

### Next step

Once merchants are approved, move on to [Payment Processing](/getting-started/getting-started/our-products/payment-processing).

### Need help?

{% hint style="success" %}
If you want a hands-off rollout, we can support onboarding setup and go-to-market planning.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Hosted Merchant Onboarding

This page provides an overview of Xplor Pay’s Hosted Merchant Onboarding. It gives a brief idea of how to manage the end-to-end merchant onboarding process through a streamlined and hosted workflow.

### About Hosted Merchant Onboarding

The Xplor Pay’s Hosted Merchant Onboarding (HMO) is a hosted application flow that simplifies how new merchants submit their business information for payment processing setup. It provides a secure, PCI-compliant online application that captures business, owner, banking, and compliance details without requiring partners to build their own onboarding forms.

Xplor Pay automatically validates the data, performs underwriting checks, and creates the merchant account, reducing integration complexity for software partners.

### Business challenges addressed

Software providers often struggle with merchant onboarding due to manual data collection, compliance reviews, and underwriting processes. These steps slow merchant onboarding and increase operational overhead.

HMO solves these challenges by automating data collection, validation, and underwriting. It enables software partners to onboard merchants faster, more securely, and at scale without building a custom onboarding flow.

### Key capabilities

{% stepper %}
{% step %}

#### **Hosted application flow.**

Merchants complete onboarding through a secure hosted application form. The form captures all required business, ownership, and banking information and supports electronic signatures.
{% endstep %}

{% step %}

#### **Automated underwriting and compliance validation.**

Submitted data is validated automatically. Missing or incorrect information is flagged immediately to reduce manual review.
{% endstep %}

{% step %}

#### **Flexible pricing configuration.**

HMO supports default, custom, and Empower pricing models. The appropriate pricing plan is assigned based on partner configuration and merchant eligibility.
{% endstep %}

{% step %}

#### **Seamless API integration.**

Software Partners can initiate onboarding, request hosted application URLs, and track application status using API calls.
{% endstep %}

{% step %}

#### **Quick account activation.**

Automated workflows accelerate the review and approval process. Merchants start accepting payments once underwriting is complete.
{% endstep %}
{% endstepper %}

### Use cases

HMO covers the following scenarios:

* Independent Software Vendors (ISVs) onboarding merchants at scale.
* Platforms that require a simple, secure onboarding workflow.
* Flexibility in default, custom, or Empower pricing models.
* Merchants who need a fast, guided payment setup experience.

### Hosted Merchant Onboarding process flow

{% stepper %}
{% step %}

#### **Generate Hosted Merchant Onboarding Application URL.**

The software partner initiates the onboarding request via an API request. The response includes a hosted onboarding URL that is presented to the merchant.
{% endstep %}

{% step %}

#### **Merchant completes the onboarding application.**

The merchant enters business, owner, banking, and tax information and signs electronically. Merchant reviews the entered details and submits the application.
{% endstep %}

{% step %}

#### **Data validation and underwriting.**

Xplor Pay validates the submitted information and performs underwriting checks.
{% endstep %}

{% step %}

#### **Pricing plan configuration.**

Xplor Pay will assign the default pricing plan based on the partner’s configuration if no specific pricing configuration is selected. Alternatively, merchants can select either a custom or an Empower pricing plan as needed.
{% endstep %}

{% step %}

#### **Merchant creation.**

After a successful underwriting process, the merchant account is created, and payment credentials are provisioned.
{% endstep %}
{% endstepper %}

### Technical requirements

To use hosted merchant onboarding flow, you need:

* Valid API access key issued by Xplor Pay.
* Access to the sandbox URL for testing.
* Provide webhook URL for onboarding status notifications.

### Related topics

* To start onboarding quickly, refer to the [Hosted Merchant Onboarding quick start](https://docs.xplorpay.com/quick-starts/hosted-merchant-onboarding).
* To learn how to implement the setup and callbacks, see [Hosted Merchant Onboarding](https://docs.xplorpay.com/api-reference/api/merchant-onboarding/hosted-merchant-onboarding).


# Merchant Onboarding via Partner Portal

This page provides an overview of Xplor Pay’s Merchant Onboarding via Partner Portal, a guided, web-based solution that enables software partners to onboard merchants efficiently while ensuring compliance, accuracy, and faster activation.

### About Merchant Onboarding via Partner Portal

The Xplor Pay’s Merchant Onboarding via Partner Portal allows software partners to create, manage, and submit merchant applications through a centralized user interface. The portal guides users through each onboarding stage, from application creation to final submission, while enforcing required validations, documentation, and approvals.

This solution is ideal for software partners who prefer a manual, guided onboarding experience without direct API integration.

### Business challenges addressed

Merchant Onboarding via Partner Portal helps partners overcome common onboarding challenges, including:

* Incomplete or inaccurate merchant applications.
* Manual errors that delay underwriting and approval.
* Complex compliance and documentation requirements.

### Key capabilities

Merchant Onboarding via Partner Portal enables you to:

* Guide through each onboarding step in a logical sequence to ensure completeness and accuracy.
* Identify missing or invalid data before submission to reduce rework and delays.
* Allow partners to configure pricing models, fees, and required hardware directly within the portal.
* Collect and verify banking, legal, and ownership information to meet underwriting requirements.

### Use cases

Merchant Onboarding via Partner Portal is designed for the following scenarios:

* Software partner onboarding merchants without API integration.
* Team submitting merchant applications through a guided UI.
* Operations teams managing pricing, banking, and equipment setup.
* Compliance teams reviewing and validating merchant information.

### Merchant Onboarding via Partner Portal process flow

{% stepper %}
{% step %}

#### **Start a merchant application.**

Create a new merchant application and assign hierarchy, compensation, and merchant type details.
{% endstep %}

{% step %}

#### **Enter business and profile information.**

Provide business details, ownership data, sales profile, and operational information.
{% endstep %}

{% step %}

#### **Complete site survey and compliance checks.**

Verify merchant location, inventory alignment, and identity requirements.
{% endstep %}

{% step %}

#### **Configure pricing, banking, and equipment.**

Set pricing programs, add bank accounts, and request required payment equipment.
{% endstep %}

{% step %}

#### **Collect signatures and submit the application.**

Capture required signatures, upload documents, review errors, and submit the application for approval.
{% endstep %}
{% endstepper %}

### Technical requirements

To onboard the merchants via Partner Portal, you need:

* Active Xplor Pay account
* Access to the Xplor Pay Partner Portal

## Related topics

To learn how to onboard a merchant, see [Merchant Onboarding via Partner Portal](/partner-portal/partner-portal/guides/merchant-onboarding-via-partner-portal).


# Merchant Onboarding via API

This page provides an overview of Xplor Pay’s Merchant Onboarding via API solution, which enables partners and integrators to onboard merchants. The API streamlines merchant setup by automating business registration, underwriting data submission, and onboarding configuration through secure REST endpoints.

### About Merchant Onboarding via API

The Xplor Pay’s Merchant Onboarding via API allows integrators to embed merchant onboarding directly into their applications or platforms. Instead of manual form-based onboarding, partners can create, configure, and activate merchant accounts using APIs, enabling faster onboarding and reduced errors.

### Business challenges addressed

Merchant Onboarding via API addresses the following challenges:

* Manual and time-consuming merchant onboarding processes.
* Inconsistent data capture across onboarding channels.
* Delays caused by incomplete or incorrect underwriting information.
* Limited scalability when onboarding high merchant volumes.

### Key capabilities

Merchant Onboarding via API enables you to:

* Create and manage merchant accounts.
* Secure submission of merchant business, ownership, and banking details.
* Support for automated underwriting and compliance workflows.
* Configuration of merchant pricing, settlement, and processing options.
* Real-time onboarding status and response handling via API.

### Use cases

Merchant Onboarding via API is designed for the following scenarios:

* ISVs onboarding merchants directly from their platforms.
* Payment facilitators onboarding sub-merchants at scale.

### Merchant Onboarding via API process flow

{% stepper %}
{% step %}

#### **Collect merchant information.**

Capture and submit merchant business, ownership, and contact details through the onboarding APIs.
{% endstep %}

{% step %}

#### **Submit underwriting and compliance data.**

Provide required banking, taxpayer, and compliance information for validation and risk review.
{% endstep %}

{% step %}

#### **Configure pricing and processing settings.**

Set up merchant pricing plans, fees, and processing options based on business requirements.
{% endstep %}

{% step %}

#### **Validate and approve the application.**

Xplor Pay reviews the submitted data, performs automated underwriting, and returns approval or review status.
{% endstep %}

{% step %}

#### **Activate the merchant account.**

Activate the merchant account and enable payment processing for card-present and card-not-present transactions.
{% endstep %}
{% endstepper %}

### Technical requirements

To onboard the merchants via API, you need an API access key.

### Related topics

To learn how to integrate and onboard the merchant via API, see [Onboard Merchant API](https://docs.xplorpay.com/api-reference/api/merchant-onboarding/onboard-merchant).


# Payment Processing

Payment processing is how your merchants accept and authorize card and bank payments on Xplor Pay.

Pick the integration based on channel (in-person, web, recurring, ACH) and UX control.

### Pick a Payment Integration

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Cloud EMV</strong></td><td>Card-present for POS and terminals (unified API).</td><td><a href="/pages/d50fd926a149570d6da53b6176593657487e4f5c">Learn more</a></td></tr><tr><td><strong>Mobile EMV SDK</strong></td><td>In-app card-present for iOS/Android (Bluetooth reader).</td><td><a href="/pages/5bcfe8770953b32f5aa2da108702851c69040757">Learn more</a></td></tr><tr><td><strong>Tap to Pay on iPhone</strong></td><td>In-app contactless payments on iPhone without a separate reader.</td><td><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/HEctuakW6Z19XMx83mH7">Learn more</a></td></tr><tr><td><strong>JavaScript SDK</strong></td><td>Web checkout with hosted iframe + wallets.</td><td><a href="/pages/55614915657f2a4c778f1e4623ee4889c0bca0d8">Learn more</a></td></tr><tr><td><strong>Recurring Payments</strong></td><td>Stored payment methods + scheduled billing.</td><td><a href="/pages/6b28611c0fb3c40d2ccdd7afeff5743e7903a6fb">Learn more</a></td></tr><tr><td><strong>Paylink</strong></td><td>Payment links using SMS or e-mail.</td><td><a href="https://docs.xplorpay.com/getting-started/getting-started/our-products/payment-processing/paylink">Learn more</a></td></tr><tr><td><strong>ACH Transactions</strong></td><td>Bank payments with tokenization.</td><td><a href="/pages/13240c96b287e48c735ff4f5076e88be2f8c4e8f">Learn more</a></td></tr><tr><td><strong>Payment UI</strong></td><td>A ready-to-use interface for handling card payments.</td><td><a href="/pages/fYtwh98ZaDeEsTTtMAgm">Learn more</a></td></tr></tbody></table>

{% hint style="info" %}
Rule of thumb:

* Building for **terminals / POS**: start with **Cloud EMV**.
* Building **mobile in-person** payments: use **Mobile EMV SDK**.
* Building **web checkout**: use **JavaScript SDK**.
* Charging on a schedule: use **Recurring Payments** (needs a stored payment method).
* Requesting payment via a payment link: use **Paylink** (send link by SMS or e-mail).
* Want lower-cost **bank payments**: use **ACH Transactions**.
* Manage card payments in your iOS app: use **Paylink UI**.
  {% endhint %}

{% hint style="warning" %}
Card-present options are device-specific:

* **Cloud EMV** **SDK** supports selected terminals (PAX and Dejavoo).
* **Mobile EMV SDK** uses the **ID TECH VP3300** card reader.
  {% endhint %}

### Comparison matrix

<table><thead><tr><th valign="top">Solution</th><th valign="top">Channel</th><th valign="top">Best for</th><th valign="top">Integration type</th><th valign="top">Hardware required</th></tr></thead><tbody><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/d50fd926a149570d6da53b6176593657487e4f5c">Cloud EMV</a></td><td valign="top">In-person (card-present)</td><td valign="top">POS platforms supporting multiple terminals</td><td valign="top">REST API</td><td valign="top">Yes (supported terminals)</td></tr><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/5bcfe8770953b32f5aa2da108702851c69040757">Mobile EMV SDK</a></td><td valign="top">In-person (card-present)</td><td valign="top">Mobile apps that want embedded payments</td><td valign="top">iOS/Android SDK + Mobile Payments API</td><td valign="top">Yes (VP3300 via Bluetooth)</td></tr><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/HEctuakW6Z19XMx83mH7">Tap to Pay on iPhone</a></td><td valign="top">In-person (card-present)</td><td valign="top">iPhone apps that want contactless payments without external hardware</td><td valign="top">iOS SDK + Mobile Payments API</td><td valign="top">No</td></tr><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/55614915657f2a4c778f1e4623ee4889c0bca0d8">JavaScript SDK</a></td><td valign="top">Online (card-not-present)</td><td valign="top">Hosted checkout + wallet support with reduced PCI scope</td><td valign="top">JavaScript SDK + backend token submission</td><td valign="top">No (optional readers supported)</td></tr><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/6b28611c0fb3c40d2ccdd7afeff5743e7903a6fb">Recurring Payments</a></td><td valign="top">Scheduled billing</td><td valign="top">Subscriptions, installments, maintenance plans</td><td valign="top">API</td><td valign="top">No</td></tr><tr><td valign="top"><a href="/pages/a137444e06bd70ac73b4181d2363f0d73643fb5d">Paylink</a></td><td valign="top">Online (card-not-present)</td><td valign="top">Link-based payments via SMS or e-mail.</td><td valign="top">API</td><td valign="top">No</td></tr><tr><td valign="top"><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/13240c96b287e48c735ff4f5076e88be2f8c4e8f">ACH Transactions</a></td><td valign="top">Bank payments</td><td valign="top">Lower-cost payments and bank-based recurring</td><td valign="top">API (also supported via JavaScript SDK / PayLink)</td><td valign="top">No</td></tr><tr><td valign="top"><a href="/pages/fYtwh98ZaDeEsTTtMAgm">Payment UI</a></td><td valign="top">In-person (card-present)</td><td valign="top">A ready-to-use interface for handling card payments.</td><td valign="top">iOS SDK + Mobile Payments API</td><td valign="top">Yes (VP3300 via Bluetooth)</td></tr></tbody></table>

### Next step

If you haven’t onboarded merchants yet, start with [Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding).

Once you’re processing payments, you’ll usually want [Reporting](/getting-started/getting-started/our-products/reporting-solutions/reporting) and [Financial Management](/getting-started/getting-started/our-products/financial-management) next.

### Need help?

{% hint style="success" %}
Tell us your channel (POS, mobile, web) and devices. We’ll recommend the fastest path with the lowest compliance overhead.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Cloud EMV

This page provides an overview of Xplor Pay’s Cloud EMV solution and explains how it enables secure, cloud-based EMV payment processing for card-present payment scenarios, including but not limited to POS systems.

### About Cloud EMV <a href="#productoverview-cloudemv-aboutcloudemv" id="productoverview-cloudemv-aboutcloudemv"></a>

The Xplor Pay’s Cloud EMV is a semi-integrated, cloud-based payment solution that enables point-of-sale (POS) systems to accept EMV card-present payments through a unified API. By embedding Cloud EMV APIs into your platform, you can support multiple payment terminals across various card-present environments without managing PCI DSS compliance or completing complex EMV security certifications. The Cloud EMV manages device communication and transaction processing through APIs.

### Business challenges addressed <a href="#productoverview-cloudemv-businesschallengesaddressed" id="productoverview-cloudemv-businesschallengesaddressed"></a>

Integrating Cloud EMV card-present payments often requires applications to manage device-specific logic, certifications, and ongoing compliance obligations. Cloud EMV addresses these challenges by:

* Eliminating the need for applications to handle sensitive card data.
* Reducing PCI DSS compliance by isolating card entry and processing within certified terminals and cloud services.
* Removing the complexity of EMV certification and terminal-specific integrations.
* Simplifying terminal replacement and expansion without re-integrating at the application level.

### Key capabilities <a href="#productoverview-cloudemv-keycapabilities" id="productoverview-cloudemv-keycapabilities"></a>

Cloud EMV provides the following core capabilities:

* Unified REST-based API integration for EMV card-present transactions.
* Support for multiple payment terminals through a single integration.
* Cloud-based routing of card data request between applications and payment device.
* Secure EMV and P2PE-compliant card data capture at the terminal.

### Use cases <a href="#productoverview-cloudemv-usecases" id="productoverview-cloudemv-usecases"></a>

Cloud EMV is designed for the following scenarios:

* POS platforms and applications supporting multiple EMV payment terminals.
* Card-present payment solutions beyond regular POS environments.
* Software providers seeking a simplified, scalable EMV payment integration.
* Merchants requiring secure, card-present payment acceptance.
* Businesses looking to minimize PCI and EMV compliance overhead.

### Cloud EMV Payment process flow <a href="#productoverview-cloudemv-cloudemvpaymentprocessflow" id="productoverview-cloudemv-cloudemvpaymentprocessflow"></a>

{% stepper %}
{% step %}

#### **Initiate payment.**

The client application sends a payment request to the Cloud EMV API.
{% endstep %}

{% step %}

#### **Route card data request.**

Cloud EMV services forward the card data request to cloud-based integration services associated with the payment terminal.
{% endstep %}

{% step %}

#### **Activate payment terminal.**

The payment terminal is activated to display payment services to the customer.
{% endstep %}

{% step %}

#### **Capture card data.**

The customer enters card details directly on the terminal.
{% endstep %}

{% step %}

#### **Authorize transaction.**

The application submits a transaction authorization request to the Cloud EMV API using the card data captured by the terminal.
{% endstep %}

{% step %}

#### **Receive response.**

Cloud EMV processes the transaction and returns the authorization response to the application.
{% endstep %}
{% endstepper %}

### Technical requirements <a href="#productoverview-cloudemv-technicalrequirements" id="productoverview-cloudemv-technicalrequirements"></a>

* Supported EMV payment terminals (PAX and Dejavoo devices)
* Integration with Cloud EMV APIs
* Supported EMV and P2PE compliant payment terminals

### Related topics <a href="#productoverview-cloudemv-relatedtopics" id="productoverview-cloudemv-relatedtopics"></a>

* For a fast payment setup, see [Cloud EMV](/quick-starts/cloud-emv).
* To configure your devices for payment processing, see [Cloud EMV](/guides/cloud-emv).


# Mobile EMV SDK

This page provides an overview of Xplor Pay’s Mobile SDK for iOS and Android. It describes the Mobile EMV SDK that allows accepting EMV chip card payments via Bluetooth using the VP3300 card reader.

### About Mobile EMV SDK

The Mobile EMV SDK enables iOS and Android applications to securely accept EMV chip card payments using the VP3300 mobile card reader. It manages end-to-end EMV transaction flow including card detection, data encryption, and JWT token generation, reducing PCI scope.

The Mobile EMV SDK supports Bluetooth based connectivity and provides layered, P2PE security to simplify EMV card payment acceptance.

### Business challenges addressed

Integrating Mobile EMV SDK card-present payments into mobile apps often requires complex certification, device management, and PCI scope. The Mobile EMV SDK addresses these challenges by:

* Eliminating direct cardholder-data exposure through reader-level encryption and tokenization.
* Reducing PCI compliance requirements and minimizing EMV certification effort.
* Providing a consistent, unified in-app payment experience across iOS and Android.
* Handling secure communication with the VP3300 card reader.

### Key capabilities

Mobile EMV SDK provides the following core capabilities:

* Supports EMV-compliant card transactions using the VP3300 mobile card reader via Bluetooth connectivity.
* Card data is encrypted at the reader and never exposed to the mobile application.
* The Mobile EMV SDK generates an encrypted JWT for secure card-present processing through Xplor Pay’s Mobile Transactions API.

### Use cases

Mobile EMV SDK covers the following scenarios:

* Software partners embedding in-person payments into their mobile applications.
* Mobile apps for retailers and service providers.
* Applications requiring secure card-present transactions.
* Merchants accepting payments on mobile devices paired with a portable card reader.

### Mobile EMV SDK for iOS framework process flow

{% stepper %}
{% step %}

#### **Initialize the Mobile EMV SDK.**

Initialize the Mobile EMV SDK to prepare card reader communication and import the required IDTech frameworks.
{% endstep %}

{% step %}

#### **Connect to the card reader.**

Detect and connect to the VP3300 card reader using Apple’s Bluetooth APIs through the IDTech framework.
{% endstep %}

{% step %}

#### **Process the payment.**

* The customer inserts the EMV card into the reader.
* The SDK secures and encrypts the card data into the JSON Web Token (JWT).
* The JWT is returned to the mobile application through a callback.
* The app submits the JWT to the Mobile Payments API to authorize the transaction.

The iOS framework uses IDTech.xcframework and bundled resources to manage card-reader communication and feedback messages.
{% endstep %}
{% endstepper %}

### Mobile EMV SDK for Android framework process flow

{% stepper %}
{% step %}

#### **Initialize the framework.**

Initialize the Mobile EMV SDK IDTech Android framework components using required .jar files.
{% endstep %}

{% step %}

#### **Connect to the VP3300 card reader.**

Connect to the VP3300 card reader using Bluetooth connectivity.\
The Mobile EMV SDK applies required EMV configurations to the reader and confirms readiness before starting any transaction.
{% endstep %}

{% step %}

#### **Process the payment.**

* The app starts the transaction, prompting the customer to DIP/SWIPE/TAP the card.
* The SDK reads and generates an encrypted JWT containing secured card data.
* The app submits the JWT to the Mobile Payments API using the `/rest/v2/mobile/transactions/sale` endpoint to complete the payment.
  {% endstep %}
  {% endstepper %}

### Technical requirements

To accept payments in your app, you need:

#### **Device & Reader**

* IDTech VP3300 mobile card reader
* Bluetooth connectivity (required)
* EMV and P2PE support

#### &#x20;**iOS Requirements**

* IDTech.xcframework v4.0.158 or later
* IDTech.bundle (including IdtechMessages.bundle)
* CocoaLumberjack.xcframework
* iOS 14.0 or later for manual card entry

{% hint style="warning" %}
Starting with iOS 18.4, Apple displays reminders before support is removed—weekly beginning 90 days before the removal date, and daily during the final three days.
{% endhint %}

#### &#x20;**Android Requirements**

* Android SDK and compatible .jar files from the android idtech-sdk package
* Public key provided by Xplor Pay
* Android 7.0 or later

### Related topics

* To try out the quick onboarding flow, see:
  * [iOS Framework](https://docs.xplorpay.com/quick-starts/ios-framework)
  * [Android Framework](https://docs.xplorpay.com/quick-starts/android-framework)
* To learn how to implement the setup to process payment, see [Mobile EMV](/guides/mobile-emv).


# JavaScript SDK

This page provides an overview of Xplor Pay’s JavaScript SDK solution and explains how it enables merchants and integrators to securely accept web-based payments integration.

### About JavaScript SDK

The Xplor Pay’s JavaScript SDK enables merchants to securely accept payments directly on their websites using a hosted payment form. It embeds a PCI-compliant payment iframe into the merchant’s checkout experience, allowing customers to enter payment details without exposing sensitive data to the merchant’s servers. The SDK supports card payments, digital wallets (Apple Pay and Google Pay), and compatible card readers, providing a flexible and secure way to accept payments across web-based channels. It generates secure payment tokens that merchants submit from their backend systems to complete transactions, helping reduce PCI scope while maintaining control over the flow.

### Business challenges addressed

Integrating the JavaScript SDK helps address common web payment challenges by:

* Embedding a secure, PCI-compliant payment form into a website
* Reducing PCI compliance complexity by securing payment data
* Eliminating the need to store or process sensitive cardholder information
* Improving checkout conversion with trusted and familiar payment methods
* Supporting secure payment acceptance across browsers and devices

### Key capabilities

JavaScript SDK provides the following core capabilities:

* Embed a secure, hosted payment form into a merchant website
* Tokenize payment details for safe backend transaction processing
* Support manual card entry, Apple Pay, and Google Pay on the web
* Enable browser-based payments using supported USB card readers
* Customize the payment form appearance to match website branding

### Use cases

JavaScript SDK covers some of the following scenarios:

* Accepting online card payments through a web-based checkout page
* Offering Apple Pay or Google Pay for faster customer checkout
* Integrating secure payment acceptance into custom web applications
* Supporting both card-not-present and card-present workflows on the web

### JavaScript SDK process flow

{% stepper %}
{% step %}

#### **Initiate the SDK.**

The merchant loads the JavaScript SDK and initializes it using the public key and environment configuration.
{% endstep %}

{% step %}

#### **Display the payment form.**

The SDK renders a secure, hosted payment form within the website.
{% endstep %}

{% step %}

#### **Collect payment details.**

Customers enter payment information or use a supported digital wallet, such as Apple Pay or Google Pay, once enabled.
{% endstep %}

{% step %}

#### **Generate secure payment token.**

The SDK generates a signed JSON Web Token (JWT) when the customer submits the form.
{% endstep %}

{% step %}

#### **Process the transaction.**

The merchant’s backend submits the JWT token to the payment gateway to complete the transaction and optionally create a reusable card token.
{% endstep %}

{% step %}

#### **Receive transaction result.**

The system returns the transaction response, including approval status and relevant transaction details.
{% endstep %}
{% endstepper %}

### Technical requirements

To accept payments online, you need:

* Website hosted over HTTPS
* JavaScript-enabled, supported web browsers
* Public and API keys issued to you by Xplor Pay

### Related topics

* To get JWT and card token quickly, see [JavaScript](https://docs.xplorpay.com/quick-starts/javascript).
* To learn how to implement the setup to process payment, see [JavaScript SDK](/guides/javascript).


# Recurring Payments

This page provides an overview of Xplor Pay’s Recurring Payments solution and explains how to create customers, store customers information, generate customer tokens, and schedule automated recurring payments according to your specified schedule.

### About Recurring Payments

The Xplor Pay’s Recurring Payments allows businesses to create and manage customer profiles, securely store payment methods using tokenization, set up flexible scheduled payment plans, and automatically process payments based on the defined schedule. You can charge customers on a fixed schedule, such as weekly, monthly, or yearly, without requiring manual payment collection each time. The solution securely stores customer and payment details and processes scheduled payments based on the plan you define.

### Business challenges addressed

Integrating Recurring Payments helps to solve common payment challenges such as:

* Automates recurring charges to eliminate repeated payment requests and manual processing.
* Ensures on-time billing by automatically charging customers on a predefined schedule.
* Improves customer experience by securely storing payment details and reducing repeated data entry.

### Key capabilities

Recurring Payments provides the following core capabilities:

* Create, store, and manage customer profiles with complete billing details.
* Securely store payment methods as tokens and reuse them for future transactions.
* Automatically process customer payments based on the defined payment schedule.
* Create, view, update, and monitor payment plans throughout their lifecycle.

### Use cases

Recurring Payments covers some of the following scenarios:

* Subscription-based services
* Installment or payment plans
* Ongoing maintenance or support contracts
* Programs with scheduled payments

### Recurring Payments process flow

{% stepper %}
{% step %}

#### **Create a customer profile.**

Create a customer profile to store the customer’s basic and billing information. The system generates a unique customer key used to manage recurring payments.
{% endstep %}

{% step %}

#### **Link the payment method.**

Link an existing payment token to the customer profile. This token enables future recurring charges without exposing sensitive payment data.
{% endstep %}

{% step %}

#### **Create a recurring payment plan.**

Define the payment amount, billing frequency, and date range to activate a recurring payment plan for the customer.
{% endstep %}

{% step %}

#### **Process scheduled payments.**

The system automatically processes payments according to the configured schedule and payment plan.
{% endstep %}

{% step %}

#### **Monitor payment plans.**

Monitor the payment plans to understand their current status.
{% endstep %}
{% endstepper %}

### Technical requirements

To use recurring payments services, you need:

* Active Xplor Pay account
* Configured authentication for API access

### Related topics

* To create a customer and start the process quickly, see the [Recurring Payments](https://docs.xplorpay.com/quick-starts/recurring-payments).
* To learn how to implement the setup to process payment, see [Recurring Payments](https://docs.xplorpay.com/api-reference/api/payments/recurring-payments-service).


# ACH Transactions

This page provides an overview of Xplor Pay ACH Transactions and explains how to accept bank-based payments using ACH credit and direct debit. ACH Transactions support secure payment processing, tokenization for reuse, and transaction retrieval through multiple integration methods.

### About ACH Transactions

The ACH Transactions enable merchants to accept payments directly from customer bank accounts using the Automated Clearing House (ACH) network. The platform supports both ACH credit and ACH direct debit payments and provides APIs to submit payments, tokenize bank accounts, and retrieve transaction details.

Xplor Pay integrates with third-party Paya and DCS processors to handle ACH processing, settlement, and reporting.

### Business challenges addressed

Integrating ACH Transactions helps address common payment and operational challenges by reducing card processing costs, enabling bank-based payments, and supporting recurring and one-time transactions. Integrators can offer merchants a reliable alternative to card payments while maintaining secure handling of sensitive banking data.

### Key capabilities

ACH Transactions provides the following core capabilities:

* Submit ACH credit and direct debit payment requests through a unified API.
* Validate and tokenize bank account details for secure reuse in future transactions.
* Retrieve and track ACH transaction status using search criteria and transaction IDs.
* Accept ACH payments using APIs, Paylink, or the JavaScript SDK.

### Use cases

ACH Transactions is designed for the following scenarios:

* Software platforms that need to accept bank-to-bank payments without relying on card networks.
* Businesses looking to reduce payment processing costs by using ACH.
* Merchants requiring secure, card-present payment acceptance.
* Businesses looking to minimize PCI and EMV compliance overhead.

### ACH Transactions process flow

{% stepper %}
{% step %}

#### **Submit an ACH payment request.**

Send an ACH credit or debit request using the ACH Transactions API with the required bank and transaction details.
{% endstep %}

{% step %}

#### **Create or reuse an ACH token.**

Tokenize the bank account details to securely store and reuse them for future payments.
{% endstep %}

{% step %}

#### **Process the ACH transaction.**

The system submits the request for processing through the ACH network.
{% endstep %}

{% step %}

#### **Retrieve transaction details.**

Query the ACH Transactions API to track transaction status, settlement, or return information.
{% endstep %}
{% endstepper %}

### Technical requirements

To process ACH transactions, you need:

* Access to the Xplor Pay ACH APIs
* Support for HTTPS-based API communication

### Related topics

* To process ACH direct debit payments quickly, see [ACH Transactions](https://docs.xplorpay.com/quick-starts/ach-transactions).
* To learn how to implement the setup to process payment and API details, see [ACH Transactions](https://docs.xplorpay.com/api-reference/api/payments/ach).


# Paylink

This page provides an overview of Xplor Pay’s Paylink solution, which allows you to accept payments online by sending a secure payment link to your customers via text message (SMS) or email.

### About Paylink

The Xplor Pay’s Paylink enables you to collect payments securely by generating a payment link and sending it to your customers through SMS or email as an invoice payment request. This payment link directs your customers to a pre-generated payment form where they can complete the payment using a credit card, debit card, or ACH. Paylink Settings API allows you to integrate the hosted paylink into your website.

### Business challenges addressed

Paylink helps you overcome the challenges by:

* Eliminating the need to capture or store card details.
* Reducing PCI compliance exposure.
* Speeding up the payment process and collection through SMS or email.
* Providing a secure checkout experience to customers.

### Key capabilities

Using Paylink, you can:

* Send a secure payment link to customers via SMS or email.
* Accept credit card, debit card, and ACH payments.
* Use a PCI-compliant pre-generated hosted payment form.
* Configure billing address visibility and requirements.

### Use cases

Paylink is ideal for scenarios where payments are collected remotely, such as:

* Sending payment requests after services are completed.
* Accepting payments during phone or support interactions.
* Collecting an invoice or follow-up payment.
* Fast, minimum-touch online payments without a customer portal.

### Paylink process flow

{% stepper %}
{% step %}

#### **Review Paylink settings.**

Confirm that Paylink is enabled for the terminal. If required, enable Paylink and configure the settings.
{% endstep %}

{% step %}

#### **Generate a payment link.**

Generate a secure Paylink URL to request payment from your customer. The Paylink URL is tied to the configured terminal and payment details.
{% endstep %}

{% step %}

#### **Send payment link via SMS or email.**

Send the secure Paylink URL to your customer by text message (SMS) or email, such as an invoice e-mail.
{% endstep %}

{% step %}

#### **Customer completes the payment.**

The Paylink URL directs the customer to a hosted payment form, where they complete the payment using a credit card, debit card, or ACH.

Based on the payment result, the customer is redirected to a success or cancellation page.
{% endstep %}
{% endstepper %}

### Technical requirements

To accept payment using the paylink, you need:

* Active Xplor Pay account.
* An API access key.

### Related topic

To learn how to implement the setup, see [Paylink API](https://docs.xplorpay.com/api-reference/api/payments/gateway-settings/paylink-settings).


# Payment UI

Learn how to integrate Xplor Pay Payment UI for iOS to accept card-present payments with the VP3300 Bluetooth reader, manual card entry, offline mode, and built-in payment screens.

**Payment UI** gives your iOS app a ready-made checkout for card-present payments. It wraps the Mobile EMV SDK and handles reader pairing, card collection, validation, and in-app payment screens.

Use it when you want a production-ready payment experience without building your own checkout UI.

### At a glance

* **Platform:** iOS
* **Reader support:** ID TECH VP3300 over Bluetooth
* **Payment flows:** Reader-based payments and manual card entry
* **Result:** A JWT that your app submits as the `mobilejwt` header

### When to use Payment UI

Use Payment UI when you want:

* Built-in payment screens
* Faster iOS integration
* Less UI work for pairing, checkout, and settings

See [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk) directly when you need full control over the payment UI and flow.

### Requirements

Before you present Payment UI, make sure you have:

* An iOS app with the Mobile EMV SDK installed
* An ID TECH VP3300 reader for card-present transactions
* Bluetooth enabled on the device
* iOS 14.0 or later for manual card entry
* A payment API integration that accepts `mobilejwt`

For framework requirements, see [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk). For a guided build, see [iOS Framework quick start](/quick-starts/ios-framework).

### What Payment UI handles

Payment UI handles the in-app payment experience, including:

* Reader pairing and connection guidance
* Card collection and manual entry forms
* Payment status, validation, and error messaging
* Signature capture, e-mail receipts, and settings
* Offline storage and upload when offline mode is enabled

### What your app still handles

Your app still needs to:

* Initialize the SDK
* Present the Payment UI screens
* Submit the JWT to the payment API
* Show the final result in your own app flow

{% hint style="info" %}
Payment UI handles card interaction and tokenization. Your app handles authorization, capture, and post-payment screens.
{% endhint %}

### Payment UI process flow

{% stepper %}
{% step %}

#### Initialize the Mobile EMV SDK

Initialize the Mobile EMV SDK before presenting any Payment UI screen.

Make sure your app includes the required frameworks, bundles, and SDK configuration.&#x20;

{% hint style="info" %}
See [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk) page for platform requirements.
{% endhint %}
{% endstep %}

{% step %}

#### Pair a VP3300 reader over Bluetooth

Present the built-in pairing flow when the user needs to connect a reader.

{% code title="Pair a reader" overflow="wrap" lineNumbers="true" %}

```swift
let pairingVC = ClearentUIManager.shared.pairingViewController(completion: {})
navigationController?.present(pairingVC, animated: true)
```

{% endcode %}

The pairing flow:

1. Prompts the user to wake the reader.
2. Scans for nearby VP3300 devices.
3. Guides the user through selection and connection.
4. Handles retries and connection errors.
   {% endstep %}

{% step %}

#### Present the payment screen

Use the built-in payment view controller to start a card-present payment or manual card entry flow.

{% code title="Start a payment" overflow="wrap" lineNumbers="true" %}

```swift
ClearentUIManager.shared.cardReaderPaymentIsPreferred = true
let transactionVC = ClearentUIManager.shared.paymentViewController(
    paymentInfo: PaymentInfo(amount: 20.0),
    completion: {}
)
navigationController?.present(transactionVC, animated: true)
```

{% endcode %}

Use this flow to:

1. Pass a `PaymentInfo` object with the required amount.
2. Prefer the card reader when it is available.
3. Fall back to manual entry when needed.
4. Receive a transaction JWT after successful tokenization.

Submit the JWT as the `mobilejwt` header in your payment API request.
{% endstep %}

{% step %}

#### Support manual card entry

Manual entry works as a fallback when the reader is unavailable or the transaction cannot continue on the device.

The flow collects:

* Card number, expiration date, and security code
* Optional billing and order details
* Any additional metadata required in `PaymentInfo`
  {% endstep %}

{% step %}

#### Open the settings screen

Use the settings screen to manage readers and app-level payment options.

{% code title="Open settings" overflow="wrap" lineNumbers="true" %}

```swift
let settingsVC = ClearentUIManager.shared.settingsViewController(completion: {})
navigationController?.present(settingsVC, animated: true)
```

{% endcode %}

From settings, users can:

* View the current reader
* Access recently paired readers
* Configure offline behavior
* Manage e-mail receipt preferences

You can also read saved reader details in code:

{% code title="Read reader details" overflow="wrap" lineNumbers="true" %}

```swift
let currentReader = ClearentWrapperDefaults.pairedReaderInfo
let recentReaders = ClearentWrapperDefaults.recentlyPairedReaders
```

{% endcode %}

You can receive reader updates with:

{% code title="Reader status callback" overflow="wrap" lineNumbers="true" %}

```swift
ClearentUIManager.configuration.readerInfoReceived = { reader in
    // Update your UI with reader status
}
```

{% endcode %}
{% endstep %}

{% step %}

#### Enable offline mode and supporting features

Enable offline mode during SDK initialization by providing `offlineModeEncryptionKeyData`.

When offline mode is enabled:

* Transactions can be stored locally
* Users can upload stored transactions later
* Upload reports are available in Settings
* Signatures can also be stored and uploaded later
  {% endstep %}
  {% endstepper %}

### Core features

#### Built-in payment flows

Payment UI includes prebuilt flows for:

* Reader pairing
* Payment initiation
* Manual card entry
* Reader and receipt settings

#### Signature capture

When enabled, Payment UI can prompt for a customer signature after a successful transaction. The SDK resizes, encodes, and uploads the signature to the backend. If the upload fails, the SDK supports retry behavior.

#### E-mail receipts

If enabled, Payment UI prompts the user for an e-mail address after a successful transaction.

#### Tips

If tip collection is enabled on the merchant account, Payment UI displays a tip selection step during checkout.

#### Offline support

Payment UI supports store-and-forward behavior when connectivity is unavailable. Users can review and process saved transactions later from the settings screen.

#### UI customization

You can align Payment UI with your app branding by customizing:

* Fonts
* Colors
* Text content

#### Enhanced messaging

Payment UI can display clearer transaction, and reader prompts through the bundled messaging resources.

To use enhanced messaging:

1. Include `ClearentIdtechMessages.bundle` in your app resources.
2. Add the bundle in **Build Phases** → **Copy Resources**.
3. Make sure `enhancedmessages-v1.txt` is available in that bundle.

### Choose Payment UI or build your own UI

Options 1: Choose Payment UI when you want the fastest path to an iOS card-present experience.

Option 2: Choose a custom UI when you need:

* Full control over screen layout
* Custom navigation and app states
* A deeper integration with lower-level wrapper APIs

If you want custom UI control, start with [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk).

### Related topics

* See [Payment Processing](/getting-started/getting-started/our-products/payment-processing) to compare Xplor Pay payment integrations.
* See [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk) for framework requirements and lower-level SDK details.
* See [Payment UI quick start](/quick-starts/payment-ui) for a quick integration path.


# Tap to Pay on iPhone

Learn how to integrate Tap to Pay on iPhone with the iOS SDK, verify device support, and launch contactless payments.

**Tap to Pay on iPhone** lets merchants accept contactless payments directly on a supported iPhone. No external card reader is required.

The iOS SDK (`ClearentIdtechIOSFramework`) provides a ready-made Tap to Pay experience through `TapToPayRootView` and `tapToPayViewController(...)`.

Use Tap to Pay when you want:

* A reader-free contactless checkout
* Faster integration with minimal UI work
* Built-in handling of Apple Tap to Pay workflows

### At a glance

* **Integration**: CocoaPods
* **Minimum iOS**: 15.4 or later
* **Recommended target**: 15.6 or later
* **UIKit entry point**: `tapToPayViewController(...)`
* **SwiftUI entry point**: `TapToPayRootView`
* **Device pre-check**: `verifyTapToPayDeviceSupport()`
* **Requirement**: Initialize the SDK before use

### Requirements

Before you use Tap to Pay, make sure you have:

#### Apple and device requirements

* A physical iPhone

{% hint style="warning" %}
Tap to Pay does not work on the Simulator.
{% endhint %}

* A supported iPhone that passes `PaymentCardReader.isSupported`
* iOS 15.4 or later
* Device passcode enabled
* NFC enabled

#### Apple developer requirements

* Proximity Reader Payment Acceptance entitlement
* Apple Developer Program approval
* Entitlement configured in:
  * App ID capabilities
  * App `.entitlements` file

#### Integration requirements

* A host iOS app using the iOS SDK (`ClearentIdtechIOSFramework`)
* Valid API credentials
* Network connectivity for payment processing

### What the SDK handles

Tap to Pay manages the full payment experience, including:

* Device capability checks
* Apple merchant account linking and terms acceptance
* Proximity Reader session setup
* Contactless card reading
* Secure card tokenization
* Transaction processing
* Success and error screens
* Optional signature capture and e-mail receipts

### What your app handles

Your app is responsible for:

* Initializing the SDK
* Creating the `PaymentInfo` object
* Launching the Tap to Pay flow
* Handling navigation after the payment completes

### Xcode project setup

#### Proximity Reader framework

The SDK uses Apple’s Proximity Reader framework internally. No manual setup is required beyond standard linking.

#### Add Apple entitlement

Add the Proximity Reader Payment Acceptance entitlement in:

* Apple Developer Portal
* The app’s `.entitlements` file

{% hint style="warning" %}
Without this entitlement, Tap to Pay fails at runtime.
{% endhint %}

#### Initialize the SDK

{% code title="SDKSetup.swift" overflow="wrap" lineNumbers="true" %}

```swift
import ClearentIdtechIOSFramework

let config = ClearentUIManagerConfiguration(
    baseURL: "BASE_URL",
    apiKey: "YOUR_API_KEY",
    publicKey: nil,
    enableEnhancedMessaging: true,
    signatureEnabled: true,
    softwareType: "YourAppName",
    softwareTypeVersion: "1.0.0"
)

ClearentUIManager.shared.initialize(with: config)
UIFont.loadFonts()
```

{% endcode %}

### Verify device support

Check device compatibility before you launch Tap to Pay.

#### verifyTapToPayDeviceSupport()

{% code title="TapToPayAvailability.swift" overflow="wrap" lineNumbers="true" %}

```swift
@available(iOS 15.4, *)
func checkTapToPayAvailability() {
    let result = ClearentUIManager.shared.verifyTapToPayDeviceSupport()

    if result.isSupported {
        // Enable Tap to Pay
    } else {
        print(result.errorMessage ?? "Tap to Pay not supported.")
    }
}
```

{% endcode %}

**What it checks**

* Running on Simulator
* Unsupported device model
* `PaymentCardReader.isSupported`

**Return type**

<table><thead><tr><th width="168.3333740234375" valign="top">Property</th><th width="118.66668701171875" valign="top">Type</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>isSupported</code></td><td valign="top">Boolean</td><td valign="top">Indicates whether the current device supports Tap to Pay. If <code>true</code>, you can safely launch the Tap to Pay flow.</td></tr><tr><td valign="top"><code>errorMessage</code></td><td valign="top">String</td><td valign="top">A localized message that explains why Tap to Pay is not supported. This value is <code>nil</code> when <code>isSupported</code> is <code>true</code>.</td></tr></tbody></table>

#### isTapToPaySupported

{% code title="TapToPaySupport.swift" overflow="wrap" lineNumbers="true" %}

```swift
let canUseTapToPay = ClearentUIManager.shared.isTapToPaySupported
```

{% endcode %}

#### Recommended pattern

{% code title="CheckoutViewController.swift" overflow="wrap" lineNumbers="true" %}

```swift
@IBAction func payWithTapToPay(_ sender: UIButton) {
    let support = ClearentUIManager.shared.verifyTapToPayDeviceSupport()

    guard support.isSupported else {
        showAlert(message: support.errorMessage ?? "Unavailable.")
        return
    }

    presentTapToPay(amount: 49.99)
}
```

{% endcode %}

### Launch Tap to Pay

#### Create a PaymentInfo object

{% code title="PaymentInfo.swift" overflow="wrap" lineNumbers="true" %}

```swift
let paymentInfo = PaymentInfo(
    amount: 25.99,
    customerID: "CUST-001",
    invoice: "INV-12345",
    orderID: "ORD-98765",
    softwareType: "YourAppName",
    softwareTypeVersion: "1.0.0"
)
```

{% endcode %}

#### PaymentInfo properties

<table><thead><tr><th width="212" valign="top">Property</th><th width="115.060546875" valign="top">Type</th><th width="119.09088134765625" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>amount</code></td><td valign="top">Double</td><td valign="top">Required</td><td valign="top">The total transaction amount to charge the customer. Use standard currency format, for example <code>25.99</code>.</td></tr><tr><td valign="top"><code>customerID</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">A unique identifier for the customer in your system.</td></tr><tr><td valign="top"><code>invoice</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">The invoice number associated with the transaction.</td></tr><tr><td valign="top"><code>orderID</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">A unique identifier for the order.</td></tr><tr><td valign="top"><code>softwareType</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">The name of the host application or integration.</td></tr><tr><td valign="top"><code>softwareTypeVersion</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">The version of your application.</td></tr></tbody></table>

#### UIKit (recommended)

Use `tapToPayViewController(...)` when your app already uses UIKit.

{% code title="PaymentViewController.swift" overflow="wrap" lineNumbers="true" %}

```swift
func presentTapToPay(amount: Double) {
    let paymentInfo = PaymentInfo(amount: amount)

    let vc = ClearentUIManager.shared.tapToPayViewController(
        paymentInfo: paymentInfo
    ) { error in
        if let error = error {
            print("Dismissed with error: \(error)")
        } else if TapToPayFlowManager.shared.state == .active {
            print("Payment successful")
        }
    }

    present(vc, animated: true)
}
```

{% endcode %}

#### SwiftUI integration

Use `TapToPayRootView` when your checkout flow is built with SwiftUI.

{% code title="CheckoutView\.swift" overflow="wrap" lineNumbers="true" %}

```swift
struct CheckoutView: View {
    @State private var showTapToPay = false

    var body: some View {
        Button("Pay with Tap to Pay") {
            showTapToPay = true
        }
        .fullScreenCover(isPresented: $showTapToPay) {
            TapToPayRootView(
                paymentInfo: PaymentInfo(amount: 25.99),
                onDismiss: { showTapToPay = false }
            )
        }
    }
}
```

{% endcode %}

#### UIKit (manual hosting)

Use this only if you need to host `TapToPayRootView` inside a UIKit screen yourself.

{% code title="ManualTapToPayPresenter.swift" overflow="wrap" lineNumbers="true" %}

```swift
func presentTapToPayManual(amount: Double) {
    let view = TapToPayRootView(
        paymentInfo: PaymentInfo(amount: amount),
        onDismiss: { self.dismiss(animated: true) }
    )

    let hosting = UIHostingController(rootView: view)
    hosting.modalPresentationStyle = .fullScreen
    present(hosting, animated: true)
}
```

{% endcode %}

### Tap to Pay on iPhone process flow

{% stepper %}
{% step %}

#### Verify device support

The SDK checks:

* Device compatibility
* NFC availability
* Passcode status

{% hint style="warning" %}
The flow stops if the device does not meet Apple requirements.
{% endhint %}
{% endstep %}

{% step %}

#### Initialize Tap to Pay session

The SDK requests a session token from backend services. This token is used to initialize the Apple Proximity Reader session.
{% endstep %}

{% step %}

#### Link merchant account

If the merchant has not accepted Apple Terms:

* The SDK displays the terms sheet
* The user reviews and accepts

Returning users skip this step.
{% endstep %}

{% step %}

#### Prepare the reader session

The SDK:

* Initializes the proximity reader
* Prepares the device to accept a contactless payment
  {% endstep %}

{% step %}

#### Read the contactless card

The SDK:

* Prompts the user to hold a card near the iPhone
* Displays Apple’s native card read interface
* Captures encrypted card data
  {% endstep %}

{% step %}

#### Process the payment

The SDK:

* Tokenizes the encrypted card data
* Sends the payment request to backend services
* Processes the transaction securely
  {% endstep %}

{% step %}

#### Show the result

The SDK displays:

* **Success screen** for approved transactions
* **Error screen** with a retry option for failures
  {% endstep %}

{% step %}

#### Run optional post-payment steps

Depending on your configuration:

* Signature capture
* E-mail receipt collection
  {% endstep %}
  {% endstepper %}

### Screens

Tap to Pay includes the following screens:

1. Landing screen
2. Enable Tap to Pay
3. Card read screen
4. Processing screen
5. Success or error screen
6. Signature screen
7. Receipt screen

#### User actions

<table><thead><tr><th width="194.33331298828125" valign="top">Screen</th><th valign="top">When shown</th><th valign="top">User action</th></tr></thead><tbody><tr><td valign="top">Landing</td><td valign="top">First-time setup</td><td valign="top">Review the information, then tap <strong>Enable Tap to Pay on iPhone</strong> to continue.</td></tr><tr><td valign="top">Loading</td><td valign="top">During setup and card read</td><td valign="top">Hold the contactless card or device near the iPhone until the read completes.</td></tr><tr><td valign="top">Authorizing</td><td valign="top">After card read</td><td valign="top">Wait while the payment is processed.</td></tr><tr><td valign="top">Success</td><td valign="top">Payment approved</td><td valign="top">Review the transaction details, then tap <strong>Done</strong>.</td></tr><tr><td valign="top">Error</td><td valign="top">Payment fails or is interrupted</td><td valign="top">Review the error message, then choose <strong>Retry</strong> or <strong>Cancel</strong>.</td></tr><tr><td valign="top">Signature</td><td valign="top">After a successful payment, if enabled</td><td valign="top">Ask the customer to sign on the screen, then confirm.</td></tr></tbody></table>

{% hint style="info" %}
Returning users skip the setup screens and go directly to payment.
{% endhint %}

### Error handling

#### Card reader errors

Examples:

* NFC disabled
* Card removed too early
* Reader busy

The SDK displays a system alert with these buttons:

* Select **Retry** <i class="fa-arrow-right">:arrow-right:</i> to retry the payment.
* Select **Cancel** <i class="fa-arrow-right">:arrow-right:</i> to exit the flow.

#### Transaction errors

Examples:

* Network failure
* Invalid token
* Payment declined

The SDK shows an error screen with retry options.

#### Common failure causes

<table><thead><tr><th width="224.99993896484375" valign="top">Issue</th><th valign="top">What the user sees on the device</th><th valign="top">Cause</th></tr></thead><tbody><tr><td valign="top">Unsupported device</td><td valign="top">A message indicating that Tap to Pay is not available on this device. The payment option may be disabled or hidden.</td><td valign="top">The device is a Simulator or an iPhone model that does not support Tap to Pay.</td></tr><tr><td valign="top">Passcode disabled</td><td valign="top">A prompt asking the user to enable a device passcode before continuing.</td><td valign="top">The device does not have a passcode set, which is required for security.</td></tr><tr><td valign="top">NFC disabled</td><td valign="top">A message asking the user to enable NFC or bring the device closer, but payment does not start.</td><td valign="top">NFC is turned off or not functioning in device settings.</td></tr><tr><td valign="top">Account linking cancelled</td><td valign="top">The Tap to Pay setup screen closes or shows a message indicating setup was not completed.</td><td valign="top">The user declined Apple Terms and Conditions during account linking.</td></tr><tr><td valign="top">Network error</td><td valign="top">A message indicating that the connection failed or the payment could not be processed.</td><td valign="top">The device has no internet connection or unstable network connectivity.</td></tr><tr><td valign="top">Payment declined</td><td valign="top">A message stating that the payment was declined, with an option to try again or use a different payment method.</td><td valign="top">The card issuer rejected the transaction (for example, insufficient funds or security checks).</td></tr></tbody></table>

### API reference

<table><thead><tr><th width="297.66668701171875">API</th><th width="191">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>verifyTapToPayDeviceSupport()</code></td><td>Method</td><td>Runs a device compatibility check.</td></tr><tr><td><code>isTapToPaySupported</code></td><td>Property</td><td>Returns a quick support check.</td></tr><tr><td><code>tapToPayViewController</code></td><td>Method</td><td>Launches the UIKit payment flow.</td></tr><tr><td><code>TapToPayRootView</code></td><td>View</td><td>Launches the SwiftUI payment flow.</td></tr><tr><td><code>TapToPayDeviceSupportResult</code></td><td>Struct</td><td>Contains support status and an optional error message.</td></tr><tr><td><code>TapToPayFlowManager.state</code></td><td>Enum</td><td>Represents the current payment state.</td></tr></tbody></table>

### Related topics

* See [Payment Processing](/getting-started/getting-started/our-products/payment-processing) to compare Xplor Pay payment integrations.
* See [iOS SDK](/guides/mobile-emv/ios-framework) for framework requirements and lower-level SDK details.
* See [Proximity Reader | Apple Developer Documentation](https://developer.apple.com/documentation/proximityreader) for Apple developer requirements.
* See [Mobile EMV SDK](/getting-started/getting-started/our-products/payment-processing/mobile-emv-sdk) for in-person payments using a Bluetooth card reader.


# Financial Management

Financial management is how you price, bill, fund, and reconcile payments on Xplor Pay.

Use it to control fees, automate payouts, and close the books faster.

### Pick a Financial Workflow

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Merchant Pricing</strong></td><td>Define your fee model and apply it across merchants.</td><td><a href="/pages/b8ac6c91003e7d4bc28bfad428b504c015105a50">Learn more</a></td></tr><tr><td><strong>Merchant Billing &#x26; Funding</strong></td><td>Fee calculation + payout schedules.</td><td><a href="/pages/ZYzpv1ER54nPQxiqABnK">Learn more</a></td></tr><tr><td><strong>Financial Reporting</strong></td><td>Statements, tax forms, and reconciliation exports.</td><td><a href="/pages/DnQNtTpN1qbTZ5777X8J">Learn more</a></td></tr><tr><td><strong>Disputes Management</strong></td><td>Chargebacks: track cases and submit evidence.</td><td><a href="/pages/69bd4efb2cf58385e300c62389be8e215571ba81">Learn more</a></td></tr></tbody></table>

{% hint style="info" %}
Rule of thumb:

* Setting up a new program: start with **Merchant Pricing**.
* Paying merchants: go to **Merchant Billing & Funding** next.
* Reconciling and month-end close: use **Financial Reporting**.
* Handling chargebacks: use **Disputes Management**.
  {% endhint %}

{% hint style="warning" %}
Funding and fee behavior is configuration-driven. Configure merchant pricing, billing cadence, and payout timing before onboarding merchants or accepting payments.
{% endhint %}

### Comparison Matrix

| Need                                     | Use                                                                                                                           | What you get                                               |
| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| Standardize fees across a portfolio      | [Merchant Pricing](/getting-started/getting-started/our-products/financial-management/merchant-pricing)                       | Pricing templates and merchant-level fee configuration     |
| Automate fee collection and payouts      | [Merchant Billing & Funding](/getting-started/getting-started/our-products/financial-management/merchant-billing-and-funding) | Fee calculation, billing cycles, and ACH funding schedules |
| Reconcile payouts to processing activity | [Financial Reporting](/getting-started/getting-started/our-products/financial-management/financial-reporting)                 | Statements, summaries, tax documents, and exports          |
| Reduce chargeback impact                 | [Disputes Management](/getting-started/getting-started/our-products/financial-management/disputes-management)                 | Case tracking, evidence submission, and outcomes           |

### Typical Lifecycle

{% stepper %}
{% step %}

#### **Configure pricing.**

Pick a fee model and assign it to merchants.
{% endstep %}

{% step %}

#### **Set billing and funding rules.**

Choose fee cadence and payout schedule.
{% endstep %}

{% step %}

#### **Run settlement and payouts.**

Funds move to the merchant via ACH.
{% endstep %}

{% step %}

#### **Reconcile.**

Use statements and exports to tie transactions to deposits.
{% endstep %}

{% step %}

#### **Manage exceptions.**

Handle adjustments, returns, and disputes.
{% endstep %}
{% endstepper %}

### Requirements

* An approved merchant account on Xplor Pay.
* Access to the Partner Portal and/or Merchant Portal.
* Merchant bank details for ACH payouts.
* If integrating: API credentials for reporting.
* PDF viewer for statements and tax forms.

### Next step

If you haven’t onboarded merchants yet, start with [Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding).

If you’re still wiring up transactions, go to [Payment Processing](/getting-started/getting-started/our-products/payment-processing).

For operational exports (transactions, settlements, etc.), see [Reporting](/getting-started/getting-started/our-products/reporting-solutions/reporting).

### Need help?

{% hint style="success" %}
Tell us your billing cadence and payout goals. We’ll recommend a setup that reconciles cleanly.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Merchant Pricing

This page provides an overview of Xplor Pay’s Merchant Pricing solution, which enables software partners to configure, manage, and apply transaction fee structures for merchant accounts.

### About Merchant Pricing

Merchant Pricing enables software partners to define, configure, and manage transaction fee structures for their merchant accounts. It provides a template-based system for creating consistent pricing policies while maintaining granular control over individual merchant fee schedules.

### Business challenges addressed

Merchant Pricing helps partners manage complex fee structures across large merchant portfolios by:

* Standardizing pricing policies while supporting merchant-specific exceptions.
* Preventing unauthorized pricing changes through permission-based controls.
* Reducing pricing errors and revenue leakage.
* Simplifying pricing setup during merchant onboarding.

### Key capabilities

* Define and maintain pricing standards using master templates.
* Create reusable pricing templates with specific fee policies (for example, minimum transaction fees).
* Configure merchant pricing plans with start and end dates.
* Set fees as either percentage-based rates or fixed amounts.
* Apply pricing templates across multiple merchants for consistency.

### Use cases

{% stepper %}
{% step %}

#### **Default pricing**

A default pricing configuration automatically applies the pricing plan assigned to the partner hierarchy. This approach requires no additional configuration and supports fast, low-touch merchant onboarding.
{% endstep %}

{% step %}

#### **Custom pricing**

Custom pricing allows integrators to tailor rates and fees for individual merchants. This option provides flexibility when merchants require flexible pricing.

You can implement custom pricing by:

* Modifying fee values in an existing pricing template, or
* Creating a fully customized pricing plan based on retrieved templates
  {% endstep %}

{% step %}

#### **Empower pricing**

Empower Pricing allows merchants to recover eligible credit card processing costs by passing compliant fees to customers. The system supports multiple pricing models based on merchant type, location, and accepted card brands.

Supported pricing models include:

* Cash Discount (Dual Pricing) – Offers a discount for cash, check, or store-branded gift card payments.
* Surcharging – Applies a fee to credit card transactions to recover processing costs.
* Convenience Fees – Charges fees for alternative payment channels, such as online or phone payments.
* Service Fees – Applies fees for eligible industries based on Merchant Category Code (MCC).
  {% endstep %}
  {% endstepper %}

### Architecture and Components

The Merchant Pricing structure follows a four-tier hierarchy:

{% stepper %}
{% step %}

#### **Master template.**

Defines pricing structure rules and prevents conflicting pricing models.
{% endstep %}

{% step %}

#### **Pricing template.**

Sets partner-level fee policies applied across merchants.
{% endstep %}

{% step %}

#### **Pricing plan.**

Assigns pricing to individual merchants with an active fee schedule and validity period.
{% endstep %}

{% step %}

#### **Pricing fees.**

Defines individual fees as percentage rates or fixed amounts.
{% endstep %}
{% endstepper %}

### Technical requirements

To configure merchant pricing, you need:

* Access to one of three configuration interfaces:
  * Hosted Merchant Onboarding for pricing setup
  * Partner Portal for manual pricing configuration
  * Merchant Onboarding API for programmatic pricing setup and management
* Understanding Pricing Types (Default, Custom, Empower)
* Basic understanding of payment processing fee structures (for example, interchange)

### Related topics

* To understand how fees are calculated and deducted, see [Merchant Billing and Funding](/getting-started/getting-started/our-products/financial-management/merchant-billing-and-funding).
* To learn how to set up pricing, see configure merchant [Pricing Plans](https://docs.xplorpay.com/api-reference/api/merchant-onboarding/onboard-merchant/pricing-plan-and-reference/pricing-plans).
* For API details, see [Pricing Plan and Reference API](https://docs.xplorpay.com/api-reference/api/merchant-onboarding/onboard-merchant/pricing-plan-and-reference).


# Merchant Billing & Funding

This page provides an overview of Xplor Pay’s Merchant Billing and Funding options. These settings control when fees are deducted and when merchants receive payouts.

### About Merchant Billing and Funding

Billing calculates and deducts processing fees based on a merchant’s transactions. Funding (payout) settles card activity and transfers funds to the merchant’s bank account via ACH.

### Business challenges addressed

Merchant billing and funding help you:

* Support predictable cash flow for merchants.
* Reduce reconciliation effort by standardizing when fees are deducted.
* Provide flexible payout timing based on business needs.
* Improve visibility into net payouts and billed fees.

### Key capabilities

* Bill fees daily or monthly.
* Fund merchants on a next-day or two-day schedule.
* Submit batches before a nightly cutoff for timely settlement.
* Net fees from payouts (daily billing) or bill later (monthly billing).

### Billing Options

Billing controls when fees are deducted.

* **Daily billing.** Fees are deducted each day from processed activity.
* **Monthly billing.** Fees accumulate through the month and are billed at month-end.

### Funding (Payout) Options

Funding controls how quickly settled funds are paid out via ACH.

* **Next-day (early) funding.** Transactions settle on the next business day.
* **Two-day (standard) funding.** Transactions settle within two business days.

### Batch Cutoff Time

ACH transfers are processed overnight. Xplor Pay submits batches before the nightly cutoff to support the selected funding schedule.

{% hint style="warning" %}
To qualify for next-day funding, submit transactions by **11:00 p.m. Eastern Time**.
{% endhint %}

### Use cases

{% stepper %}
{% step %}

#### **Daily billing**

Fees are netted from payouts as transactions are processed.

<figure><img src="/files/n4HQy8eR0PmMx7QKHMrk" alt="" width="563"><figcaption></figcaption></figure>

A merchant processes **$100.00** in sales. Total fees for the day are **$3.00**. The merchant receives **$97.00** in the next payout, based on the funding schedule.
{% endstep %}

{% step %}

#### **Monthly billing**

Payouts are funded in full during the month. Fees are billed at month-end.

<figure><img src="/files/ig6V32tD3SpRZfyJHcVu" alt="" width="563"><figcaption></figcaption></figure>

A merchant processes **$100.00** in sales. The full **$100.00** is paid out based on the funding schedule. The **$3.00** fee is deducted at the end of the month.
{% endstep %}
{% endstepper %}

### Technical Requirements

To manage billing and funding, you need

* Active Xplor Pay merchant account.
* A verified bank account for ACH payouts.
* Batches submitted before the cutoff time for next-day funding.

## Related topics

To manage billing, payout, and tax details, see [Financial Reporting](/getting-started/getting-started/our-products/financial-management/financial-reporting).


# Financial Reporting

This page provides an overview of Xplor Pay’s Financial Reporting options. These reports help merchants and partners reconcile activity and support tax reporting.

### About Financial Reporting

Financial Reporting provides statements, summaries, and tax forms based on processed transactions. It also surfaces billing and funding (payout) details needed for month-end close.

### Business challenges addressed

Financial Reporting helps you:

* Reconcile transactions, fees, and net deposits.
* Reduce manual reporting and spreadsheet work.
* Support annual tax reporting with standardized summaries and forms.
* Improve audit readiness with consistent monthly and annual documentation.

### Key capabilities

* Publish monthly statements with transaction and fee detail.
* Provide annual summaries for year-end reporting.
* Generate and distribute 1099-K tax forms.
* Access reporting through portals, PDF exports, or APIs.

### Report types and delivery

{% stepper %}
{% step %}

#### **Monthly statements**

Merchants receive a monthly statement that summarizes transactions, fees, and adjustments for the statement period.

Statements are typically available during the **first week of each month**.
{% endstep %}

{% step %}

#### **Annual summaries**

Annual summaries provide a year-to-date breakdown of financial activity to support tax prep and internal reporting.

Supported summary types include:

* **Annual activity summary**
* **Taxpayer activity summary**
  {% endstep %}

{% step %}

#### **Tax forms (1099-K)**

Billing and transaction data is converted into tax documents, including **Form 1099-K**, which is sent to both the IRS and merchants.

* **IRS submission:** Filed with the IRS to support reported income verification.
* **Merchant copies:** A PDF copy is delivered for record keeping.
* **Submission deadline:** **January 31** each year.
* **Federal e-file:** By **March 31**, a digital version is uploaded to the IRS system.

For more details, see [Understanding Your Form 1099-K](https://clearent.com/insights/understanding-form-1099-k/).
{% endstep %}
{% endstepper %}

### Access methods

You can access billing, funding (payout), and tax reporting details through:

* [Partner Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/partner-portal)
* [Merchant Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/merchant-portal)
* [API integrations](/api-reference/api/reporting) (if applicable)
* PDFs (tax forms)

For statement help, see [Understanding Your Monthly Statement](https://support.clearent.com/knowledge-base/understanding-your-monthly-statement/).

### Technical requirements

To manage financial reportings, you need:

* Active Xplor Pay merchant account.
* Access to at least one reporting interface:
  * Partner Portal
  * Merchant Portal
  * API access (if your integration supports it)

### Related topics

* For timing and fee deduction mechanics, see [Merchant Billing & Funding](/getting-started/getting-started/our-products/financial-management/merchant-billing-and-funding).
* For broader report access across your portfolio, see [Reporting](/getting-started/getting-started/our-products/reporting-solutions/reporting).
* For fee configuration that impacts billing, see [Merchant Pricing](/getting-started/getting-started/our-products/financial-management/merchant-pricing).


# Disputes Management

This page provides an overview of Xplor Pay’s Disputes solution, which enables merchants and software partners to track, manage, and respond to payment disputes and chargebacks through the Merchant Portal or Disputes API.

### About Disputes

Xplor Pay’s Disputes Management, also known as chargebacks, occurs when a cardholder questions a transaction with their issuing bank. The bank investigates the claim and may reverse the transaction if the dispute is valid. The Disputes solution helps merchants track, manage, and respond to disputes efficiently.

### Business challenges addressed

Disputes address the following business challenges:

* Revenue loss from chargebacks and compliance risks.
* Limited visibility into dispute status.
* Manual and time-consuming dispute management.
* Inconsistent or incomplete evidence submission.

### Key capabilities

The Disputes solution provides the following capabilities:

* View and manage disputes and chargebacks through the Merchant Portal or Disputes API.
* Receive email notifications when new disputes are created.
* Upload supporting evidence to challenge chargebacks to accept or reject the disputes.

### Use cases

Disputes is designed for the following scenarios:

* Track dispute activity
* Respond to chargebacks
* Reduce financial and reputational risk

### Disputes process flow

{% stepper %}
{% step %}

#### **Dispute initiation**

A dispute starts when a cardholder questions a transaction with their issuing bank due to reasons such as fraud, unrecognized charges, or service issues.
{% endstep %}

{% step %}

#### **Case notification**

The issuing bank notifies Xplor, and a dispute case is created. Xplor notifies the merchant by e-mail, and the case appears in the Merchant Portal or through the Disputes API with a *New Activity* status.
{% endstep %}

{% step %}

#### **Chargeback (If applicable)**

If the dispute escalates, the issuing bank reverses the transaction amount and temporarily credits the cardholder. The disputed amount is withdrawn from the merchant, and processing fees may apply.
{% endstep %}

{% step %}

#### **Merchant response**

The merchant reviews the case and either:

* Accepts the dispute, finalizing the chargeback, or
* Challenges the dispute by submitting supporting evidence within the required timeframe.
  {% endstep %}

{% step %}

#### **Issuer decision and escalation**

The issuing bank reviews the evidence and either returns the funds to the merchant or finalizes the chargeback in favor of the cardholder. If challenged further, the dispute may move to Pre-Arbitration or Arbitration, where the card network makes a final, binding decision and may apply additional fees.
{% endstep %}
{% endstepper %}

### Technical requirements

To manage disputes, you need:

* Active Xplor Pay account.
* An API access key.
* Access to the Merchant Portal.

## Related topics

* To manage and challenge Dispute, see [Disputes](https://docs.xplorpay.com/api-reference/api/disputes).
* For API details, see the [Disputes API](https://docs.xplorpay.com/api-reference/api/disputes/disputes-management).


# Reporting Solutions

Operational and financial visibility across your portfolio. Pick the option based on how much automation you need and who will consume the data.

### Pick a Reporting Option

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Reporting API</strong></td><td>Most automation. Pull report data into your systems.</td><td><p></p><p><a href="/spaces/j9heLdoDRsfnChUQohvj/pages/gc3X2wHXftsasfDb19Ai">Learn more</a></p></td></tr><tr><td><strong>Partner Portal (view and export)</strong></td><td>No build. View reports in the portal and export to CSV or Excel.</td><td><a href="/spaces/ek5aF2vccbKrklw8djdB/pages/cfdafc08272ac56a5ba730402d0302912eecf613">Learn more</a></td></tr></tbody></table>

{% hint style="info" %}
Rule of thumb:

* Need automated ingestion (BI, data warehouse, scheduled pulls): use the **Reporting API**.
* Need ad-hoc reporting with downloads: use **Partner Portal**.
  {% endhint %}

### Comparison matrix

| Criteria               | [Reporting API](/api-reference/api/reporting)                    | [Partner Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/partner-portal) |
| ---------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Primary goal**       | Programmatic access to report data.                              | View reports and export files.                                                                                |
| **Best for**           | Engineering + data teams building automated reporting pipelines. | Ops, finance, and support teams needing self-serve access.                                                    |
| **Integration effort** | Medium to high (API integration).                                | None (portal access).                                                                                         |
| **Automation**         | High (schedule jobs, sync into internal tools).                  | Low (manual view/export).                                                                                     |
| **Output**             | API responses for direct processing.                             | CSV and Excel exports.                                                                                        |
| **Access control**     | API keys and integration controls.                               | Role-based access in the portal.                                                                              |

### Next step

* Using the [**Reporting API**](https://docs.xplorpay.com/api-reference/api/reporting): retrieve report data into your system.
* Using [**Partner Portal**](https://docs.xplorpay.com/partner-portal/partner-portal/guides/reporting/retrieving-report-via-partner-portal): open the reports area and export what you need.

### Need help?

{% hint style="success" %}
Tell us what reports you need and how often you need them.

We’ll recommend the cleanest Reporting API vs. Partner Portal setup for your workflow.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Reporting

This page provides an overview of Xplor Pay’s Reporting solution, which enables software partners to access merchant, transaction, funding, pricing, disputes, and portfolio data. Reporting helps you gain visibility into merchant activity, analyze performance, and support operational and business decision making.

### About Reporting

The Xplor Pay’s Reporting solution provides access to both standard and enhanced reports that cover a wide range of merchant and portfolio activities. You can retrieve reports using the Reporting API or generate and download reports through the Partner Portal.

Standard reports deliver commonly used operational data, while enhanced reports provide deeper insights into funding, billing, compliance, disputes, residuals, and portfolio performance. Together, these reporting options help you monitor activity, identify trends, and manage merchants at scale.

### Business challenges addressed

Reporting addresses the following business challenges:

* Provides centralized access to merchant, transaction, funding, and lifecycle data to improve operational awareness.
* Replaces manual report gathering with automated API access and downloadable reports.

### Key capabilities

Reporting enables you to:

* Access merchant, transaction, funding, pricing, dispute, and portfolio data.
* Retrieve reports through APIs for system-to-system integrations.
* Generate and download reports through the Partner Portal in Excel or CSV format.
* Analyze data across individual merchants or entire portfolios.
* Subscribe to the reports for recurring access.

### Use cases

Reporting is designed for the following scenarios:

* Monitoring merchant onboarding, lifecycle status, and compliance.
* Tracking transaction activity, settlements, and funding events.

### Reporting process flow

{% stepper %}
{% step %}

#### **Select the report.**

Identify the required standard or enhanced report based on your business need, such as transactions, funding, pricing, disputes, or merchant activity.
{% endstep %}

{% step %}

#### **Select the access method.**

Retrieve the report using the Reporting API for automated integrations or generate the report through the Partner Portal.
{% endstep %}

{% step %}

#### **Retrieve report data.**

The system returns the requested report data through the API response or generates a downloadable report file in the Partner Portal.
{% endstep %}

{% step %}

#### **Download the report.**

Download enhanced reports in Excel or CSV format or process API response directly within your reporting or analytics system.
{% endstep %}

{% step %}

#### **Monitor and analyze results.**

Use the report data to track performance, identify trends, reconcile activity, and support operational or business decisions.
{% endstep %}
{% endstepper %}

### Technical requirements

To manage reports, you need:

* Active Xplor Pay account.
* Xplor Pay API access.

## Related topics

* To retrieve the reports quickly, see [Reporting quick start](https://docs.xplorpay.com/quick-starts/reporting).
* For API details, see the [Reporting API](/api-reference/api/reporting).


# Partner & Merchant Solutions

Partner & merchant solutions are the portals used to run payments day to day.

Use them to manage merchant portfolios, transactions, payouts, reporting, and support.

### Pick a Portal

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Partner Portal</strong></td><td>Portfolio ops: onboarding, merchants, reporting, support.</td><td><a href="/pages/cfdafc08272ac56a5ba730402d0302912eecf613">Learn more</a></td></tr><tr><td><strong>Merchant Portal</strong></td><td>Merchant self-serve: transactions, refunds, payouts, statements.</td><td><a href="/pages/34cbe44c2833380d262429b39b41f5c3a7b13fc2">Learn more</a></td></tr></tbody></table>

{% hint style="info" %}
Rule of thumb:

* Need to run onboarding and manage a portfolio: use **Partner Portal**.
* Need merchant self-serve for daily operations: use **Merchant Portal**.
* Need both: set up Partner Portal first, then provide Merchant Portal access.
  {% endhint %}

{% hint style="warning" %}
Access is controlled by roles.

If you can’t see a feature, it’s usually RBAC or account provisioning.
{% endhint %}

### Comparison matrix

| Criteria                   | [Partner Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/partner-portal) | [Merchant Portal](/getting-started/getting-started/our-products/partner-and-merchant-solutions/merchant-portal) |
| -------------------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Primary user**           | Partner ops, support, finance, platform admins                                                                | Merchant owners, store managers, finance, support                                                               |
| **Best for**               | Managing many merchants at scale                                                                              | Managing a single business day to day                                                                           |
| **Onboarding + portfolio** | Applications, merchant search/filtering, portfolio dashboards                                                 | Limited (merchant-level only)                                                                                   |
| **Transactions**           | Portfolio visibility (merchant-specific actions vary by role)                                                 | Search, export, refunds/voids (role-based)                                                                      |
| **Payouts / settlements**  | Portfolio reporting and operational oversight                                                                 | Payout schedule, settlement reports, bank settings (role-based)                                                 |
| **Reporting**              | Multi-merchant reports, exports, subscriptions                                                                | Merchant analytics and statements (merchant-level)                                                              |
| **Support**                | Create and track tickets for partners and merchants                                                           | Merchant-facing support entry points (if enabled)                                                               |

### Next step

If you’re just getting started, begin with [Merchant Onboarding](/getting-started/getting-started/our-products/merchant-onboarding).

Once merchants are approved, move on to [Payment Processing](/getting-started/getting-started/our-products/payment-processing).

### Need help?

{% hint style="success" %}
Tell us who your users are (partner ops vs merchants) and what they need to do.

We’ll recommend the cleanest portal + API mix for your workflow.

<a href="https://xplorpay.com/getting-started/" class="button primary">Get in touch</a>
{% endhint %}


# Partner Portal

This page provides an overview of Xplor Pay’s Partner Portal. It explains how to manage tools, insights, and settings for your business’s payment operations.

### About Partner Portal

The Partner Portal is a responsive, web-based application that helps you manage onboarding, merchant portfolios, reporting, and support from a single place. The layout is simple and consistent across pages, making it easy to find and use key features. Role-based access control (RBAC) ensures you see only what you need, improving both usability and security. Multi-factor authentication (MFA) adds an extra layer of protection.

### Business challenge addressed

A unified, reliable way to onboard merchants, track portfolio performance, analyze revenue and risk, and coordinate support—without switching tools or re-entering data. The Partner Portal addresses this by providing:

* A centralized, intuitive experience for daily tasks.
* Streamlined onboarding and equipment management.
* End-to-end visibility across applications, merchants, and reports.
* Secure access with RBAC and MFA.
* Time-saving automation through report subscriptions and integrated support.

### Key capabilities

* Responsive, consistent UI: Streamlined design, clear icons, and a uniform layout across pages for intuitive navigation on desktop, tablet, and mobile.
* Dark mode: A comfortable, low-light option that reduces eye strain without limiting functionality.
* Updated navigation header: Clearly labeled sections and an intuitive menu structure to reach key features quickly.
* Role-based access control (RBAC): Limits access to relevant features based on user roles.
* Multi-factor authentication (MFA): Adds an extra layer of account protection.

### Core interfaces

{% stepper %}
{% step %}

#### **Landing page**

A centralized starting point with interactive dashboards for key business metrics:

* Comprehensive dashboard: Visualizes transaction volume, revenue, merchant status, and new registrations.
* Quick navigation and filtering: Jump to Applications, Merchants, Reports, and Support. Filter performance by year and quarter.
* Merchant and revenue insights: View top accounts by residual revenue and track activations vs. applications.
  {% endstep %}

{% step %}

#### **Applications page**

Manage new and existing merchant applications through structured, guided workflows:

* Boarding UI: Step-by-step onboarding (Hierarchy, Business Information, Profile Details, Pricing, and more) to ensure accurate data capture and smooth activation.
* Equipment UI: Onboard and manage devices (for example, card readers and payment terminals) and track allocation through the onboarding process.
* Application summary: See progress and key details at a glance, including merchant information, status, and pending actions.
  {% endstep %}

{% step %}

#### **Merchants page**

Monitor and manage your merchant portfolio:

* Search and filter: Find merchants by status, category, or other criteria.
* Seamless portal access: Move between the Partner Portal and Merchant Portal without re-authentication.
* Portfolio overview: Track performance, status, and activity across the portfolio.
  {% endstep %}

{% step %}

#### **Reports page**

Analyze activity, earnings, and risk with flexible reporting:

* Detailed reports: Access billing, chargebacks, earnings, sales, and other report types.
* Filters and customization: Apply date ranges and other filters; select specific data points to focus analysis.
* Export options: Download reports as Excel (.xlsx) or CSV for offline analysis.
  {% endstep %}

{% step %}

#### **Report subscriptions**

Automate report delivery to stay informed:

* Self-service setup: Create subscriptions for daily, weekly, or monthly delivery.
* Automatic delivery: Receive an e-mail with a download link when each report is generated.
* Customizable frequency: Choose delivery cadence to match your needs.
  {% endstep %}

{% step %}

#### **Support page**

Submit and track support requests directly in the portal:

* Web-based support form: Guided submission with required fields to speed resolution.
* Partner and merchant support: Open tickets for your business or on behalf of a merchant.
* Dynamic form: Fields adapt to the request type to capture the right information.
* Automated routing: Requests go to the appropriate Support team for faster handling.
  {% endstep %}

{% step %}

#### **Dashboards**

Make data-driven decisions with interactive visuals:

* Centralized metrics: Monitor performance and trends across key business areas.
* Structured, interactive design: Explore data for deeper insights.
  {% endstep %}
  {% endstepper %}

### Technical requirements

To access the Partner Portal, you need an active Xplaor Pay account with the appropriate role (RBAC governs access).

### Related topics

To get started with the Partner Portal, see [Partner Portal](/partner-portal).


# Merchant Portal

This page provides an overview of Xplor Pay’s Merchant Portal. It explains how to manage tools, insights, and settings for your business’s payment operations.

### About Merchant Portal

The Merchant Portal provides a secure, centralized interface to manage transactions, view analytics, configure payment settings, and access support. It helps you reduce manual tasks and manage payment operations efficiently.

### Key capabilities

Merchant Portal provides the following core capabilities:

{% stepper %}
{% step %}

#### **Account and transaction management**

* Manage accounts and transactions independently.
* Search, filter, and export transaction data.
* View transaction details, status, and history.
* Initiate refunds or voids.

{% hint style="info" %}
Latency requirement: Actions such as issuing a refund, voiding a transaction, or sending a receipt should occur in near real time (1 second or less) and be reflected immediately after a successful API call.
{% endhint %}
{% endstep %}

{% step %}

#### **Real-time insights**

* Access real-time payment activity and performance metrics.
* Use customizable widgets for KPIs (e.g., daily volume, top payment methods).
  {% endstep %}

{% step %}

#### **Compliance and localization**

* Support global compliance requirements.
* Configure currency and localization settings.
  {% endstep %}

{% step %}

#### **Payouts and settlements**

* View payout schedules and history.
* Download settlement reports.
* Configure bank accounts for payouts.
  {% endstep %}

{% step %}

#### **Payment configuration**

* Enable or disable payment methods (e.g., cards).
  {% endstep %}

{% step %}

#### **User management**

* Role-based access control (Admin, Finance, Support).
* Invite and manage team members.

{% hint style="info" %}
Latency requirement: Changes such as adding a user or updating permissions should reflect in near real time (1 second or less).
{% endhint %}
{% endstep %}

{% step %}

#### **Support and documentation**

* Access integrated help center with guides and FAQs.
* Submit tickets or use live chat (if available).
* View real-time system status updates.
  {% endstep %}

{% step %}

#### **Notifications and alerts**

* Receive e-mail and in-portal alerts for key events (for example, failed payouts and chargebacks).
* Configure notification preferences.
  {% endstep %}
  {% endstepper %}

### Requirements

To access the Merchant Portal, you need an active Xplaor Pay account with the appropriate role (RBAC governs access).

### Related topics

To start with the Merchant Portal, see [Merchant Portal](https://docs.xplorpay.com/merchant-portal/).


# Integration Process

Integrating with our platform is a structured, phased journey designed to ensure a seamless experience from planning to production launch. The process is divided into four key phases, each focused on guiding you through specific integration aspects with the support of our dedicated teams.

## Integration Journey

<figure><img src="/files/BgOjV29r3HmuDjKFJOs4" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
By following this structured integration process, you benefit from expert guidance, thorough testing, and comprehensive support at every step. This approach minimizes risks and streamlines your transition, allowing you to quickly go live and start confidently onboarding merchants and processing payments.
{% endhint %}

<details>

<summary><strong>Phase 1: Discovery</strong></summary>

The Discovery phase is about laying the foundation for a successful integration by understanding your business needs and defining a tailored plan.

* **Requirements Gathering**\
  Our Solutions Engineering (SE) team collaborates closely with you to gather critical details about your business, including its size, type, and unique payment processing needs. This consultation helps us recommend the best-suited set of integrated solutions to meet your specific requirements.
* **Payment Processing Design (PPD)**\
  Once the scope of the integration project is agreed upon, the SE team will deliver a comprehensive Payment Processing Design (PPD) document. This document outlines your integration profile, covering business details, technology requirements, existing challenges, and overall project goals. Reviewing the PPD serves as a critical checkpoint before moving forward, minimizing risks and ensuring alignment.

</details>

<details>

<summary><strong>Phase 2: Pre-Integration</strong></summary>

During the Pre-Integration phase, we set up the necessary tools and complete essential checks to prepare you for the integration.

* **Background Check and Underwriting**\
  We conduct a background check and underwriting review to assess your eligibility and compliance. This involves submitting required documents such as a W-9 form and either a voided check or a bank letter (DDA).
* **Project Initiation**\
  A dedicated Project Manager is assigned to guide you through the process, acting as your primary point of contact and connecting you with subject-matter experts.
* **Test Kit Setup**\
  We provide a Sandbox Environment along with any necessary test equipment (e.g., terminals) and create certification test scripts for you. Our team supports your development and testing efforts, answering any questions throughout this phase.

</details>

<details>

<summary><strong>Phase 3: Integration</strong></summary>

The Integration phase focuses on development, testing, and obtaining certification for your payment solution.

* **Integration Support**\
  Our integration support team offers hands-on assistance throughout your testing and certification journey. They work closely with you to resolve issues and ensure your integration is on track for a smooth transition to production.
* **Certification Testing**\
  Before moving to production, your integration must undergo certification testing. This involves the following steps:
  * **Preparation:** We provide guidance, documentation, and knowledge base resources to help you understand the certification requirements.
  * **Self-Testing:** You build your integration and conduct self-testing in the Sandbox environment. You perform various test transactions (e.g., successful payments, authorization declines, refunds, etc.) and document details using Certification Guide.
  * **Certification Validation:** Our team reviews your self-test results and validates the final set of test transactions with you on a shared Teams call. Upon successful validation, you will receive a Certification Letter, granting you access to production credentials and enabling your application to onboard merchants and process payments in the production environment.

</details>

<details>

<summary><strong>Phase 4 - Launch</strong></summary>

The final phase is the transition to production. Once your integration is certified and code-complete, you can smoothly migrate from the Sandbox environment to our live production environment. This step enables you to deploy your integration securely and begin processing real-world payments, ensuring reliability and compliance from day one.

</details>


# Devices

A range of payment terminals are available to support different business environments. Choose from countertop models, PIN pads, mobile terminals, or compact card readers. Each device supports EMV chip, magnetic stripe, and NFC contactless payments for fast and secure transactions. With end-to-end or point-to-point encryption and EMV certification, they ensure compliance and data protection.

## DEJAVOO

### Dejavoo Z Line

<table data-full-width="false"><thead><tr><th width="232" align="center">Device Appearance</th><th width="143" align="center">Model</th><th>Description</th></tr></thead><tbody><tr><td align="center"><img src="/files/F9lEFtCzQ7qCs5O39tRf" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-z6">Z6</a></td><td>Secure and compact PIN pad with advanced security, versatile connectivity, and a user-friendly design for seamless payments.</td></tr><tr><td align="center"><img src="/files/wJ3ABi5g4U4l0IN3Z92v" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-z8">Z8</a></td><td>Countertop terminal providing secure and efficient transactions, ideal for retail, restaurants, and service industries.</td></tr><tr><td align="center"><img src="/files/60ANLbHmXuM3lR9u2aTr" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-z9">Z9</a></td><td>Durable wireless terminal for mobile payments, suitable for retail, hospitality, and mobile services.</td></tr><tr><td align="center"><img src="/files/CAjjK9lblQxHPXVhT0Dh" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#block-449ad1fd-f494-4876-9849-49c1c582cb5a">Z11</a></td><td>Compact countertop terminal with a touchscreen interface.</td></tr></tbody></table>

### Dejavoo QD Line

<table><thead><tr><th width="233" align="center">Device Appearance</th><th width="146" align="center">Model</th><th>Description</th></tr></thead><tbody><tr><td align="center"><img src="/files/f495IZwdeW4ginOrUm45" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-qd2">QD2</a></td><td>Android-based mobile wireless PIN pad for flexible, on-the-go payments.</td></tr><tr><td align="center"><img src="/files/AFzw06UqAg7UbMRub2bN" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-qd4">QD4</a></td><td>Android-based countertop terminal for businesses needing a stationary POS solution.</td></tr><tr><td align="center"><img src="/files/K9AaG0yMwMDZkXFoZ6zr" alt="" data-size="original"></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-qd3">QD3</a></td><td>Standalone wireless Android POS terminal designed for secure and efficient payment processing</td></tr><tr><td align="center"><img src="/files/ZKtXR8baIUeaTzhYuztd" alt=""></td><td align="center"><a href="/pages/4QtsKlpx3Teg9CXcEi60#dejavoo-qd3-pin-pad">QD3 Pin Pad</a></td><td>Compact Android-based mobile PIN pad that connects to the QD4 terminal via USB.</td></tr></tbody></table>

***

## PAX

### PAX A Series

<table><thead><tr><th width="233" align="center">Device Appearance</th><th width="154" align="center">Model</th><th>Description</th></tr></thead><tbody><tr><td align="center"><img src="/files/nXjZWG98bAC6BTfQqL7v" alt=""></td><td align="center"><a href="/pages/p6PFr7hHBWXxAUL4WwIm#pax-a35">A35</a></td><td>High-performance Android Smart PIN pad for various retail scenarios.</td></tr><tr><td align="center"><img src="/files/XCGe4OnUr7pUrjOvnEmg" alt=""></td><td align="center"><a href="/pages/p6PFr7hHBWXxAUL4WwIm#pax-a80">A80</a></td><td>Countertop device that also functions as a portable indoor terminal.</td></tr><tr><td align="center"><img src="/files/tsVL3F60XUYfCCk4OX30" alt=""></td><td align="center"><a href="/pages/p6PFr7hHBWXxAUL4WwIm#pax-a920pro">A920Pro</a></td><td>Mobile touchscreen Android terminal combining an Android tablet with a powerful payment processor.</td></tr></tbody></table>

***

## ID TECH

<table><thead><tr><th width="235" align="center">Device Appearance</th><th width="155" align="center">Model</th><th>Description</th></tr></thead><tbody><tr><td align="center"><img src="/files/qUTLtmbfndTeqPLwnXHL" alt=""></td><td align="center"><a href="/pages/TM1w8iyKDM5x1Mx5Heak#id-tech-vp8300-reader">VP8300</a></td><td>Countertop payment reader supporting EMV chip, magnetic stripe, and NFC contactless payments.</td></tr><tr><td align="center"><img src="/files/0QVlCxjdLFBTP4REjKax" alt=""></td><td align="center"><a href="/pages/TM1w8iyKDM5x1Mx5Heak#id-tech-vp3300-reader">VP3300</a></td><td>Compact, versatile payment reader that accepts multiple payment methods, including Apple Pay and Google Pay.</td></tr></tbody></table>


# Dejavoo

Dejavoo terminals designed for seamless and secure payment acceptance. Our Z Line Series features reliable countertop and PIN pad devices for efficient transactions. The QD Line Series, powered by Android, boasts high-definition touchscreens, robust processors, and versatile connectivity options to enhance the payment experience.

## Dejavoo Z Line

### Dejavoo Z6

<figure><img src="/files/QP8uBIyKzuDEc1zc9cgn" alt=""><figcaption></figcaption></figure>

The Dejavoo Z6 is a secure and efficient PIN pad terminal in the Dejavoo Z Line, designed for seamless payment processing. Its compact design suits various retail environments, while advanced security, versatile connectivity, and a user-friendly interface make it a reliable choice for businesses.

<table><thead><tr><th width="318">Features</th><th width="247">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV chip cards, magnetic stripe cards, and contactless payments</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Ethernet</li><li>USB</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Essential Technical Specification](https://dejavoo.io/products/z-terminals-family/z6/)

***

### Dejavoo Z8

<figure><img src="/files/MM2DZQacnoq3U4pBSUNu" alt=""><figcaption></figcaption></figure>

The Dejavoo Z8 is a compact, countertop payment terminal designed for small to medium-sized businesses. It combines advanced functionality with user-friendly features to streamline payment processing. Ideal for retail, restaurants, and service industries that need fast, secure, and versatile payment processing.

<table><thead><tr><th width="323">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV chip cards, magnetic stripe cards, and contactless payments</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Countertop</li><li>Ethernet</li><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Essential Technical Specification](https://dejavoo.io/products/z-terminals-family/z8-countertop/)

***

### Dejavoo Z9

<figure><img src="/files/e5DdfqZ1nYiADPtDkgTY" alt=""><figcaption></figcaption></figure>

The Dejavoo Z9 is a highly adaptable and durable wireless POS terminal, perfect for mobile payments. Its versatility makes it an excellent choice for a wide range of business environments, including restaurants, retail stores, and mobile services.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV chip cards, magnetic stripe cards, and contactless payments</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Wireless</li><li>Ethernet</li><li>Wi-Fi</li><li>GPR</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [EMV Quick Reference Guide: Retail/Restaurant](https://support.clearent.com/knowledge-base/dejavoo-z-line/)
* [Essential Technical Specification](https://dejavoo.io/products/z-terminals-family/z9/)

***

### Dejavoo Z11 <a href="#block-449ad1fd-f494-4876-9849-49c1c582cb5a" id="block-449ad1fd-f494-4876-9849-49c1c582cb5a"></a>

<figure><img src="/files/yaoKVuvTgWEi48DWfrez" alt=""><figcaption></figcaption></figure>

The Dejavoo Z11 is a compact and advanced countertop touch-screen POS terminal. It is designed to handle a variety of payment methods and is ideal for businesses looking for a reliable and versatile payment solution.

<table><thead><tr><th width="329">Features</th><th width="239">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV chip cards, magnetic stripe cards, and contactless payments</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Countertop</li><li>Ethernet</li><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [EMV Quick Reference Guide: Retail/Restaurant](https://support.clearent.com/knowledge-base/dejavoo-z-line/)
* [Essential Technical Specification](https://dejavoo.io/products/z-terminals-family/z11-countertop/)

***

## Dejavoo QD Line

The QD Line offers Android-based terminals with high-definition touchscreens, robust processors, and versatile connectivity options, ensuring efficient and secure payment processing

### **Dejavoo QD2**

<figure><img src="/files/KNQM8wpir53HVuiPOwC6" alt=""><figcaption></figcaption></figure>

The Dejavoo QD2 is a compact, high-performance Android PIN Pad designed to complement POS terminals for businesses that require secure, customer-facing payment options. Perfect for businesses needing an economical, compact, and secure PIN pad for basic transactions.

<table><thead><tr><th width="341">Features</th><th width="226">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Supports EMV chip cards, magnetic stripe cards, and NFC contactless payments</li><li>Internal PIN Pad and contactless</li><li>Large touch screen</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Wireless</li><li>GPRS</li><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Getting Started with ](https://support.clearent.com/knowledge-base/dejavoo-qd-series/)[the Dejavoo QD Line](https://support.xplorpay.com/knowledge-base/dejavoo-qd-series/)
* [Essential Technical Specification](https://dejavoo.io/products/qd-terminals-family/qd2/)

***

### **Dejavoo QD4**

<figure><img src="/files/jo6nLdimuI4pUfMscgeX" alt=""><figcaption></figcaption></figure>

The Dejavoo QD4 is a countertop Android POS terminal designed to provide secure and efficient payment processing for businesses. The terminal supports multiple connectivity options providing flexibility for various business setups.

<table><thead><tr><th width="341">Features</th><th width="228">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Supports EMV chip cards, magnetic stripe cards, and NFC contactless payments</li><li>Large touch screen</li><li>Supports external PIN Pad (QD3 PIN Pad)</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Ethernet</li><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Getting Started with ](https://support.clearent.com/knowledge-base/dejavoo-qd-series/)[the Dejavoo QD Line](https://support.xplorpay.com/knowledge-base/dejavoo-qd-series/)
* [Essential Technical Specification](https://dejavoo.io/products/qd-terminals-family/qd4/)

***

### **Dejavoo QD3**

<figure><img src="/files/K9AaG0yMwMDZkXFoZ6zr" alt="" width="386"><figcaption></figcaption></figure>

The Dejavoo QD3 is a standalone wireless Android POS terminal designed for secure and efficient payment processing. The terminal supports Wi-Fi connectivity providing a compact and mobile option.

<table><thead><tr><th width="341">Features</th><th width="228">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Supports EMV chip cards, magnetic stripe cards, and NFC contactless payments</li><li>Large touch screen</li><li>Supports external PIN Pad (QD3 PIN Pad)</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Getting Started with the Dejavoo QD Line](https://support.xplorpay.com/knowledge-base/dejavoo-qd-series/)
* [Essential Technical Specification](https://dejavoo.io/products/qd-terminals-family/qd3-android-mobile-pos/)

***

### **Dejavoo QD3** Pin Pad

<figure><img src="/files/lfiJThD8yPWM1hIOWuUR" alt=""><figcaption></figcaption></figure>

The Dejavoo QD3 Pin Pad is a compact Android PIN pad terminal designed for secure and efficient payment processing. It seamlessly integrates with the QD4 terminal via a USB-to-USB (U-U) cable, ensuring a smooth and reliable connection.

<table><thead><tr><th width="329">Features</th><th width="239">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV chip cards, magnetic stripe cards, and NFC contactless payments</li><li>Internal PIN Pad and contactless</li><li>Large touch screen</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with the QD4 terminal via a USB-to-USB (U-U) cable</li></ul></td><td><ul><li>Ethernet</li><li>Wi-Fi</li><li>Bluetooth 4.0</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Essential Technical Specification](https://dejavoo.io/products/qd-terminals-family/qd3-mpos-terminal/)


# PAX

PAX technology provides a range of advanced payment terminals designed to meet diverse business needs. Below is an overview of three notable PAX models of A Series: the A35, A80, and A920Pro.

## PAX A Series

### **PAX A35**

<figure><img src="/files/qlSzzeqwpPm2eyECnsNK" alt="" width="188"><figcaption></figcaption></figure>

The PAX A35 is a high-performance, smart device tailored for various retail scenarios. Its ergonomic design and advanced features make it suitable for high-volume, fast-paced environments.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Smart Android PIN Pad Designed for Multilane Implementations Accepts Contactless, Chip, Magstripe</li><li>Power Over Ethernet (POE)</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Cloud EMV</li><li>Semi-integration to Quest™ Gateway API</li></ul></td><td><ul><li>Ethernet</li><li>WiFi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [PAX A Series Quick Reference Guide for Integrated Devices (PAX A80, PAX A920, & PAX A35)](https://support.clearent.com/knowledge-base/pax-a-series-integrated-qrg/)
* [Essential Technical Specification](https://www.pax.us/products/pin-pads/a35/)

***

### **PAX A80**

<figure><img src="/files/26ymL5cxsPQJMVl30eEP" alt=""><figcaption></figcaption></figure>

The PAX A80 is a reliable countertop device that can also function as an indoor portable terminal. Its robust design and comprehensive features make it a reliable choice for businesses seeking efficiency and security.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Smart Android Terminal Accepts Contactless, Chip, Magstripe</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>Ethernet</li><li>Wi-Fi</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [PAX A Series Quick Reference Guide for Integrated Devices (PAX A80, PAX A920, & PAX A35)](https://support.clearent.com/knowledge-base/pax-a-series-integrated-qrg/)
* [PAX A Series Quick Reference Guide (PAX A920 & PAX A80)](https://support.clearent.com/knowledge-base/pax-a-series-quick-reference-guide/)
* [SwipeSimple PAX A80 Activation Guide](https://support.clearent.com/knowledge-base/swipesimple-pax-a80-activation-guide/)
* [Essential Technical Specification](https://www.pax.us/products/countertop/a80/)

***

### PAX A920Pro

<figure><img src="/files/bEiZk6dUiexcA8elQ2hG" alt=""><figcaption></figcaption></figure>

The PAX A920Pro is a mobile touchscreen Android terminal that combines the features of an Android tablet with a powerful payment terminal. Its sleek and compact design makes it ideal for dynamic retail or hospitality environments.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Smart and Wireless Android Terminal Accepts Contactless, Chip, Magstripe</li><li>Large HD screen</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Compatible with Cloud EMV</li></ul></td><td><ul><li>WiFi</li><li>Wireless </li><li>GPRS</li><li>Bluetooth</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [PAX A Series Quick Reference Guide for Integrated Devices (PAX A80, PAX A920, & PAX A35)](https://support.clearent.com/knowledge-base/pax-a-series-integrated-qrg/)
* [PAX A Series Quick Reference Guide (PAX A920 & PAX A80)](https://support.clearent.com/knowledge-base/pax-a-series-quick-reference-guide/)
* [SwipeSimple PAX A920 Activation Guide](https://support.clearent.com/knowledge-base/swipesimple-a920/)
* [Essential Technical Specification](https://www.pax.us/products/mobile/a920-pro/)


# ID TECH

ID TECH provides versatile and secure payment readers designed for businesses that require reliable, multi-interface transaction solutions. Below is an overview of two ID TECH models: VP8300 and VP3300.

## ID TECH VP8300 READER

<figure><img src="/files/qUTLtmbfndTeqPLwnXHL" alt="" width="225"><figcaption></figcaption></figure>

The ID TECH VP8300 is a secure, all-in-one countertop card reader designed for retail, hospitality, and other merchant environments.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts Contactless, Chip, Magstripe</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Javascript SDK</li><li>Quest™ Mobile Payments API</li></ul></td><td><ul><li>Countertop</li><li>USB</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Quick Reference Guide - ID TECH VP8300](https://support.clearent.com/knowledge-base/id-tech-vp8300-reader/)
* [Essential Technical Specification](https://idtechproducts.com/products/vp8300/)

***

## ID TECH VP3300 READER

<figure><img src="/files/0QVlCxjdLFBTP4REjKax" alt=""><figcaption></figcaption></figure>

The ID TECH VP3300 is a compact, versatile payment reader designed to accept multiple payment methods, including magnetic stripe (MagStripe), EMV chip cards, and NFC/contactless transactions such as Apple Pay and Google Pay.

<table><thead><tr><th width="326">Features</th><th width="243">Integration Type</th><th>Communication Options</th></tr></thead><tbody><tr><td><ul><li>Accepts EMV Chip, Magstripe, Contactless including Apple Pay and Google Pay</li><li>Utilizes Quest™ PCI-Validated P2PE for secure transactions</li></ul></td><td><ul><li>Mobile SDK</li><li>Quest™ Mobile Payments API</li></ul></td><td><ul><li>Audio jack</li><li>Bluetooth</li></ul></td></tr></tbody></table>

**Additional Resources**:

* [Quick Reference Guide - ID TECH VP3300](https://support.clearent.com/knowledge-base/getting-started-with-the-id-tech-vp3300-quick-reference-guide/)
* [Essential Technical Specification](https://idtechproducts.com/products/vp3300/)


# Security Solutions

Security is the foundation of every transaction at Xplor Pay. As cyber threats evolve and financial transactions become more complex, we remain committed to protecting your business and your customers. Our multi-layered security framework ensures PCI compliance, safeguards sensitive payment data, and helps minimize fraud risks—while also reducing the compliance burden on your business.

In addition, we provide financial protection programs that help limit exposure in the event of a security breach.

### Learn more about our security approach

To explore the different layers of our security program, see the following articles:

* [**PCI DSS Compliance**](/getting-started/security-solutions/pci-compliance) – Tools and resources that simplify PCI compliance and protect cardholder data.
* [**Tokenization**](/getting-started/security-solutions/tokenization) – Replaces sensitive payment data with randomly generated tokens to reduce exposure risks.
* [**Encryption**](/getting-started/security-solutions/encryption) – Secures payment data at the point of entry and during transmission.
* [**Advanced Compliance and Security Programs**](/getting-started/security-solutions/advanced-compliance-and-security-measures-and-programs) – Proactive monitoring, intelligent transaction controls, and user-friendly compliance tools.


# PCI Compliance

Xplor Pay prioritize Payment Card Industry Data Security Standard (PCI DSS) compliance to protect payment data across all transaction channels—online, in-store, or mobile. We provide merchants and software partners with tools to meet regulatory requirements efficiently.

## What is PCI DSS? <a href="#what-is-pci-dss" id="what-is-pci-dss"></a>

PCI DSS is a set of security standards designed to protect cardholder information during processing, storage, and transmission. Compliance with PCI DSS is crucial for:

* **Preventing Data Breaches:** Protects your business and customers from data theft and fraud.
* **Reducing Financial Risks:** Helps minimize the financial losses and penalties linked to security breaches.
* **Building Customer Trust:** Demonstrates your commitment to securing sensitive payment data.

## Who needs to comply? <a href="#who-needs-to-comply" id="who-needs-to-comply"></a>

* **Merchants:** Any business that accepts payment cards must follow PCI DSS requirements to protect cardholder data.
* **Software Vendors:** Businesses that develop and sell software involved in payment transactions must comply with:
  * PCI DSS requirements
  * Software Security Framework (SSF) guidelines for secure coding practices and data protection

These complementary standards work together to protect payment information and the software vendors who integrate payment capabilities into their products.

For more information on which of the PCI standards apply to you, see [Who Needs to be PCI Compliant?](https://xplorpay.com/insights/pci-compliance/)

## Reduce compliance complexity <a href="#reduce-compliance-complexity" id="reduce-compliance-complexity"></a>

While PCI DSS compliance is mandatory, additional security measures can simplify the process and strengthen your data protection strategy.

Our multi-layered security approach helps merchants and software vendors improve data protection, simplify PCI compliance, and reduce the risk of security incidents. Key solutions include:

* [**Tokenization**](/getting-started/security-solutions/tokenization)**:** Replaces sensitive payment data with randomly generated tokens, reducing the risk of data exposure.
* [**PCI-Validated Point-to-Point Encryption (P2PE)**](/getting-started/security-solutions/encryption#pci-validated-point-to-point-encryption-p2pe)**:** Encrypts card data at the point of entry to protect information during transmission.
* [**Cloud EMV**](/guides/cloud-emv)**:** Processes sensitive card data outside your software environment, removing your application from PCI DSS scope and minimizing compliance efforts.

For more information about PCI DSS Compliance, see

* [What is PCI DSS Compliance?  ](https://xplorpay.com/insights/pci-dss-compliance/)[  ](https://xplorpay.com/insights/pci-compliance/)
* [What are the PCI Standards & Programs?  ](https://xplorpay.com/insights/pci-data-security-standards/)
* [What's New With PCI DSS 3.2?  ](https://xplorpay.com/insights/pci-dss-3-2/)[  ](https://xplorpay.com/insights/pci-compliance/)
* [Security Best Practices](https://xplorpay.com/insights/security-best-practices/)


# Tokenization

Tokenization is a powerful security solution that replaces sensitive payment information with randomly generated tokens. This method helps protect businesses and their customers by reducing the risk of data breaches.

## How Tokenization Works <a href="#how-tokenization-works" id="how-tokenization-works"></a>

Tokenization secures payment data by replacing cardholder information with a unique, non-sensitive token. The original card data is securely stored in Xplor Pay's token vault, ensuring that merchants never store or transmit sensitive information. This reduces both the merchant's and the software vendor's PCI DSS scope, simplifying compliance efforts.

### Step-by-Step Process <a href="#step-by-step-process" id="step-by-step-process"></a>

1. **Payment Entry:** A customer swipes, keys, dips, or taps their credit card.
2. **Data Transmission:** Sensitive card information is securely sent to Xplor Pay's token vault — not the merchant's system.
3. **Token Generation:** Xplor Pay stores the sensitive data in its vault and sends a token back to the merchant.
4. **Future Transactions:** The merchant uses the token for recurring payments, card-on-file transactions, or other payment needs.

## Benefits of Tokenization <a href="#benefits-of-tokenization" id="benefits-of-tokenization"></a>

* **Enhanced Security:** Tokens have no meaningful value to hackers, reducing the risk of data breaches.
* **Simplified Compliance:** By eliminating the need to store or transmit sensitive card data, tokenization reduces PCI DSS scope, making compliance faster and easier.
* **Improved Customer Experience:** Tokens enable secure recurring payments and card-on-file transactions, enhancing convenience for customers.

## Combined Protection with Encryption <a href="#combined-protection-with-encryption" id="combined-protection-with-encryption"></a>

For maximum security, Xplor Pay combines tokenization with encryption. While tokenization protects data at rest, encryption safeguards data in transit, ensuring comprehensive security throughout the payment process.

By using tokenization alongside other security measures, Xplor Pay helps businesses minimize risk, simplify compliance, and build customer trust.

## Xplor Pay Token Portal <a href="#clearent-tokenization-portal" id="clearent-tokenization-portal"></a>

The Xplor Pay [Token Portal](https://docs.xplorpay.com/token-portal/) provides easy-to-follow instructions for transferring tokens from other processors to Xplor Pay. It offers guidance based on your role to make the process clear and straightforward:

* **Merchants:** Learn how to securely move your tokens to Xplor Pay with minimal disruption to your payments.
* **Software Partners (Integrators):** Follow simple steps to connect your software with the token system.
* **Payment Processors:** Get clear instructions for exporting merchant tokens to Xplor Pay securely and accurately.

The portal's step-by-step guidance makes token transfers easier and helps protect your data.

For more information about Tokenization, see:

* [Card Tokenization](https://docs.xplorpay.com/api-reference/api/payments/cards-card-not-present/vault)
* [ACH Token](https://docs.xplorpay.com/api-reference/api/payments/ach/ach-vault-token)

**Other relevant articles:**

* [Credit Card Tokenization](https://xplorpay.com/blog/credit-card-tokenization/)
* [PCI Tokenization vs Encryption](https://xplorpay.com/blog/pci-tokenization-vs-encryption/)
* [PCI’s Not Enough: Breach Prevention Needs Chips and Tokens](https://xplorpay.com/blog/pcis-not-enough-breach-prevention-needs-chips-and-tokens/)
* [Xplor Pay Token Portal](https://docs.xplorpay.com/token-portal/)


# Encryption

Xplor Pay uses advanced encryption technologies to protect payment data during every stage of the transaction process. Encryption helps ensure that sensitive information is secure from the moment a transaction starts until it reaches its final destination.

## How Encryption Works <a href="#how-encryption-works" id="how-encryption-works"></a>

Encryption is the process of converting sensitive information into unreadable code. Only authorized parties with a decryption key can unlock the data. This makes encrypted data useless to hackers if intercepted.

### Step-by-Step Process <a href="#step-by-step-process" id="step-by-step-process"></a>

1. **Transaction Start:** The customer swipes, dips, keys, or taps their card on an encrypted device.
2. **Data Encryption:** The card data is instantly converted into an unreadable code before leaving the device.
3. **Secure Transmission:** The encrypted data is securely sent to Xplor Pay's PCI-compliant data center.
4. **Decryption:** Once the data reaches Xplor Pay, it is decrypted and sent to the bank for authorization.

## PCI-validated Point-to-Point Encryption <a href="#pci-validated-point-to-point-encryption-p2pe" id="pci-validated-point-to-point-encryption-p2pe"></a>

Xplor Pay's PCI-validated Point-to-Point Encryption (P2PE) solution offers an extra layer of protection for card data in transit. P2PE encrypts data immediately when a card is swiped, dipped, keyed, or tapped and keeps it encrypted until it reaches Xplor Pay's secure environment.

### Benefits of PCI-Validated P2PE <a href="#benefits-of-pci-validated-p2pe" id="benefits-of-pci-validated-p2pe"></a>

* **Reduced PCI Scope:** Encrypted payment devices help businesses reduce their PCI DSS scope, simplifying compliance efforts.
* **Simplified Compliance:** Merchants using encrypted devices no longer need to conduct vulnerability scans or penetration tests.
* **Faster PCI Self-Assessment:** Merchants can complete the simplified SAQ P2PE form, reducing their questionnaire from over 80 questions to just 32.

By combining encryption with other security measures like [Tokenization](/getting-started/security-solutions/tokenization), Xplor Pay helps businesses protect payment data, simplify compliance, and reduce security risks.

&#x20;For more information about Encryption, see:

* [PCI Tokenization vs Encryption](https://xplorpay.com/blog/pci-tokenization-vs-encryption/)
* [Understanding Your P2PE Device](https://support.xplorpay.com/knowledge-base/understanding-your-p2pe-device/)
* [Xplor Pay's P2PE listing on the official PCI Security Standards Council's site](https://www.pcisecuritystandards.org/assessors_and_solutions/point_to_point_encryption_assessors/)


# Advanced Compliance & Security Measures & Programs

Xplor Pay provides advanced security solutions to protect your business, simplify compliance, and minimize risks. Our comprehensive security programs include proactive monitoring, intelligent transaction controls, and easy-to-use compliance tools and protection programs.

## Advanced Fraud Monitoring <a href="#advanced-fraud-monitoring" id="advanced-fraud-monitoring"></a>

Our fraud detection system continuously monitors transactions to identify suspicious activities. This proactive approach helps:

* **Detect Fraud Early:** Identifies and stops potential fraud before it impacts your business.
* **Maintain Customer Trust:** A secure payment process gives customers confidence in your business.

## Duplicate Checking <a href="#duplicate-checking" id="duplicate-checking"></a>

Our duplicate checking feature helps prevent transaction errors by detecting and removing duplicate transactions before processing. Key features include:

* **Advanced Detection:** Smart algorithms to detect duplicates by comparing the last four card digits within a chosen time range. For more precise checks, invoice-based searching can compare both the last four digits and the invoice number.
* **Real-Time Monitoring:** Monitors transactions within a customizable time frame (1–60 minutes). If a duplicate is found, the system responds with either a 402 error or a 200 status with “Transaction Previously Approved.” Cloud-based devices always return a 200 status to confirm accurate detection.

## DataGuardian Compliance Tool and Programs <a href="#dataguardian-compliance-tool-and-programs" id="dataguardian-compliance-tool-and-programs"></a>

DataGuardian simplifies [PCI compliance](/getting-started/security-solutions/pci-compliance) and strengthens data security. Through its secure portal, you can:

* Complete your PCI self-assessment questionnaire.
* Schedule and run required vulnerability scans.
* Track your certification progress.

DataGuardian also includes comprehensive protection programs:

<details>

<summary>Data Breach Protection</summary>

Xplor Pay's Data Breach Protection Insurance Policy covers up to $150,000 in breach-related expenses. This includes:

* Hardware and software upgrades.
* Consumer notifications.
* Expert forensic guidance if a breach occurs.

</details>

<details>

<summary>Identity Protection and Restoration</summary>

Our identity protection services help business owners recover quickly from identity theft:

* **Personal Identity Theft Insurance:** Reimburses up to $1,000,000 for expenses related to restoring your identity.
* **Personal Identity Restoration:** Provides a dedicated Identity Theft Restoration Specialist to manage disputes, alerts, and fraudulent activities on your behalf.

</details>

For more information, see:

* [Protect Payments](https://xplorpay.com/protect-payments/)
* [PCI Compliance & Breach Insurance: DataGuardian Compliance & Security Program](https://support.xplorpay.com/knowledge-base/dataguardian-compliance-security-program/)
* [DataGuardian Data Breach Protection Insurance Policy](https://support.xplorpay.com/knowledge-base/dataguardian-150000-data-breach-protection-insurance-policy/)


# Overview

High-level guidance for choosing and integrating our SDKs.

Our SDKs help you accept payments across web, mobile, and point-of-sale experiences. Choose the SDK that matches your customer touchpoint, device model, and Payment Card Industry (PCI) scope.

### Choose the right SDK

#### JavaScript SDK

Use the **JavaScript SDK** to accept payments on a website. It provides a browser-based payment framework, supports responsive design, and lets you style the payment experience from the host page.

This SDK is a fit when you need to:

* Collect payments in a web checkout flow.
* Support Apple Pay or Google Pay on the web.
* Work with supported web-connected readers.

Start here: [JavaScript](/guides/javascript)

#### Mobile EMV

Use **Mobile EMV** to accept payments in an iOS or Android app with supported mobile card readers. It works with the Mobile Payments API and supports chip card acceptance through audio-jack and Bluetooth-enabled devices.

This SDK is a fit when you need to:

* Accept in-person payments in a mobile app.
* Connect to supported mobile readers.
* Build an app-based checkout experience for staff or customers.

Start here: [Mobile EMV](/guides/mobile-emv)

#### Cloud EMV

Use **Cloud EMV** for a semi-integrated point-of-sale payment flow. It lets you connect to supported payment terminals through a unified cloud-based integration.

This SDK is a fit when you need to:

* Integrate payment terminals into a POS platform.
* Reduce PCI DSS scope.
* Avoid separate integrations for each terminal model.

Start here: [Cloud EMV](/guides/cloud-emv)

### What to prepare

Before you start, confirm these details:

* Your target platform — web, mobile app, or POS.
* Your supported payment devices and checkout flow.
* The API access and credentials your integration requires.

### Recommended path

Use this sequence to integrate with our SDKs faster:

1. Pick the SDK that matches your platform and hardware.
2. Complete the prerequisites for that SDK.
3. Build the payment form, device flow, or terminal flow.
4. Process test transactions before going live.


# JavaScript

The **JavaScript SDK** helps you integrate payments into your website. The SDK payment framework follows the [PCI Security Standard Council - Best Practices for Securing E-commerce](https://www.pcisecuritystandards.org/pdfs/best_practices_securing_ecommerce.pdf). The framework supports responsive design and lets you style content by using the host page.

See the following articles to integrate the **JavaScript SDK**:

* [Prerequisites](/guides/javascript/prerequisites)
* [Add payment form](/guides/javascript/add-payment-form)
* [Format payment page](/guides/javascript/format-payment-page)
* [Process payment](/guides/javascript/process-payment)
* [Apple Pay for Web](/guides/javascript/apple-pay-for-web)
* [Google Pay for Web](/guides/javascript/google-pay-for-web)
* [IDTech VP8300](/guides/javascript/idtech-vp8300)
* [Card validations](/guides/javascript/card-validations)
* [Configure payment page](/guides/javascript/configure-payment-page)


# Prerequisites

Before you integrate the **JavaScript SDK**, make sure you have the following:

:white\_check\_mark: Use HTTPS for your website.

:white\_check\_mark: Host the payment page on your web server.

{% hint style="danger" %}
The **JavaScript SDK** does not function when you *host* the payment page using [File URI scheme](https://en.wikipedia.org/wiki/File_URI_scheme).
{% endhint %}

:white\_check\_mark: Plug the [VP8300 USB Card Reader](/guides/javascript/idtech-vp8300) into a USB port that supports USB 2.0 or later.

:white\_check\_mark: Use the *latest* versions of the these browsers:

* Chrome
* Firefox
* Edge
* Safari

{% hint style="warning" %}
Don't publish the *Public Key* outside of your code.
{% endhint %}


# Add payment form

To add the payment form into your website:

{% stepper %}
{% step %}
Add the `div` provided to you into your code to contain the payment form.

{% code lineNumbers="true" %}

```javascript
<div id="payment-form"></div>
```

{% endcode %}
{% endstep %}

{% step %}
Add the `script` tag into the JavaScript SDK library.

{% code lineNumbers="true" %}

```javascript
<script src="https://gateway-int.clearent.net/js-sdk/js/clearent-host.js"></script> code
```

{% endcode %}
{% endstep %}

{% step %}
Add the **Global** **Callback Handlers** into your code to receive the success or error messages from the JavaScript SDK. You can also add the Promises to receive the success, or error messages alternate to avoid global callback handlers.

{% code lineNumbers="true" %}

```javascript
<script type="text/javascript">
    // When you get a successful token response and
    // use this to make a sale/auth on your backend
    function ClearentTokenSuccess(raw, json) {
        console.log("ClearentTokenSuccess");
        console.log(raw);
        console.log(json);
        // now you can send the token to your server
        // to complete the transaction via mobile-gateway
    }
    function ClearentTokenError(raw, json) {
        console.log("ClearentTokenError");
        console.log(raw);
        console.log(json);
    }
</script>java
```

{% endcode %}
{% endstep %}

{% step %}
Call the `init` method using the `baseUrl` and `pk` provided to you for your sandbox.

{% code lineNumbers="true" %}

```javascript
<script type="text/javascript">
    ClearentSDK.init({
        "baseUrl": "https://gateway-int.clearent.net",
        "pk": "YOUR PUBLIC KEY GOES HERE"
    });
</script>
```

{% endcode %}
{% endstep %}
{% endstepper %}

This form lets your customers submit their payment information.


# Format payment page

To format the payment page using the style attributes:

{% stepper %}
{% step %}
Add the `ClearentSDK.init()` method.

{% code overflow="wrap" lineNumbers="true" %}

```js
<script type="text/javascript">
    ClearentSDK.init({
        "baseUrl": "https://gateway-int.clearent.net",
        "pk": "YOUR PUBLIC KEY GOES HERE",
        "styles": ".form-control{color: blue;}.form-control:focus{color: purple;}"
    });
</script>
```

{% endcode %}

The payment form displays the blue text for input fields, and the text changes to purple when the field is selected for input

<figure><img src="/files/2pUd5rDb8znpLCaOXQ0Q" alt=""><figcaption><p>Payment form fields</p></figcaption></figure>
{% endstep %}

{% step %}
Access the element classes, IDs, and structure from the browser’s Developer toolbar to build any override styles for your payment page.

<figure><img src="/files/4hJwPrPxms6v92Mkmvmo" alt=""><figcaption><p>Browser's developer toolbar</p></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
The following error will be displayed when you set an external resource or data/blob content in the style attributes during formatting the content.
{% endhint %}

<figure><img src="/files/VgRyWQK8cC9EVzV46gw3" alt=""><figcaption><p>Error from the browser's developer toolbar</p></figcaption></figure>


# Process payment

A secure, signed JSON Web Token ([JWT](#jwt)) is generated when the customer selects the **Submit** button on your [payment form](/guides/javascript/add-payment-form).

To receive a secure and signed [JWT](#jwt) and complete the payment on your backend:

{% stepper %}
{% step %}
Call the `ClearentSDK.getPaymentToken` method.

{% code lineNumbers="true" %}

```javascript
ClearentSDK.getPaymentToken();
```

{% endcode %}
{% endstep %}

{% step %}
Add `Promises` to receive the success or error message from the `ClearentSDK.getPaymentToken()` function.

{% code lineNumbers="true" %}

```javascript
ClearentSDK.getPaymentToken().then(
    (result) => {
        // this function is called if getting a payment token was successful
        console.log("ClearentTokenSuccess");
        console.log(result);
    },
    (error) => {
        // this function is called if getting a payment token failed
        console.log("ClearentTokenError");
        console.log(error);
    }
);
```

{% endcode %}
{% endstep %}

{% step %}
Call the JWT service using the `ClearentTokenSuccess` function to receive the secure, signed, and unencrypted JSON Web Token in the [JWT](#example-decoded-unencrypted-signed-jwt) field shown below.

{% code lineNumbers="true" %}

```javascript
{
   "code":"200",
   "status":"success",
   "exchange-id":"ID-clearent-mobile-jwt-1-c32bfe39-d454-4e34-8b4f-94d850643e48",
   "payload":{
      "mobile-jwt":{
         "jwt":"eyJhbGciOi23UzIh4iJ9.eyJsYXN0LWZvdXIiOiIxMrkP8iwid
                HlwZSI6Ik1BTlVBTCIsImV4cCI6MTU0NzY0NjU2MSwidG9rZW4iOiIxMTAwMDAw
                MDAwMDEzNTkyIn0.eT8c_5yUzxCxL2MEtmbG444eTFRW7OxzRF7x4uRIo-U",
         "last-four":"1111"
      },
      "payloadType":"mobile-jwt"
   }
}
```

{% endcode %}
{% endstep %}

{% step %}
Send request to the [Mobile Transactions](/api-reference/api/payments/mobile/mobile-payment-transactions/mobile-transactions) API endpoint from your backend using the `mobilejwt` field and `api-key` provided to you.

{% code lineNumbers="true" %}

```json
POST /rest/v2/mobile/transactions/sale
Accept:application/json
Content-Type:application/json
api-key:YOUR_API_KEY_GOES_HERE
mobilejwt:eyJhbGciOi23UzIh4iJ9.eyJsYXN0LWZvdXIiOiIxMrkP8iwid
 HlwZSI6Ik1BTlVBTCIsImV4cCI6MTU0NzY0NjU2MSwidG9rZW4iOiIxMTAw
 MDAwMDAwMDEzNTkyIn0.eT8c_5yUzxCxL2MEtmbG444eTFRW7OxzRF7x4uRIo-U
Body
{
    "type": "SALE",
    "amount": "15.55",
    "software-type": "AwesomePOSSoftware",
    "software-type-version":"1"
}
```

{% endcode %}
{% endstep %}
{% endstepper %}

You will receive the below response after successful transaction or an error response if the transaction fails.

{% code lineNumbers="true" %}

```json
{
    "code": "200",
    "status": "success",
    "exchange-id": "ID-clearent-mobile-gateway-1-2a6b56d3-c660-4810-95ea-9fb9a21c6634",
    "payload": {
        "transaction": {
            "amount": "15.55",
            "id": "2586119",
            "type": "SALE",
            "result": "APPROVED",
            "card": "XXXXXXXXXXXX1111",
            "csc": "999",
            "authorization-code": "TAS022",
            "batch-string-id": "938",
            "display-message": "Transaction approved",
            "result-code": "000",
            "exp-date": "1220",
            "software-type": "AwesomePOSSoftware",
            "card-type": "VISA",
            "last-four": "1111"
        },
        "payloadType": "transaction"
    }
}
```

{% endcode %}

**Example**: Decoded, unencrypted, and signed JSON Web Token (JWT)

<div data-with-frame="true"><figure><img src="/files/HXdJYd3SXtQ1ESUWAFmT" alt=""><figcaption><p>Example: Decoded, unencrypted, signed JWT</p></figcaption></figure></div>


# Apple Pay for Web

Configure Apple Pay for Web into your website to accept payments in Safari and supported third-party browsers on Apple devices.

### Key capabilities

#### Cross-browser support

* Accept Apple Pay payments using supported browsers on secure devices.
* Process Apple Pay payments in Chrome or Edge when customers use an iPhone.
* Use a consistent implementation across supported browsers, including Safari.

#### iFrame support

* Support iFrame-based checkout experiences.
* Allow embedded payment flows, including Paylink and Hosted Payments.
* Enforce domain validation and browser/device compatibility requirements.

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

Make sure you have the following before you configure Apple Pay and start accepting payments on your website:

* [**Devices**](https://support.apple.com/en-us/102896) compatible with Apple Pay.
* [**HTTPS**](https://en.wikipedia.org/wiki/HTTPS) enabled for both development and production environments.
* A [**valid SSL certificate**](https://en.wikipedia.org/wiki/Public_key_certificate#TLS/SSL_server_certificate) for your domain.
* [**Transport Layer Security (TLS) 1.2**](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) or later and a supported cipher suite for your server.
* Ensure [**Apple Pay**](https://developer.apple.com/documentation/ApplePayontheWeb/setting-up-your-server) is configured and enabled on your production server.

{% hint style="success" %}
We recommend you implement manual card entry using the [JavaScript](/guides/javascript) as a fallback.
{% endhint %}

### Supported payment methods <a href="#supported-payment-methods" id="supported-payment-methods"></a>

{% hint style="warning" %}
Payment and address information are *required* to process payments using Apple Pay on your website.
{% endhint %}

### **Supported Cards**

* [Visa](https://en.wikipedia.org/wiki/Visa_Inc.#Products)
* [MasterCard](https://en.wikipedia.org/wiki/Mastercard#Products)
* [Amex](https://en.wikipedia.org/wiki/American_Express#Amex_credit_card_benefits_and_fees)
* [Discover](https://en.wikipedia.org/wiki/Discover_Card)

### **Merchant Capabilities**

* [Credit cards](https://en.wikipedia.org/wiki/Credit_card)
  * [Visa](https://en.wikipedia.org/wiki/Visa_Inc.#Visa_Credit_Cards)
  * [Mastercard](https://en.wikipedia.org/wiki/Mastercard#Products)
  * [Amex](https://en.wikipedia.org/wiki/American_Express#Amex_credit_card_benefits_and_fees)
  * [Discover](https://en.wikipedia.org/wiki/Discover_Card)
* [Debit cards](https://en.wikipedia.org/wiki/Debit_card)
  * [Visa](https://en.wikipedia.org/wiki/Visa_Debit)
  * [Mastercard](https://en.wikipedia.org/wiki/Mastercard#Prepaid_debit_cards)

### Unsupported payment methods <a href="#unsupported-payment-methods" id="unsupported-payment-methods"></a>

* In-App payments
* Recurring payments
* Split shipment
* Voids/Refunds through Apple Pay

### Getting started <a href="#getting-started" id="getting-started"></a>

Xplor Pay manages the [Merchant Validation](https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/providing_merchant_validation/) process for you by creating an Apple Merchant ID and CSR. For more information, see [Apple Developer Documentation](https://developer.apple.com/documentation/apple_pay_on_the_web).

#### Register domain using Merchant Portal

To register a domain:

1. Go to the [Merchant Portal](https://auth.clearent.net/oauth2/aus4ulyubshD7M0yf697/v1/authorize?client_id=0oa6ggt30dFSxSVxX697\&redirect_uri=https%3A%2F%2Fmy.clearent.net%2Fui%2Fauth%2Fpost-login\&response_type=code\&scope=openid+profile\&state=76467a84f76643108a9e608b3352d346\&code_challenge=aueGbQf2_zJaTHmk8PskefVGKPOA8C8-T9JbbZF5E-Y\&code_challenge_method=S256).
2. Select **Virtual Terminal** > **VT Settings** > **Apple Pay for Web**.
3. Download the registration file.
4. Host the downloaded file on your website to complete the registration.

#### Register domain using Apple Pay for Web API endpoint

To register a domain:

1. Use the **POST** method with [Apple Pay for Web API](https://docs.xplorpay.com/api-reference/api/payments/mobile/apple-pay-for-web/apple-pay-for-web#post-rest-v2-apple-merchants-domains) endpoint to register the domain or domains you’ll use with Apple Pay.
2. Host the verification file provided by Xplor Pay to you on the following URL, replacing `[DOMAIN_NAME]` with your domain name.

**URL**: `https://[DOMAIN_NAME]/.well-known/apple-developer-merchantid-domain-association`

{% hint style="warning" %}
The URL with your `[DOMAIN_NAME]` *must* be publicly accessible to allow Apple to verify the file.
{% endhint %}

#### Verifying domain with Apple

To verify your domain with Apple:

1. Send a notification to Xplor Pay to request domain verification with Apple after hosting the file at the appropriate URL.
2. You will receive confirmation after successful domain verification with Apple from Xplor Pay.

#### Configuring Apple Pay for Web

To configure Apple Pay into your website:

1. Add the `JavaScriptSDK.init` method to allow Apple Pay.

```javascript
ClearentSDK.init({
    "pk": "YOUR_PUBLIC_KEY_HERE",
    "enableApplePay": true
});
```

The following table describes the fields in the `JavaScriptSDK.init` method:

<table><thead><tr><th width="160.33331298828125" valign="top">Name</th><th width="115.33331298828125" valign="top">Data type</th><th width="128.66668701171875" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>pk</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Your public API key issued by Xplor Pay to authenticate the SDK.</td></tr><tr><td valign="top"><code>enableApplePay</code></td><td valign="top">Boolean</td><td valign="top">Required</td><td valign="top">Enables Apple Pay functionality when you set it to <code>true</code>.</td></tr></tbody></table>

2. Add the `applePayRequest` object to the `JavaScriptSDK.init` method.

```javascript
ClearentSDK.init({
    "pk": "YOUR_PUBLIC_KEY_HERE",
    "enableApplePay": true,
    "applePayRequest": {
        "total": {
            "label": "Bob's Canoes",
            "amount": "50.25",
            "type": "final"
        }
    }
});
```

The following table describes the fields in the `applePayRequest` object:

<table><thead><tr><th width="195" valign="top">Name</th><th width="117.3333740234375" valign="top">Data type</th><th width="115" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>applePayRequest.total</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Defines the total transaction amount and merchant label that appear in the Apple Pay sheet.</td></tr><tr><td valign="top"><code>total.label</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The merchant’s name displayed to customers in the Apple Pay sheet. For example, Bob’s Canoes.</td></tr><tr><td valign="top"><code>total.amount</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The total transaction amount to be charged. For example, 50.25</td></tr><tr><td valign="top"><code>total.type</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Indicates the type of transaction amount. Use final for a fixed total.</td></tr></tbody></table>

{% hint style="info" %}
See the [Apple Pay on the Web Demo](https://applepaydemo.apple.com/) for additional objects you can use in your Apple Pay payment sheet.
{% endhint %}

#### Processing payments with Apple Pay

Integrating the[ JavaScript](/guides/javascript) handles Apple Pay token and convert it into the mobile JSON Web Token (JWT).

To process the payment with Apple Pay:

1. Add the `ClearentTokenSuccess` and `ClearentTokenError` functions to your integration to receive feedback containing the mobile JSON Web Token (JWT) for processing payments.

```javascript
function ClearentTokenSuccess(raw, json) {
    console.log("ClearentTokenSuccess");
    console.log(raw);
    console.log(json);
    console.log("-----------------------------------------------");
    console.log("now you can send the token to your server");
    console.log("to complete the transaction via mobile-gateway");
    console.log("-----------------------------------------------")
}
function ClearentTokenError(raw, json) {
    console.log("ClearentTokenError");
    console.log(raw);
    console.log(json);
}
```

{% hint style="warning" %}
Make sure the `ClearentTokenSuccess` and `ClearentTokenError` functions are added to your JavaScript integration to avoid unnecessary rework. If you haven’t integrated them yet, see the [JavaScript SDK](https://docs.xplorpay.com/payment-processing-solutions/javascript-sdk) for integration steps.
{% endhint %}

2. Use [HTTPS](https://en.wikipedia.org/wiki/HTTP#Request_methods) methods to send the [mobile payment API](https://docs.xplorpay.com/api-reference/api/payments/mobile/mobile-payment-transactions/mobile-transactions) requests using the mobile JSON Web Token (JWT) from your server.

{% hint style="warning" %}
Make sure you have the following to process the Apple Pay transaction using [Mobile Payment Transactions API](https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions) on your website:

:white\_check\_mark: [API key](https://docs.xplorpay.com/api-references/authentication#obtaining-your-access-key) issued by Xplor Pay

:white\_check\_mark: Mobile JSON Web Token (JWT)
{% endhint %}

{% hint style="danger" %}
Don’t expose the [API key](https://docs.xplorpay.com/api-references/authentication#obtaining-your-access-key) issued by Xplor Pay in your website code or client-side scripts.
{% endhint %}

#### Testing Apple Pay for Web <a href="#offline-testing-for-apple-pay" id="offline-testing-for-apple-pay"></a>

Refer the [Apple’s sandbox testing](https://developer.apple.com/apple-pay/sandbox-testing/) guide to test offline transactions on your website using Apple Pay.


# Google Pay for Web

Configure Google Pay into your website to accept payments in browsers.

The following sections explain how to configure Google Pay on your website.

## Prerequisites

Make sure you have the following before you configure Google Pay and start accepting payments on your website:

* [**HTTPS**](https://en.wikipedia.org/wiki/HTTPS) enabled for both development and production environments.
* A [**valid SSL certificate**](https://en.wikipedia.org/wiki/Public_key_certificate#TLS/SSL_server_certificate) for your domain.
* [**Transport Layer Security (TLS) 1.2**](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) or later and a supported cipher suite for your server.
* [**Supported web browsers**](https://en.wikipedia.org/wiki/List_of_web_browsers) for your website.
* Ensure [**Google Pay**](https://support.google.com/wallet/answer/14187106?sjid=17686607763817731635-AP\&visit_id=638694310661931322-773455809\&rd=1) is configured and enabled on your production server.
* Comply with the [**Google Pay and Wallet APIs Acceptable Use Policy**](https://payments.developers.google.com/terms/aup).
* Implement manual card entry solution using JavaScript SDK.

We recommend implementing manual card entry in the [JavaScript SDK](/guides/javascript) as a fallback.

## Supported payment methods

Payment and address information are *required* to process payments using Google Pay on your website.

### **Supported card brands**

* [Visa](https://en.wikipedia.org/wiki/Visa_Inc.#Products)
* [MasterCard](https://en.wikipedia.org/wiki/Mastercard#Products)
* [Amex](https://en.wikipedia.org/wiki/American_Express#Amex_credit_card_benefits_and_fees)
* [Discover](https://en.wikipedia.org/wiki/Discover_Card)

### **Merchant capabilities**

* [Credit cards](https://en.wikipedia.org/wiki/Credit_card)
  * [Visa](https://en.wikipedia.org/wiki/Visa_Inc.#Visa_Credit_Cards)
  * [Mastercard](https://en.wikipedia.org/wiki/Mastercard#Products)
  * [Amex](https://en.wikipedia.org/wiki/American_Express#Amex_credit_card_benefits_and_fees)
  * [Discover](https://en.wikipedia.org/wiki/Discover_Card)
* [Debit cards](https://en.wikipedia.org/wiki/Debit_card)
  * [Visa](https://en.wikipedia.org/wiki/Visa_Debit)
  * [Mastercard](https://en.wikipedia.org/wiki/Mastercard#Prepaid_debit_cards)

### Unsupported payment methods

* In-App payments
* Recurring payments
* Split shipment
* Voids/Refunds through Google Pay

## Configuring Google Pay for Web

To configure Google Pay into your website:

1. Add the `request` object in your code using the [Brand Guidelines by Google](https://developers.google.com/pay/api/web/guides/brand-guidelines) as a reference.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
const request = {
	"total": {
		"label": "Sasha's Mustard Shop",
		"amount": "0.01",
		"type": "final"
	}
};
```

{% endcode %}

The `request` object includes the following fields:

<table><thead><tr><th width="135" valign="top">Name</th><th width="110.3333740234375" valign="top">Data type</th><th width="136.66668701171875" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>total</code></td><td valign="top">Object</td><td valign="top">Optional</td><td valign="top">Contains the total payment information.</td></tr><tr><td valign="top"><code>total.label</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">The name of the merchant shown to the customer.</td></tr><tr><td valign="top"><code>total.amount</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The total amount to be charged. For example, 0.01</td></tr><tr><td valign="top"><code>total.type</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Indicates the type of total. Use final for the final amount.</td></tr></tbody></table>

2. Add the `buttonConfig` object to create onClick event into your website.

{% code overflow="wrap" lineNumbers="true" %}

```java
const buttonConfig = {
	"buttonColor": "default",
	"buttonType": "buy",
	"buttonLocale": "en",
	"buttonSizeMode": "fill"
};
```

{% endcode %}

The `buttonConfig` object includes the following fields:

<table><thead><tr><th width="152.33331298828125" valign="top">Name</th><th width="110.3333740234375" valign="top">Data type</th><th width="136.66668701171875" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>buttonColor</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top"><p>Defines the color of the Google Pay button.</p><p><br>Common values are:</p><ul><li><code>default</code></li><li><code>black</code></li><li><code>white</code></li></ul></td></tr><tr><td valign="top"><code>buttonType</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top"><p>Defines the purpose of the button.<br></p><p>Common values are:</p><ul><li><code>buy</code></li><li><code>donate</code></li><li><code>order</code></li><li><code>pay</code></li><li><code>subscribe</code></li></ul></td></tr><tr><td valign="top"><code>buttonLocale</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Specifies the locale for the button text. For example, <code>en</code> for English.</td></tr><tr><td valign="top"><code>buttonSizeMode</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">Determines how the button scales. For example, <code>fill</code> makes the button expand to fit its container.</td></tr></tbody></table>

3. Add the `ClearentSDK.init` function to start the Google Pay session.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
ClearentSDK.init({
	"baseUrl": "https://gateway-int.clearent.net",
	"pk": "Your public key",
	"enableGooglePay": true,
	"googlePayRequest": request,
	"googlePayButtonConfig": buttonConfig
});
```

{% endcode %}

The `ClearentSDK.init` function includes the following fields:

<table><thead><tr><th width="156.33334350585938" valign="top">Name</th><th width="110.3333740234375" valign="top">Data type</th><th width="136.66668701171875" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>baseUrl</code></td><td valign="top">String</td><td valign="top">Optional</td><td valign="top">The base URL for the <a href="https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions">Mobile Payment Transactions API</a> endpoint. Use the sandbox or production URL as appropriate.</td></tr><tr><td valign="top"><code>pk</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The public key used to authenticate requests to the <a href="https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions">Mobile Payment Transactions API</a> endpoint.</td></tr><tr><td valign="top"><code>enableGooglePay</code></td><td valign="top">Boolean</td><td valign="top">Optional</td><td valign="top">Indicates Google Pay integration. Enabled when set to <code>true</code>.</td></tr><tr><td valign="top"><code>googlePayRequest</code></td><td valign="top">Object</td><td valign="top">Optional</td><td valign="top">Contains the payment request configuration for Google Pay. It includes <code>request</code> object fields.</td></tr><tr><td valign="top"><code>googlePayButtonConfig</code></td><td valign="top">Object</td><td valign="top">Optional</td><td valign="top">Defines the appearance and behavior of the Google Pay button. It includes <code>buttonConfig</code> object fields.</td></tr></tbody></table>

4. Add the `googlePayAvailable` function to check whether your customer uses Google Pay.&#x20;

This function helps you decide whether to display the Google Pay button in the customer’s browser.

{% code overflow="wrap" lineNumbers="true" %}

```
ClearentSDK.googlePayAvailable()
```

{% endcode %}

## Processing payments with Google Pay

The[ JavaScript SDK](/guides/javascript) handles Google Pay token and convert it into the mobile JSON Web Token (JWT).

To process the payment with Google Pay:

1. Add the `ClearentTokenSuccess` and `ClearentTokenError` functions to your integration to receive feedback containing the mobile JSON Web Token (JWT) for processing payments.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
<script type="text/javascript">
            // When you get a successful token response and
            // use this to make a sale/auth on your backend
            function ClearentTokenSuccess(raw, json) {
                console.log("ClearentTokenSuccess");
                console.log(raw);
                console.log(json);
                // now you can send the token to your server
                // to complete the transaction via mobile-gateway
            }
            function ClearentTokenError(raw, json) {
                console.log("ClearentTokenError");
                console.log(raw);
                console.log(json);
            }
        </script>
```

{% endcode %}

2. Use [HTTPS](https://en.wikipedia.org/wiki/HTTP#Request_methods) methods to send the [Mobile Payment Transactions API](https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions) requests using the mobile JSON Web Token (JWT) from your server.

{% hint style="warning" %}
Make sure you have the following to process the Google Pay transaction using [Mobile Payment Transactions API](https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions) on your website:

:white\_check\_mark: [API key](https://docs.xplorpay.com/api-references/authentication#obtaining-your-access-key) issued by Xplor Pay

:white\_check\_mark: Mobile JSON Web Token (JWT)
{% endhint %}

{% hint style="danger" %}
Don’t expose the [API key](https://docs.xplorpay.com/api-references/authentication#obtaining-your-access-key) issued by Xplor Pay in your website code or client-side scripts.
{% endhint %}


# IDTech VP8300

The **JavaScript SDK** supports an IDTech VP8300 card reader for payments acceptance. This card reader supports three interaction methods:

* Contactless
* Chip
* Swipe

{% hint style="warning" %}
Ensure the **VP8300** card reader has a USB connection to communicate with the JavaScript SDK.
{% endhint %}

## Prerequisites <a href="#prerequisites" id="prerequisites"></a>

Before using the **VP8300** card reader, make sure you have the following:

:white\_check\_mark: Use a device with Windows or macOS that includes a USB port.

:white\_check\_mark: Serve your application over HTTPS in both development and production environments.

:white\_check\_mark: Your domain must have a valid SSL certificate.

:white\_check\_mark: Implement the manual card entry of the JavaScript SDK solution.

## Process payment <a href="#initializing-the-sdk" id="initializing-the-sdk"></a>

To process payment using the IDTech VP8300:

{% stepper %}
{% step %}
Add the `ClearentSDK.init()` function that has the `enableReader` flag set to `true` and the `deviceType` set to `IDTECH`.

{% code lineNumbers="true" %}

```javascript
ClearentSDK.init({
                  "baseUrl": "https://gateway-int.clearent.net",
                  "pk": "YOUR PUBLIC KEY GOES HERE"
                  "enableReader":true,
                  "deviceType": "IDTECH"
                 });
```

{% endcode %}
{% endstep %}

{% step %}
Plug the card reader into a USB port on your device.

{% hint style="info" %}
Use an external adapter if your device does not have a USB port.
{% endhint %}
{% endstep %}

{% step %}
Select the **Reader** button next to the Card Number input field to complete the entry of card details into the fields of the payment form.

<figure><img src="/files/f45MTTCDKeFWoVR34fnA" alt=""><figcaption><p>Payment form</p></figcaption></figure>
{% endstep %}

{% step %}
Present the card when you see the **Ready for card reader…** message on the payment form.

<figure><img src="/files/BH7kPPT7DbjmfysGPrRZ" alt=""><figcaption><p>Payment form</p></figcaption></figure>

{% hint style="warning" %}
Do not present the card to the reader unless you see the message ‘**Ready for card reader…**’ on the Payment Details form to avoid incorrectly filling the card data into the fields.
{% endhint %}

The **Payment Details** section displays the masked information in the fields.

<figure><img src="/files/yUnGF8DQDXhfKgi3oEuf" alt=""><figcaption><p>Payment form</p></figcaption></figure>

{% hint style="info" %}
To clear the information from all fields in the Payment Details form, select the **Clear** button in the upper-right corner.
{% endhint %}
{% endstep %}

{% step %}
Select the **Submit Payment** button.

<figure><img src="/files/SDeUviYThLr0pXxxu06T" alt=""><figcaption><p>Payment form</p></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
The `success` and `error` functions are triggered when you call the mobile JWT or ACH mobile JWT to create a secure JWT, which presents the card or ACH data. See [ACH Transaction](broken://pages/X6kTUpELT9JPOuCTZCKi) for more information.
{% endhint %}

## Connect HID Mode <a href="#connecting-in-hid-mode" id="connecting-in-hid-mode"></a>

When you connect to the [VP8300](https://idtechproducts.com/products/vp8300/) in HID mode, a security window appears in your browser. This window allows you to select the terminal for connecting to the VP8300 in HID mode, enabling access to the [VP8300](https://idtechproducts.com/products/vp8300/) device.

<img src="/files/Uj2pa73sbPOMlQ2R1IKu" alt="" data-size="original">

Before connecting to the [VP8300](https://idtechproducts.com/products/vp8300/) in HID mode, you must:

:white\_check\_mark:Set the [VP8300](https://idtechproducts.com/products/vp8300/) Card Reader to HID mode.

:white\_check\_mark: Enable the `is-hid-reader-enabled` field on the terminal of your public key.


# Configure payment page

Configure the text and behavior of your payment page popup:

* [Members](/guides/javascript/configure-payment-page/members)
* [Methods](/guides/javascript/configure-payment-page/methods)


# Members

See the following table to configure your payment page:

<table data-full-width="true"><thead><tr><th width="227" valign="top">Using this member…</th><th width="247" valign="top">You can…</th><th width="129" valign="top">Type</th><th width="121" valign="top">Default Value</th><th valign="top">Remark</th></tr></thead><tbody><tr><td valign="top"><code>accountNumberMasked</code></td><td valign="top">Decide if the Account Number field should display masked information after the customer exits the field.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top">To unmask the Account Number field when your customer exits this field, set the <code>accountNumberMasked</code> member to <code>False</code>.</td></tr><tr><td valign="top"><code>accountNumberPlaceholder</code></td><td valign="top">Decide the text to display for the Account Number field before your customer provides input.</td><td valign="top"><code>String</code></td><td valign="top"><code>Account Number</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>accountTypePlaceholder</code></td><td valign="top">Decide the text to display for the Account Number field before your customer selects it.</td><td valign="top"><code>String</code></td><td valign="top"><code>Account Type</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>allowAutoComplete</code></td><td valign="top">Decide if the fields in the Payment Details form should autocomplete.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>To configure the cardholder-facing implementation, set the <code>allowAutoComplete</code> member to <code>True</code>.</p><p>To configure the merchant-facing implementation, set the <code>allowAutoComplete</code> member to <code>False</code>.</p></td></tr><tr><td valign="top"><code>allowEmbedded</code></td><td valign="top">Decide if JavaScript SDK's host page should be embedded in another page.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>baseUrl</code></td><td valign="top"><p>Decide if the Xplor Pay Gateway base URL should be set to sandbox or production URL.</p><p></p><p><mark style="background-color:orange;"><strong>Note</strong>:</mark> You must set the <code>baseUrl</code> to sandbox or production URL.</p></td><td valign="top"><code>String</code></td><td valign="top"><code>Null</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>blockMetaKeys</code></td><td valign="top"><p>Decide if meta key combinations (alt or ctrl) should be blocked for the hosting page.</p><p>Some card readers may generate keystrokes that include meta keys even after the card read is complete, causing unnecessary behavior in the browser window.</p></td><td valign="top"><code>Mode</code></td><td valign="top"><code>False</code></td><td valign="top"><p>The <code>blockMetaKeys</code> member allows you to block meta key combinations on all pages containing the Xplor Pay script.</p><p>This setting blocks certain meta key combinations, except for closing the window (Ctrl + W), opening a new window (Ctrl + N), or opening a new tab (Ctrl + T).</p></td></tr><tr><td valign="top"><code>cardFormatted</code></td><td valign="top"><p>Decide if the card field should be formatted as the customer enters information in the field.</p><p></p><p><mark style="background-color:orange;"><strong>Note</strong>:</mark> To make this setting effective, set the <code>enableReader</code> member to <code>True</code>.</p></td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>The <code>cardFormatted</code> member allows you to display the text in the Card Payment fields in a format similar to how the information appears on the physical card as the customer enters information.</p><p>To configure the cardholder-facing implementation, set the <code>cardFormatted</code> member to <code>True</code>.</p></td></tr><tr><td valign="top"><code>cardMasked</code></td><td valign="top">Decide if the card field should display masked information after the customer exits the field.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>To unmask the Card Payment fields when your customer exits fields, set the <code>cardMasked</code> member to <code>False</code>.</p><p>To configure the cardholder-facing implementation, set the <code>cardMasked</code> member to <code>True</code>.</p></td></tr><tr><td valign="top"><code>cardPlaceholder</code></td><td valign="top">Decide the text to display for the card field before your customer provides input.</td><td valign="top"><code>String</code></td><td valign="top"><code>Card Number</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>cardReadCompleteCallback</code></td><td valign="top">Decide the name of the function to call to receive a message after completing the card read.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentCardReadComplete</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>cardReadStartCallback</code></td><td valign="top">Decide the name of the function to call to receive a message when starting the card read.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentCardReadStart</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>clearFormOnSuccess</code></td><td valign="top">Decide if the Payment Details form should be cleared on a successful call to <code>getPaymentToken()</code>.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>False</code></td><td valign="top">The <code>clearFormOnSuccess</code> member allows you to clear the form in a back-office implementation.</td></tr><tr><td valign="top"><code>cvcMasked</code></td><td valign="top">Decide if the CSC field should display masked information after the customer exits the field.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>To unmask the Card Payment fields when your customer exits this field, set the <code>accountNumberMasked</code> member to <code>False</code>.</p><p>To configure the cardholder-facing implementation, set the <code>cvcMasked</code> to <code>True</code>.</p></td></tr><tr><td valign="top"><code>cvcPlaceholder</code></td><td valign="top">Decide the text to display for the CVC field before your customer provides input.</td><td valign="top"><code>String</code></td><td valign="top"><code>CSC</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>cvcRequired</code></td><td valign="top">Decide if the CVC field is mandatory for customer to enter a value.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>deviceType</code></td><td valign="top">Decide the device type of external keyboard-emulation card reader.</td><td valign="top"><code>String</code></td><td valign="top"><code>Null</code></td><td valign="top"><p>The <code>deviceType</code> member allows you to add an external card reader.</p><p>JavaScript SDK supports following Card Reader:</p><ul><li>IDTECH</li></ul></td></tr><tr><td valign="top"><code>enableAch</code></td><td valign="top">Decide if the customer should pay with an online check.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>False</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>enableReader</code></td><td valign="top">Decide if an external card reader should be supported for reading cards.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>False</code></td><td valign="top"><p>You need to add the Card Reader button to start reading the card details using an external keyboard-emulation card reader.</p><p>JavaScript SDK supports following card reader:</p><ul><li>IDTECH</li></ul></td></tr><tr><td valign="top"><code>entryModeChangeCallback</code></td><td valign="top">Decide the name of the function to call to receive a message when changing the card entry mode.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentEntryModeChange</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>errorCallback</code></td><td valign="top">Decide the name of the function to call to receive the <code>getPaymentToken()</code> response.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentTokenError</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>expDateFormatted</code></td><td valign="top">Decide if the Expiration Date field should be formatted on entry.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>The <code>expDateFormatted</code> member allows you to display the text in the Expiration Date field in a format similar to how the information appears on the physical card as the customer enters information.</p><p>To configure the cardholder-facing implementation, set the <code>expDateFormatted</code> to <code>True</code>.</p></td></tr><tr><td valign="top"><code>expDateMasked</code></td><td valign="top">Decide if the Expiration Date field should be masked when customer exits the field.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top"><p>To unmask the Expiration Date field when your customer exits this field, set the <code>expDateMasked</code> member to <code>False</code>.</p><p>To configure the cardholder-facing implementation, set the <code>expDateMasked</code> to <code>True</code>.</p></td></tr><tr><td valign="top"><code>expDatePlaceholder</code></td><td valign="top">Decide the text to display for the Expiration Date field before your customer provides input.</td><td valign="top"><code>String</code></td><td valign="top"><code>MMYY</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>individualNamePlaceholder</code></td><td valign="top">This member allows you to decide the text to display for the Expiration Date field before your customer selects the field.</td><td valign="top"><code>String</code></td><td valign="top"><code>Name on account</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>initialMode</code></td><td valign="top">Decide if the Payment Details form should open in manual card entry mode or keyboard reader mode.</td><td valign="top"><code>String</code></td><td valign="top"><code>Manual</code></td><td valign="top"><p>You need to set the <code>enableReader</code> member to <code>True</code> before setting the <code>initialMode</code> member.</p><p>When you set the <code>initialMode</code> member to <code>manual</code> or <code>reader</code> mode, the payment form will actively listen for keystrokes generated by the card reader.</p><p>Your customers will see errors and retries if they enter keystrokes that are part of the card read.</p><p>We recommend testing this use case before implementation.</p></td></tr><tr><td valign="top"><code>paymentFormId</code></td><td valign="top">Decide the ID of <code>div</code> element that will hold the Payment Details form.</td><td valign="top"><code>String</code></td><td valign="top"><code>payment-form</code></td><td valign="top">To avoid conflicts with existing code and page element IDs, set the <code>paymentFormId</code> member to a value other than the default.</td></tr><tr><td valign="top"><code>paymentTypeCallback</code></td><td valign="top">Decide the name of the function to call the <code>onPaymentTypeChange()</code>.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentOnPaymentTypeChange</code></td><td valign="top"><p>To call the function, set the <code>enableReader</code> member to <code>ACH</code>.</p><p>This function is called when the payment type changes to <code>card</code> or <code>ACH</code>.</p></td></tr><tr><td valign="top"><code>pk</code></td><td valign="top"><p>Public Key</p><p></p><p><mark style="background-color:orange;"><strong>Note</strong>:</mark> You must set the <code>pk</code> member.</p></td><td valign="top"><code>String</code></td><td valign="top"><code>Null</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>routingNumberMasked</code></td><td valign="top">Decide if the Routing Number field should be masked when customer exits the field.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top">To unmask the Routing Number field when your customer exits this field, set the <code>routingNumberMasked</code> member to <code>False</code>.</td></tr><tr><td valign="top"><code>routingNumberPlaceholder</code></td><td valign="top">Decide the text to display for the Routing Number field before your customer provides input.</td><td valign="top"><code>String</code></td><td valign="top"><code>Routing Number</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>showValidationMessages</code></td><td valign="top">Decide if validation messages should be displayed below the payment form.</td><td valign="top"><code>Boolean</code></td><td valign="top"><code>True</code></td><td valign="top">To configure the handling of validation messages elsewhere, set the <code>showValidationMessages</code> member to <code>False</code>.</td></tr><tr><td valign="top"><code>styles</code></td><td valign="top">Decide the style for the framed contents.</td><td valign="top"><code>String</code></td><td valign="top"><code>Null</code></td><td valign="top">You can use the IDs and classes from your browser’s Developer tools to style the frame of the payment page.</td></tr><tr><td valign="top"><code>successCallback</code></td><td valign="top">Decide the name of the function to call to receive the <code>getPaymentToken()</code> response.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentTokenSuccess</code></td><td valign="top">This function is called when the <code>getPaymentToken</code> generate successful.</td></tr><tr><td valign="top"><code>validationCallback</code></td><td valign="top">Decide the name of the function to call to receive the validation messages.</td><td valign="top"><code>String</code></td><td valign="top"><code>ClearentValidation</code></td><td valign="top">None</td></tr></tbody></table>


# Methods

See the following table to configure your payment page:

<table data-full-width="true"><thead><tr><th valign="top">Using this method…</th><th valign="top">You can…</th><th valign="top">Sample Code</th><th valign="top">Remark</th></tr></thead><tbody><tr><td valign="top"><code>addMetaKeyBlocker()</code></td><td valign="top"><p>Block meta key combinations (alt or ctrl) for the hosting page.</p><p>Some card readers may generate keystrokes that include meta keys even after the card read is complete, causing unnecessary behavior in the browser window.</p><p></p><p><mark style="background-color:green;"><strong>Tip</strong>:</mark> To make this setting effective, set the <code>enableReader</code> member to <code>True</code>.</p></td><td valign="top"><code>&#x3C;script> ClearentSDK.addMetaKeyBlocker(); &#x3C;/script></code></td><td valign="top">This setting blocks certain meta key combinations, except for closing the window (Ctrl + W), opening a new window (Ctrl + N), or opening a new tab (Ctrl + T).</td></tr><tr><td valign="top"><code>getPaymentToken()</code></td><td valign="top">Receive a token for payment gateway transaction, calling <code>successCallback</code> on success or <code>errorCallback</code> on error.</td><td valign="top"><code>ClearentSDK.getPaymentToken();</code></td><td valign="top">None</td></tr><tr><td valign="top"><code>init(obj)</code></td><td valign="top">Initialize the JavaScript SDK integration and create the Payment Details form for entry.</td><td valign="top"><code>// Sandbox URL for testing</code><br><code>// use Sandbox public key &#x3C;script src="https://gateway-int.clearent.net/js-sdk/js/clearent-host.js">&#x3C;/script> &#x3C;script> ClearentSDK.init({ "baseUrl": "https://gateway-int.clearent.net", "pk": "YOUR_SANDBOX_PUBLIC_KEY_HERE", }); &#x3C;/script></code></td><td valign="top">You can set the properties of the JSON-formatted object when you initialize the JavaScript SDK integration.</td></tr><tr><td valign="top"><code>removeMetaKeyBlocker()</code></td><td valign="top">Remove a meta key combination blocker enabled using the <code>blockMetaKeys</code> member or the <code>addMetaKeyBlocker</code> method.</td><td valign="top"><code>&#x3C;script> ClearentSDK.removeMetaKeyBlocker(); &#x3C;/script></code></td><td valign="top"> </td></tr><tr><td valign="top"><code>reset()</code></td><td valign="top"><p>Reset the JavaScript SDK integration.</p><p></p><p><mark style="background-color:red;"><strong>Warning</strong>:</mark> When you use the <code>reset()</code> method, the Xplor Pay Payment iFrame is completely removed.</p></td><td valign="top"><code>ClearentSDK.reset();</code></td><td valign="top">You can call <code>Clearent.init</code> to initialise the JavaScript SDK integration.</td></tr><tr><td valign="top"><code>ClearentCardReadComplete()</code></td><td valign="top">Call the function when the card read process is complete using the USB card reader.</td><td valign="top"><code>function ClearentCardReadComplete(){ console.log("Card Read is complete"); }</code></td><td valign="top">You can call the function if it is defined on the host page. This function does not return card data or Europay, Mastercard and Visa (EMV) data to maintain the Payment Card Industry (PCI) compliances.</td></tr><tr><td valign="top"><code>ClearentCardReadStart()</code></td><td valign="top">Call the function when the card read process starts using the USB card reader.</td><td valign="top"><code>function ClearentCardReadStart(){ console.log("Card Read has started"); }</code></td><td valign="top">You can call the function if it is defined on the host page.</td></tr><tr><td valign="top"><code>ClearentEntryModeChange(mode)</code></td><td valign="top">Call the function when the entry mode changes to manual or swipe.</td><td valign="top"><code>function ClearentEntryModeChange(mode){ console.log("User set SDK to mode: ", mode); }</code></td><td valign="top">You can call the function if it is defined on the host page.</td></tr><tr><td valign="top"><code>ClearentOnPaymentTypeChange(paymentType)</code></td><td valign="top">Call the function to receive a raw server response or a JSON-formatted response data object if <code>getPaymentToken</code> returns successfully.</td><td valign="top"><code>function ClearentOnPaymentTypeChange(paymentType) { console.log("Payment Type was changed to: " + paymentType); }</code></td><td valign="top">You can call the function if it is defined on the host page.</td></tr><tr><td valign="top"><code>ClearentTokenError(responseRaw, responseJSON)</code></td><td valign="top">Call the function to receive a raw server response or a JSON-formatted response data object if <code>getPaymentToken</code> returns an error.</td><td valign="top"><code>function ClearentTokenError(responseRaw, responseJSON){ console.log("ClearentTokenError"); console.log(responseRaw); console.log(responseJSON); }</code></td><td valign="top">You can call the function if it is defined on the host page.</td></tr><tr><td valign="top"><code>ClearentTokenSuccess(responseRaw, responseJSON)</code></td><td valign="top">Call the function to receive a raw server response or a JSON-formatted response data object if <code>getPaymentToken</code> is successful.</td><td valign="top"><code>function ClearentTokenSuccess(responseRaw,responseJSON){ console.log("ClearentTokenSuccess"); console.log(responseRaw); console.log(responseJSON); // now you can send the token to your server // to complete the transaction via mobile-gateway }</code></td><td valign="top">You can call the function if it is defined on the host page.</td></tr><tr><td valign="top"><code>ClearentValidation(messages)</code></td><td valign="top">Call the function to validate the payment form fields information that returns the validation message with a JavaScript array.</td><td valign="top"><code>function ClearentValidation(messages) { console.log("ClearentValidation"); console.log(messages); // you can handle these messages and display in your own form // empty messages array indicates no validation errors }</code></td><td valign="top">When the payment fields have valid information, a JavaScript array in the validation message will be empty.</td></tr></tbody></table>


# Card validations

The following client-side validations follow recommended security practices and help prevent attackers from using your website to test stolen cards:

* [Card number](/guides/javascript/card-validations/card-number)
* [Card expiration date](/guides/javascript/card-validations/card-expiration-date)
* [CSC/CVC](/guides/javascript/card-validations/csc-cvc)


# Card number

Sometimes, your customer might enter a cancelled, non-issued or invalid card number in the [Payment Form](/guides/javascript/add-payment-form).

A card number is validated through the following steps:

* A card token is created.
* The card number field values are used, excluding any non-numeric characters.
* The remaining digits are processed by using the Luhn algorithm.

{% hint style="warning" %}
Passing the remaining digits of the credit card through the Luhn algorithm does not prove the validation but helps prevent typing errors.
{% endhint %}


# Card expiration date

Card payments require an expiration date unless the customer creates a card token.

The expiration date is validated through the following steps:

* The expiration date field values are used, excluding any non-numeric characters.
* The values are interpreted in a four‑digit format: a two‑digit month and a two‑digit year (MMYY).

{% hint style="warning" %}
The cardholder should enter two-digit year (YY) that is greater than or equal to the current year and two-digit month (MM) that is greater than or equal to the current month.
{% endhint %}


# CSC/CVC

By default, card payments require security codes (CSC, CID, CVC, CVV, CVV2).&#x20;

Card security codes are validated using CSC/CVC field values, excluding non-numeric characters.

Cards that include *three*-digit security code:

* Visa
* MasterCard
* Discover
* Diner’s Club
* JCB

American Express card only includes *four*-digit security code.


# Mobile EMV

The **Mobile EMV** SDK helps you integrate payment acceptance into your iOS or Android app. It works with the [Mobile Payments API](https://docs.xplorpay.com/api-references/payments/mobile/mobile-payment-transactions) to reduce PCI scope through layered security controls. The SDK supports audio‑jack and Bluetooth‑enabled mobile card readers so you can accept various payment types, including chip card payments.

See the following articles to integrate the **Mobile EMV** SDK:

* [iOS framework](/guides/mobile-emv/ios-framework)
* [Android framework](/guides/mobile-emv/android-framework)
* [IDTech VP3300](/guides/mobile-emv/idtech-vp3300)
* [Start transaction](/guides/mobile-emv/start-transaction)
* [Generate JSON Web Token](/guides/mobile-emv/generate-json-web-token)
* [Feedback messages](/guides/mobile-emv/feedback-messages)
* [ClearentWrapper](/guides/mobile-emv/clearentwrapper)


# iOS framework

The iOS framework integration steps help you to integrate payment acceptance into your iOS app.

{% stepper %}
{% step %}
Integrating the iOS framework connects your app to the VP3300 mobile card reader using Apple’s Bluetooth implementation in the IDTech framework.
{% endstep %}

{% step %}
The framework sends messages to your iOS app that guide customers during their interaction with the card reader in a transaction.
{% endstep %}

{% step %}
The iOS framework secures the card data after a successful read and sends it to the Xplor Pay server.
{% endstep %}

{% step %}
The iOS framework packages the secured card data as an encrypted JSON Web Token (JWT) and sends it to your app through a callback function.&#x20;
{% endstep %}

{% step %}
You can send the encrypted JSON Web Token (JWT) to the mobile gateway to process the payment.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The iOS framework uses the [IDTech iOS framework](https://idtechproducts.atlassian.net/wiki/spaces/KB/pages/71754539/Integrating+Applications+for+Multiple+ID+TECH+SDKs#iOS-SDK) to read card data on the VP3300 mobile card reader. You can continue to use other [IDTech frameworks](https://idtechproducts.atlassian.net/wiki/spaces/KB/pages/71703365/iOS+Development+-+Home) if your requirements don’t meet with the recommended workflow.
{% endhint %}

See the following articles to integrate the iOS framework:

* [Prerequisites](/guides/mobile-emv/ios-framework/prerequisites)
* [Start Bluetooth connection](/guides/mobile-emv/ios-framework/start-bluetooth-connection)
* [Pair card reader](/guides/mobile-emv/idtech-vp3300/pair-card-reader)
* [Integrate iOS framework](/guides/mobile-emv/ios-framework/integrate-ios-framework)
* [Set iOS framework](/guides/mobile-emv/ios-framework/set-ios-framework)
* [Optional settings](/guides/mobile-emv/ios-framework/optional-settings)


# Prerequisites

Before you integrate the iOS framework into your app, make sure you have the following:

:white\_check\_mark: [IDTech.xcframework v4.0.158](https://github.com/xplor-pay/ClearentIdtechIOSFrameworkPod/tree/4.0.158/ClearentIdtechIOSFrameworkPod/ClearentIdtechIOSFramework.xcframework) or later

:white\_check\_mark: [IDTech.bundle v4.0.158](https://github.com/xplor-pay/ClearentIdtechIOSFrameworkPod/tree/4.0.158/ClearentIdtechIOSFrameworkPod/IDTech.bundle) for translating error codes to feedback messages, including:

* &#x20;[IDTech.bundle](https://github.com/xplor-pay/ClearentIdtechIOSFrameworkPod/tree/4.0.158/ClearentIdtechIOSFrameworkPod/IDTech.bundle)
* [IdtechMessages.bundle](https://github.com/xplor-pay/ClearentIdtechIOSFrameworkPod/tree/4.0.158/ClearentIdtechIOSFrameworkPod/ClearentIdtechMessages.bundle)
* [CocoaLumberjack.xcframework](https://github.com/xplor-pay/ClearentIdtechIOSFrameworkPod/tree/4.0.158/ClearentIdtechIOSFrameworkPod/CocoaLumberjack.xcframework)


# Start Bluetooth connection

To start a Bluetooth connection into your iOS app:

{% stepper %}
{% step %}
Add the following code to receive messages from the iOS framework when Bluetooth starts searching for the card reader in an iOS device Bluetooth setting.

{% code lineNumbers="true" %}

```javascript
ClearentConnection *connection = [[ClearentConnection alloc] initBluetoothSearch];
                                  [clearentVP3300 startConnection:connection];
```

{% endcode %}
{% endstep %}

{% step %}
Add the following delegate to discover the card reader in the Bluetooth settings of an iOS device.

{% code lineNumbers="true" %}

```javascript
- (void) bluetoothDevices:(NSArray *)bluetoothDevices;
```

{% endcode %}
{% endstep %}
{% endstepper %}


# Integrate iOS framework

To integrate the iOS framework into your app:

{% stepper %}
{% step %}
Install the latest version of [Carthage](https://github.com/Carthage/Carthage#installing-carthage).
{% endstep %}

{% step %}
Add the iOS framework line to your `cartfile`:

```javascript
github "Clearent/iOS-framework"
```

{% endstep %}

{% step %}
Run the following command in the root folder of your project:

```javascript
Carthage update
```

It imports a copy of the iOS framework and builds in the local folder Carthage/Build path.
{% endstep %}

{% step %}
Move the iOS framework from the Carthage/Build folder to the Embedded Binaries section in the **General settings** tab of your iOS app’s target.
{% endstep %}

{% step %}
Click the **+** icon.
{% endstep %}

{% step %}
Select **New Copy Files Phase** to copy debug symbols for debugging and crash reporting on iOS app.
{% endstep %}

{% step %}
Click the **Destination** menu.
{% endstep %}

{% step %}
Select **Products Directory** from the dropdown options.
{% endstep %}

{% step %}
Select the corresponding dSYM file from the iOS framework folder and upload the dSYM file.
{% endstep %}
{% endstepper %}


# Set iOS framework

To set up the iOS framework for your Objective-C app:

{% stepper %}
{% step %}
Import the iOS framework header into your code.

```objective-c
#import <ClearentIdtechIOSFramework/ClearentIdtechIOSFramework.h>
```

{% endstep %}

{% step %}
Add the `Clearent_Public_IDTech_VP3300_Delegate` interface to your code.

```objective-c
@interface ViewController : UIViewController<UIAlertViewDelegate,Clearent_Public_IDTech_VP3300_Delegate, UIActionSheetDelegate,MFMailComposeViewControllerDelegate>
```

{% endstep %}

{% step %}
Add the `ClearentManualEntryDelegate` interface as a backup if the card reader fails to read the card.

```objective-c
@interface ViewController : UIViewController<UIAlertViewDelegate,Clearent_Public_IDTech_VP3300_Delegate, UIActionSheetDelegate,MFMailComposeViewControllerDelegate>,ClearentManualEntryDelegate
```

{% endstep %}

{% step %}
Add the `successTransactionToken` method to get a JSON Web Token (JWT) that represents the credit card and the current transaction request.

```objective-c
- (void)successTransactionToken:(ClearentTransactionToken *)clearentTransactionToken;
```

The iOS Framework calls the `successTransactionToken` method when tokenization is successful after reading the card data, either by swiping or inserting the card with an EMV chip. You can submit this token to the mobile payment gateway to process the payment.
{% endstep %}

{% step %}
Add the `clearentFeedback` method to return messages that guide customers during their interaction with the card reader.

```objective-c
- (void)feedback:(ClearentFeedback *)clearentFeedback;
```

{% endstep %}

{% step %}
Add the `deviceConnected` method to check if the card reader is connected to your iOS app.

```objective-c
-(void) deviceConnected;
```

{% endstep %}

{% step %}
Add the `deviceDisconnected` method to check if the card reader is disconnected from your iOS app.

```objective-c
-(void) deviceDisconnected;
```

{% endstep %}

{% step %}
Add the following framework objects to interact with the card reader.

```objective-c
Clearent_VP3300 *clearentVP3300;
ClearentManualEntry *clearentManualEntry;
```

{% endstep %}
{% endstepper %}

{% hint style="info" %}
Visit the [demo](https://github.com/clearent/IDTech_VP3300_Objc_Demo) site to explore code samples.
{% endhint %}


# Optional settings

The following settings are *optional* and won’t affect your iOS app:

{% hint style="warning" %}
Check and apply these settings if any errors occur while integrating the iOS framework into your app.
{% endhint %}

* Set the **Allow Non-modular Includes in Framework Modules** setting to **Yes** for your Objective-C and Swift iOS app.

<figure><img src="/files/UykDzLIfeiNLiA2KEKiV" alt=""><figcaption><p>iOS app settings</p></figcaption></figure>

* Add `-Xcc -Wno-error=non-modular-include-in-framework-module` to the **Other Swift Flags** setting for your Swift iOS app.

<figure><img src="/files/tFOIlCDvj7wwdllfFs9I" alt=""><figcaption><p>iOS app settings</p></figcaption></figure>


# Android framework

The Android framework integration steps help you to integrate payment acceptance into your Android app.

{% stepper %}
{% step %}
Integrating with the Android framework enables your app to interact with the IDTech card reader for payment processing.
{% endstep %}

{% step %}
The Android framework sends a JSON Web Token (JWT) through the public listener without handling the card data.
{% endstep %}

{% step %}
You can use the /rest/v2/mobile/transactions/sale endpoint to submit a JSON Web Token (JWT) and process a payment in your Android app.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Find the latest .jar files in the [android-idtech-sdk/sdk/lib](https://github.com/clearent/android-idtech-sdk/tree/master/sdk/lib) folder.
{% endhint %}

When you integrate the Android framework into your app, you might encounter the following:

* The card reader uses the IDTech framework for communication when the Android framework applies EMV configuration to it.
* The configuration process may take some time and can occasionally fail, but these issues are manageable with retry logic.
* The Android framework saves the card reader’s serial number after a successful initial configuration to avoid reconfiguring it later.

{% hint style="warning" %}
Check that the [IDTech VP3300](/guides/mobile-emv/idtech-vp3300) is connected to your Android app before starting the payment process.
{% endhint %}

See the following articles to integrate the iOS framework:

* [Integrate Android framework](/guides/mobile-emv/android-framework/integrate-android-framework)
* [Disable EMV configuration](/guides/mobile-emv/android-framework/disable-emv-configuration)
* [Optional settings](/guides/mobile-emv/android-framework/optional-settings)


# Integrate Android framework

{% hint style="success" %}
Before you integrate the Android framework into your app:

* Contact [Xplor Pay](https://xplorpay.com/getting-started/) for a card reader and a public key.
* Locate the required .jar files in the [android-idtech-sdk/sdk/lib](https://github.com/clearent/android-idtech-sdk/tree/master/sdk/lib) folder.
  {% endhint %}

To integrate the Android framework into your app:

{% stepper %}
{% step %}
Add the `PublicOnReceiverListener` interface object to communicate back with your Android app.
{% endstep %}

{% step %}
Add the `ApplicationContext` interface object in your project for 2 in 1 mode (DIP/SWIPE).
{% endstep %}

{% step %}
Add the `ApplicationContext3In1` interface object in your project for 3 in 1 mode (CONTACTLESS/DIP/SWIPE).
{% endstep %}

{% step %}
Add the `DeviceFactory` interface to get an object of the device in which your app is installed.

This object enables your Android app to interact with the card reader.
{% endstep %}

{% step %}
Add the `device_configurePeripheralAndConnect()` method to use an audio jack reader for processing the payment through your Android app.

The `device_configurePeripheralAndConnect()` method retrieves an audio jack peripheral configuration from Xplor Pay's system based on the Android device in use. Peripheral specifications, such as the baud rate, vary across different Android devices.

{% hint style="warning" %}
If Xplor Pay does not support an audio jack peripheral configuration for your Android device, use the .xml file as a fallback based on the IDTech format. Insert the file location into the ApplicationContext interface object. Refer to the .xml file in the xml folder available in SDK Android Framework.
{% endhint %}
{% endstep %}

{% step %}
Add the `registerListen()` method to register the card reader connected using the Bluetooth settings.
{% endstep %}

{% step %}
Add the `isReady()` method to get notifications after connecting the card reader successfully.

{% hint style="warning" %}
Do not use the card reader until the public listener calls the `isReady()` method.
{% endhint %}
{% endstep %}

{% step %}
Add the `device_startTransaction()` method to start the card data process for the payment transaction.

{% hint style="warning" %}
The initial connection to the card reader may take some time as the configuration is applied to the reader’s flash memory. Once your app starts and connects to the card reader, no further configuration is required. A flag in the local storage prevents any additional configurations.
{% endhint %}
{% endstep %}
{% endstepper %}


# Disable EMV configuration

{% hint style="success" %}
Make sure that you have completed the integration certification process before disabling the EMV configuration.
{% endhint %}

To disable EMV configuration:

{% stepper %}
{% step %}
Implement the `ApplicationContext` interface method.
{% endstep %}

{% step %}
Set the `disableAutoConfiguration()` to `true` in the interface method.
{% endstep %}
{% endstepper %}


# Optional settings

The following table explain the additional settings for your Android app:

<table><thead><tr><th width="262" valign="top">Call this method…</th><th valign="top">To…</th></tr></thead><tbody><tr><td valign="top"><code>handleConfigurationErrors</code></td><td valign="top">Receive alerts for configuration-related issues.</td></tr><tr><td valign="top"><code>handleCardProcessingResponse</code></td><td valign="top">Monitor issues during the card payment processing.</td></tr><tr><td valign="top"><code>lcdDisplay</code></td><td valign="top">Monitor the rest of the communication during the card payment processing.</td></tr><tr><td valign="top"><code>successfulTransactionToken</code></td><td valign="top">Receive a JSON Web Token (JWT) after a successful card read to process the payment.</td></tr></tbody></table>


# IDTech VP3300

The **Mobile EMV SDK** integration supports the IDTech VP3300 mobile card reader, which offers:

* Bluetooth connectivity
* Audio jack connectivity
* P2PE technology
* EMV

{% hint style="info" %}
Upgrading the Mobile EMV SDK integration allows you to configure the brand logo on the mobile card reader.
{% endhint %}


# Charge battery

To charge the VP3300 card reader battery:

{% stepper %}
{% step %}
Connect the standard micro-USB cable to the card reader.
{% endstep %}

{% step %}
Insert the adapter into a power socket.
{% endstep %}
{% endstepper %}

The following table explains the battery charging statuses of the VP3300 card reader:

<table><thead><tr><th valign="top">Indication</th><th valign="top">Status</th></tr></thead><tbody><tr><td valign="top">When the bottom LED (closest to the bottom edge of the card reader, furthest from the ID TECH logo) flashes solid red</td><td valign="top">The battery is connected to power and charging</td></tr><tr><td valign="top">When the bottom LED (closest to the bottom edge of the card reader, furthest from the ID TECH logo) flashes amber</td><td valign="top">The battery is low and needs to be charged</td></tr><tr><td valign="top">When the bottom LED (closest to the bottom edge of the card reader, furthest from the ID TECH logo) stops flashing</td><td valign="top">The battery is full</td></tr></tbody></table>


# Pair card reader

To pair the IDTech VP3300 card reader with the device:

{% stepper %}
{% step %}
Turn on **Bluetooth** in the iOS device settings.

Bluetooth Low Energy (BLE) technology seamlessly pairs the VP3300 card reader with the iOS device automatically.
{% endstep %}

{% step %}
Install your app on the device.

The following table explains the Bluetooth settings on the VP3300 card reader:

<table><thead><tr><th valign="top">Indication</th><th valign="top">Mode</th></tr></thead><tbody><tr><td valign="top">The Bluetooth LED is off.</td><td valign="top">Sleep</td></tr><tr><td valign="top">The Bluetooth LED flashes a steady blue light.</td><td valign="top">Stand-by</td></tr><tr><td valign="top">The Bluetooth LED flashes a blue light every five seconds.</td><td valign="top">Paired and connected</td></tr></tbody></table>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Ensure the card reader has a fully charged battery before pairing it with the device.
{% endhint %}


# Read card data

To read the card data on the VP3300 card reader when you request a payment through your iOS app:

{% stepper %}
{% step %}
Press the power button to turn on the card reader.

The Bluetooth settings will turn on and pair automatically with your iOS device. For more information, see [Pairing card reader](/guides/mobile-emv/idtech-vp3300/pair-card-reader).
{% endstep %}

{% step %}
Insert the card into the card slot of the reader.

{% hint style="warning" %}
Insert the chip side first into the card slot of the reader.
{% endhint %}
{% endstep %}

{% step %}
Insert the card and wait until the middle LED on the back of the card reader flashes green for two seconds.
{% endstep %}
{% endstepper %}


# Start transaction

To start a transaction into your app:

{% stepper %}
{% step %}
Add an object that initializes the transaction.

{% code lineNumbers="true" %}

```javascript
ClearentVP3300Config *config = [[ClearentVP3300Config alloc]init];
        [config setPublicKey:publicKey];
        [config setClearentBaseUrl:baseURL];
        config.contactAutoConfiguration = false;
        config.contactlessAutoConfiguration = false;
        config.contactless = true;
        clearentVP3300 = [[Clearent_VP3300 alloc]  initWithConnectionHandling:self clearentVP3300Configuration:config];
        clearentManualEntry = [[ClearentManualEntry alloc]  init];
        [clearentManualEntry setClearentBaseUrl:baseURL];
        [clearentManualEntry setPublicKey:publicKey];
```

{% endcode %}

{% hint style="info" %}
Visit [Payment Gateway](https://gateway-sb.clearent.net/login.seam) to test your integration with iOS framework and to go live.
{% endhint %}
{% endstep %}

{% step %}
Add an object that represents the payment request.

{% code lineNumbers="true" %}

```javascript
ClearentPayment *clearentPayment = [[ClearentPayment alloc] init];
    [clearentPayment setAmount:theAmount];
    clearentPayment.amtOther = 0;
    clearentPayment.type = 0;
    clearentPayment.timeout = 10;
    clearentPayment.tags = nil;
    clearentPayment.fallback = true;
    clearentPayment.forceOnline = false;
```

{% endcode %}

{% hint style="warning" %}
The `setAmount` field is *required* for certain EMV checks and *must* be provided.
{% endhint %}
{% endstep %}

{% step %}
Add an object that represents a Bluetooth connection.

```javascript
ClearentConnection *clearentConnection = [[ClearentConnection alloc] initBluetoothWithFriendlyName:self.deviceFriendlyName];
```

The framework connects to the card reader over Bluetooth and sends messages to the feedback delegate to start a transaction.

```javascript
ClearentResponse *response = [clearentVP3300 startTransaction:clearentPayment clearentConnection:clearentConnection];
         if (response.responseType != RESPONSE_SUCCESS) 
         {
             //Notify user the transaction could not be started.
         }
```

The iOS framework secures the card data and calls the `successTransactionToken` delegate.
{% endstep %}

{% step %}
Use the POST method with the `/rest/v2/mobile/transactions/sale` endpoint to create a transaction on your app using a mobile JSON Web Token (JWT).
{% endstep %}
{% endstepper %}

{% hint style="info" %}
See the [Mobile Payment Transaction API](https://docs.xplorpay.com/api-references/payments/mobile) for more information.
{% endhint %}


# Generate JSON Web Token

To generate a JSON Web Token (JWT) for manual card entry:

{% stepper %}
{% step %}
Add an object to implement the `ManualEntry` interface.
{% endstep %}

{% step %}
Add the `HasManualTokenizingSupport` interface.

The `HasManualTokenizingSupport` interface includes following methods:

{% code lineNumbers="true" %}

```javascript
//Returns a successful JSON Web Token.
void successfulTransactionToken(TransactionToken transactionToken);
//Handle errors related to the card.
void handleCardProcessingResponse(CardProcessingResponse cardProcessingResponse);
//Handle errors related to the manual entry request.
void handleManualEntryError(String message);
```

{% endcode %}
{% endstep %}

{% step %}
Add the `ManualCardTokenizer` object.

{% code lineNumbers="true" %}

```javascript
manualCardTokenizer = new ManualCardTokenizerImpl(this);
```

{% endcode %}
{% endstep %}

{% step %}
Add the `createTransactionToken` method call and include your card object.

{% code lineNumbers="true" %}

```javascript
manualCardTokenizer.createTransactionToken(manualEntry);
```

{% endcode %}
{% endstep %}
{% endstepper %}


# Feedback messages

The SDK framework sends feedback messages to the card reader about the [Bluetooth connectivity](/guides/mobile-emv/idtech-vp3300/pair-card-reader) when customers use the card reader to start a transaction. Feedback messages also include instructions to help customers interact with the card reader during transactions. For example, the card reader displays a feedback message to warn customers when they swipe or insert the card incorrectly.

The following enum type defines different types of feedback messages:

{% code title="" lineNumbers="true" %}

```javascript
typedef NS_ENUM(NSUInteger, the_FEEDBACK_MESSAGE_TYPE) 
            {
                the_FEEDBACK_USER_ACTION = 1,
                the_FEEDBACK_INFO = 2,
                the_FEEDBACK_BLUETOOTH = 3,
                the_FEEDBACK_ERROR = 4,
                the_FEEDBACK_TYPE_UNKNOWN = 0
            };
```

{% endcode %}

The following table explains about the feedback types included in the framework:

<table><thead><tr><th width="157.66668701171875" valign="top">Feedback type</th><th width="232.99993896484375" valign="top">Enum</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">User Action</td><td valign="top"><code>the_FEEDBACK_USER_ACTION</code></td><td valign="top">This feedback type allows displaying instructions to customers through the card reader during a transaction.</td></tr><tr><td valign="top">General Information</td><td valign="top"><code>the_FEEDBACK_INFO</code></td><td valign="top">This feedback type allows displaying information to customers through the card reader during a transaction.</td></tr><tr><td valign="top">Bluetooth Information</td><td valign="top"><code>the_FEEDBACK_BLUETOOTH</code></td><td valign="top">This feedback type allows displaying information related to Bluetooth connectivity.</td></tr><tr><td valign="top">Errors</td><td valign="top"><code>the_FEEDBACK_ERROR</code></td><td valign="top">This feedback type allows displaying errors to customers through the card reader during a transaction. Errors may occur due to an incorrect card swipe, a damaged chip, failed interaction between the card and the reader, or contactless failures. This feedback type provides error messages to guide customers when they face unsuccessful attempts to enter card details manually.</td></tr><tr><td valign="top">Not classified</td><td valign="top"><code>the_FEEDBACK_TYPE_UNKNOWN</code></td><td valign="top">This feedback type allows displaying information if the framework cannot classify unknown errors returned from the IDTech framework.</td></tr></tbody></table>

The following sections explain about feedback messages included in the feedback types:

### User Actions <a href="#user-actions" id="user-actions"></a>

The following tables explain the feedback messages included in `the_FEEDBACK_USER_ACTION` type:

#### General <a href="#general" id="general"></a>

<table><thead><tr><th width="294.66668701171875" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">PRESS BUTTON ON READER</td><td valign="top">This message instructs customers to press the button on the card reader. This action connects the card reader via Bluetooth to start a new transaction.</td></tr><tr><td valign="top">PLEASE SWIPE, TAP, OR INSERT</td><td valign="top"><p>This message instructs customers to provide the card data using any of the following actions:</p><ul><li><strong>Swipe</strong>: Swipe the card using the card slot of the reader.</li><li><strong>Tap</strong>: Tap the card on the contactless side of the card reader.</li></ul><p>Tap action only works when the card has a contactless symbol on it.</p><ul><li><strong>Insert</strong>: Insert the EMV chip side of the card into the card slot of the reader.</li></ul></td></tr><tr><td valign="top">INSERT/SWIPE CARD</td><td valign="top"><p>This message instructs customers to provide the card data using any of the following actions:</p><ul><li><strong>Insert</strong>: Insert the EMV chip side of the card into the card slot of the reader.</li><li><strong>Swipe</strong>: Swipe the card using the card slot of the reader.</li></ul></td></tr><tr><td valign="top">BLUETOOTH CONNECTED</td><td valign="top">This message informs customers that the card reader has successfully connected via Bluetooth.</td></tr><tr><td valign="top">USE MAGSTRIPE</td><td valign="top">This message instructs customers to use magstripe to swipe the card.</td></tr><tr><td valign="top">CARD INSERTED</td><td valign="top">This message informs customers that the card has been inserted into the reader.</td></tr><tr><td valign="top">CARD READ OK, REMOVE CARD</td><td valign="top">This message informs customers that the card has been successfully read and instructs customers to remove the card from the reader.</td></tr><tr><td valign="top">TRY MSR AGAIN</td><td valign="top">This message informs customers to swipe the card again if the framework fails to read the card.</td></tr><tr><td valign="top">TAP FAILED. INSERT/SWIPE</td><td valign="top">This message instructs customers to insert or swipe the card again if contactless interaction fails and informs to them that they cannot use the contactless feature for a new transaction.</td></tr><tr><td valign="top">RETRY TAP</td><td valign="top">This message instructs customers to tap the card again if contactless interaction fails due to incorrect tap on the card reader.</td></tr><tr><td valign="top">CARD HAS CHIP. TRY INSERT</td><td valign="top">This message instructs customers to insert the card with the EMV chip side first into the card slot of the reader.</td></tr><tr><td valign="top">USE CHIP READER</td><td valign="top">This message instructs customers to insert the card with the chip side into the card slot of the reader.</td></tr><tr><td valign="top">INSERT CARD</td><td valign="top">This message instructs customers to insert the card with the chip side into the card slot of the reader.</td></tr><tr><td valign="top">CARD READ ERROR</td><td valign="top">This message informs customers that something went wrong while the framework was reading the card and start a new transaction.</td></tr><tr><td valign="top">FAILED TO READ CARD. TRY INSERT/SWIPE</td><td valign="top">This message informs customers to swipe the card again if the framework fails to read the card and instructs customers to insert or swipe the card again.</td></tr><tr><td valign="top">FALLBACK_TO_SWIPE_REQUEST</td><td valign="top">This message informs customers to swipe the card again if the framework fails to read the card and instructs customers to swipe the card again.</td></tr><tr><td valign="top">BAD CHIP, PULL CARD OUT, WAIT FOR GREEN LED, TRY SWIPE</td><td valign="top">This message informs customers that the inserted card’s chip is in bad condition. It instructs customers to wait for the green LED to flash to start a new transaction. Additionally, it instructs customers to swipe the card again.</td></tr><tr><td valign="top">FAILED TO START SWIPE. TRY AGAIN BUT THIS TIME PULL CARD OUT WHEN INSTRUCTED</td><td valign="top">This message informs customers when the framework fails to process the card data after swiping the card into the reader. Additionally, it instructs customers to insert the card and not remove it until the next instruction.</td></tr><tr><td valign="top">TIMEOUT</td><td valign="top">This message informs customers that the transaction has timed out in the process and instructs customers to start a new transaction.</td></tr></tbody></table>

#### Contactless <a href="#contactless" id="contactless"></a>

<table><thead><tr><th width="295.33331298828125" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">This type (MSD) of contactless is not supported. Insert card with chip first, then start transaction.</td><td valign="top">This message informs customers when the framework does not support the MSD contactless feature. It instructs customers to insert the card with the chip side first into the card slot of the reader. This action disables the contactless interface for a new transaction.</td></tr><tr><td valign="top">PRESENT ONE CARD ONLY</td><td valign="top">This message informs customers when they enter the contactless NFC field with two different contactless cards simultaneously, causing confusion for the framework. It instructs customers to enter the contactless NFC field with only one card.</td></tr><tr><td valign="top">TAP FAILED. INSERT CHIP CARD FIRST BEFORE TRYING AGAIN. IF PHONE TRY AGAIN OR ASK FOR CARD.</td><td valign="top">This message instructs customers to insert the card with the chip side first again if contactless interaction fails to read the card. Additionally, it instructs customers to try again if they use an iPhone to provide the card data and the framework fails to process. This message also informs customers to use another form of payment to process the transaction.</td></tr><tr><td valign="top">SEE PHONE</td><td valign="top">This message instructs customers to complete any security feature on their iPhone to use the contactless interface of the framework for the transaction.</td></tr></tbody></table>

#### Audio Jack <a href="#audio-jack" id="audio-jack"></a>

<table><thead><tr><th width="294.6666259765625" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">PLUGIN AUDIO JACK</td><td valign="top">This message instructs customers to insert the audio jack into the device when the framework configures the connection for the audio jack.</td></tr><tr><td valign="top">DISCONNECTING BLUETOOTH. PLUG IN AUDIO JACK</td><td valign="top">This message instructs customers to insert the audio jack into the device when the framework configures the connection for the audio jack. It also informs customers that the Bluetooth is disconnecting in the card reader.</td></tr><tr><td valign="top">UNPLUG AUDIO JACK BEFORE CONNECTING TO BLUETOOTH</td><td valign="top">This message instructs customers to remove the audio jack from the device and connect the reader via Bluetooth.</td></tr><tr><td valign="top">AUDIO JACK CONNECTED</td><td valign="top">This message informs customers that the audio jack is connected.</td></tr><tr><td valign="top">AUDIO JACK LOW VOLUME. TURN UP VOLUME AND RECONNECT</td><td valign="top">This message instructs customers to turn up the volume to use the audio jack reader with the framework.</td></tr></tbody></table>

#### Additional Bluetooth <a href="#additional-bluetooth" id="additional-bluetooth"></a>

<table><thead><tr><th width="294.66668701171875" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">NEW BLUETOOTH CONNECTION REQUESTED. DISCONNECT CURRENT BLUETOOTH</td><td valign="top">This message instructs customers to disconnect Bluetooth from the current device and informs customers that a new Bluetooth connection has been discovered.</td></tr><tr><td valign="top">BLUETOOTH DISCONNECTED</td><td valign="top">This message informs customers that Bluetooth is disconnected.</td></tr><tr><td valign="top">DEVICE NOT CONNECTED</td><td valign="top">This message informs customers when the framework has an issue with the device.</td></tr><tr><td valign="top">PAYMENT REQUEST AND CONNECTION REQUIRED</td><td valign="top">This message informs customers when the framework encounters an issue with the connection of the payment request. It also instructs customers to cancel the transaction and start it again.</td></tr></tbody></table>

**Uncommon**

<table><thead><tr><th width="294" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">DEVICE NOT CONNECTED</td><td valign="top">This message informs customers when the framework has an issue with the device.</td></tr><tr><td valign="top">PAYMENT REQUEST AND CONNECTION REQUIRED</td><td valign="top">This message informs customers when the framework encounters an issue with the connection of the payment request. It also instructs customers to cancel the transaction and start it again.</td></tr></tbody></table>

### Informational <a href="#informational" id="informational"></a>

The following tables explain the feedback messages included in `the_FEEDBACK_INFO` type:

#### General <a href="#general.1" id="general.1"></a>

<table><thead><tr><th width="294.66668701171875" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">SEARCHING FOR POWERED ON BLUETOOTH READERS</td><td valign="top">This message informs customers when the framework searches for the card reader to connect via Bluetooth search.</td></tr><tr><td valign="top">CARD READ OK</td><td valign="top">This message informs customers when the framework successfully read the card data.</td></tr><tr><td valign="top">CARD SECURED</td><td valign="top">This message informs customers when the framework receives the card data and sends the transaction token (JSON Web-based Token) to your app for processing the payment.</td></tr><tr><td valign="top">GOING ONLINE</td><td valign="top">This message informs customers when the framework calls to the to secure the card data.</td></tr><tr><td valign="top">DECLINED RECEIPT SENT, REMOVE CARD</td><td valign="top">This message informs customers when the transaction is declined and the email describing the transaction send to the user’s email address, provided during the transaction. It also instructs customers to remove the card from the card reader.</td></tr><tr><td valign="top">Device Firmware version not found</td><td valign="top">This message informs customers when the framework cannot communicate with the card reader to identify its firmware version. This message appears to customers when using the card reader firmware version 151 or earlier and contactless feature.</td></tr><tr><td valign="top">Device Kernel Version Unknown</td><td valign="top">This message informs customers when the framework cannot communicate with the card reader to identify its kernel version.</td></tr><tr><td valign="top">Reader configured and ready</td><td valign="top">This message informs customers when the card reader is ready to use.</td></tr><tr><td valign="top">TRANSACTION STARTED</td><td valign="top">This message informs customers when the framework starts the payment process.</td></tr><tr><td valign="top">TRANSACTION FAILED</td><td valign="top">This message informs customers when the framework failed to process the payment.</td></tr><tr><td valign="top">CHIP NOT RECOGNIZED, PULL CARD OUT, WAIT FOR GREEN LED, TRY SWIPE</td><td valign="top">This message informs customers when the framework cannot identify the chip of the card to read the card data. It also instructs customers to remove the card from the card reader and wait until the Green LED flashes before swiping again.</td></tr><tr><td valign="top">Device connected. Waiting for configuration to complete...</td><td valign="top">This message informs customers when the framework connects to the device and to wait to complete the configuration of the device.</td></tr></tbody></table>

#### Contactless <a href="#contactless.1" id="contactless.1"></a>

<table><thead><tr><th width="294.66668701171875" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">AMOUNT IS OVER MAXIMUM LIMIT ALLOWED FOR TAP</td><td valign="top">This message informs customers when the framework identifies that an amount available over the maximum limit to use the contactless feature.</td></tr></tbody></table>

#### Audio Jack <a href="#audio-jack.1" id="audio-jack.1"></a>

<table><thead><tr><th width="295.33331298828125" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">AUDIO JACK ATTACHED</td><td valign="top">This message informs customers when the framework identifies that an audio jack has been attached to the device.</td></tr><tr><td valign="top">CONNECTING AUDIO JACK</td><td valign="top">This message informs customers when the framework identifies that an audio jack is connecting to the device.</td></tr><tr><td valign="top">AUDIO JACK REMOVED</td><td valign="top">This message informs customers when the framework identifies that an audio jack has been removed from the device.</td></tr><tr><td valign="top">AUDIO JACK DISCONNECTED</td><td valign="top">This message informs customers when the framework identifies that an audio jack has been disconnected from the device.</td></tr><tr><td valign="top">Powering up reader...</td><td valign="top">This message informs customers when the framework identifies that an audio jack is powering up to the device.</td></tr></tbody></table>

### Errors <a href="#errors" id="errors"></a>

The following tables explain the feedback messages included in `the_FEEDBACK_ERROR` type:

#### General <a href="#general.2" id="general.2"></a>

<table><thead><tr><th width="295.3333740234375" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">Card read error</td><td valign="top">This message informs customers when the framework has encountered an error during the card read.</td></tr><tr><td valign="top">CVM Unsupported. Insert card with chip first, then start transaction. Or try swipe.</td><td valign="top">This message informs customers when the framework cannot support the Cardholder Verification Method. It also instructs customers to insert the card with chip side first or swipe the card and start the transaction process.</td></tr><tr><td valign="top">Card declined</td><td valign="top">This message informs customers when the framework declines the card offline.</td></tr><tr><td valign="top">TIMEOUT</td><td valign="top">This message informs customers when the framework has timed out the request during the payment process.</td></tr><tr><td valign="top">Create Transaction Token Failed</td><td valign="top">This message informs customers when the framework cannot secure the card data and cannot send the transaction token (JSON Web-based Token) to your app for processing the payment.</td></tr><tr><td valign="top">Sending Declined Receipt Failed</td><td valign="top">This message informs customers when the framework has declined the payment process and failed to connect to the servers to send an e-mail to the customer. The email request process is separate from the payment process and can also fail due to slow or no internet connection.</td></tr><tr><td valign="top">Failed to read card</td><td valign="top">This message informs customers when the framework has failed to read the card.</td></tr><tr><td valign="top">DISABLE CONFIGURATION REQUEST TO RUN TRANSACTION</td><td valign="top">This message instructs customers to stop configuration request when the framework is starting the transaction process during the configuration.</td></tr><tr><td valign="top">READER NOT CONFIGURED</td><td valign="top">This message informs customers when the framework has determined that the card reader is not configured.</td></tr><tr><td valign="top">TRANSACTION FAILED</td><td valign="top">This message informs customers when the framework failed to process the payment.</td></tr><tr><td valign="top">UNABLE TO GO ONLINE</td><td valign="top">This message informs customers when the framework cannot connect the servers due to slow or no internet connection.</td></tr><tr><td valign="top">PAYMENT REQUEST NOT FOUND</td><td valign="top">This message informs customers when the framework cannot determine the payment request.</td></tr><tr><td valign="top">TERMINATED</td><td valign="top">This message informs customers when transaction cannot succeed and has been terminated from the IDTech framework perspective. It also instructs customers to disable the contactless interface as the IDTech framework has indicated that the contactless interface cannot work. The framework will restart the transaction.</td></tr><tr><td valign="top">CARD UNSUPPORTED</td><td valign="top">This message informs customers when the IDTech framework has determined the card is unsupported.</td></tr><tr><td valign="top">UNABLE TO GO ONLINE, FAILED TO SEND DECLINED RECEIPT</td><td valign="top">This message informs customers when the framework has failed to connect the servers to send an email to the customer. The email request process is separate from the payment process and can also fail due to slow or no internet connection.</td></tr></tbody></table>

#### Bluetooth <a href="#bluetooth" id="bluetooth"></a>

<table><thead><tr><th width="294.6666259765625" valign="top">Message</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top">Bluetooth friendly name required</td><td valign="top">This message informs customers when the framework identifies that an amount available over the maximum limit to use the contactless feature.</td></tr></tbody></table>

**Contactless**

<table><thead><tr><th width="294.66668701171875">Message</th><th>Description</th></tr></thead><tbody><tr><td>Contactless not supported. Insert card with chip first, then start transaction</td><td>This message informs customers when the the framework has identified that the contactless interface has been disabled. It also instructs customers to insert the card with the chip side into the card reader to start the transaction.</td></tr><tr><td>TAP FAILED</td><td>This message instructs customers to insert or swipe the card again if contactless interaction fails and informs customers that they cannot use the contactless feature for a new transaction.</td></tr><tr><td>CARD BLOCKED</td><td>This message informs customers when the the framework cannot read the card data for some unknown reason when they use the contactless interface feature during the payment process.</td></tr><tr><td>CARD EXPIRED</td><td>This message informs customers when the the framework cannot read the card data for some unknown reason when they use the contactless interface feature during the payment process.</td></tr></tbody></table>


# ClearentWrapper

The **ClearentWrapper** provides a simplified interface over the iOS framework. It enables card-present and manual payment processing using the IDTech VP3300 card reader.

The ClearentWrapper is a singleton class that:

* Serves as the main entry point for the SDK.
* Wraps the underlying framework and IDTech integration.
* Simplifies common payment workflows.
* Handles Bluetooth pairing and device communication.
* Provides callbacks for user actions, status updates, and results.

See the following articles to integrate the ClearentWrapper class:

* [Prerequisites](/guides/mobile-emv/clearentwrapper/prerequisites)
* [Initialize SDK](/guides/mobile-emv/clearentwrapper/initialize-sdk)
* [Pair card reader](/guides/mobile-emv/clearentwrapper/pair-card-reader)
* [Start transaction](/guides/mobile-emv/clearentwrapper/start-transaction)
* [Manage transactions](/guides/mobile-emv/clearentwrapper/manage-transactions)
* [Handle reader information](/guides/mobile-emv/clearentwrapper/handle-reader-information)
* [Upload signature](/guides/mobile-emv/clearentwrapper/upload-signature)
* [Send e-mail receipt](/guides/mobile-emv/clearentwrapper/send-e-mail-receipt)
* [Process offline transactions](/guides/mobile-emv/clearentwrapper/process-offline-transactions)
* [Messaging and feedback](/guides/mobile-emv/clearentwrapper/messaging-and-feedback)


# Prerequisites

The ClearentWrapper class supports:

* Swift-based iOS app
* iOS 14 or later versions

You must provide:

* Base URL
* API access Key issued to you by Xplor Pay

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) and get API access key.
{% endhint %}

* Public Key (optional)

{% hint style="warning" %}
The SDK keeps these values in memory only. If you do not provide a public key, the SDK retrieves it from the backend.
{% endhint %}


# Initialize SDK

Initialize the ClearentWrapper with your configuration and set the delegate.

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let encryptionKeyData = Crypto.SHA256hash(
    data: "some_secret_here".data(using: .utf8)!
)
let config = ClearentWrapperConfiguration(
    baseURL: baseURL,
    apiKey: apiKey,
    publicKey: nil,
    offlineModeEncryptionKeyData: encryptionKeyData
)
ClearentWrapper.shared.initialize(with: config)
ClearentWrapper.shared.delegate = self
```

{% endcode %}

#### Implement the delegate

Conform to `ClearentWrapperProtocol` to receive:

* Status updates
* User actions
* Transaction results
* Errors and notifications


# Pair card reader

To process card-present transactions, pair a VP3300 reader via Bluetooth.

### Start pairing

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.startPairing(reconnectIfPossible: true)
```

{% endcode %}

### Handle discovered readers

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.connectTo(reader: reader)
```

{% endcode %}

### Pairing completion

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func didFinishedPairing() {
    // Reader is connected and ready
}
```

{% endcode %}

### Pairing a VP3300 card reader works

1. The SDK scans for nearby readers.
2. Returns a list of available devices.
3. You present the list to the user.
4. The user selects a reader.
5. The SDK connects and confirms pairing.


# Start transaction

You can process payments using:

* Card reader (recommended)
* Manual card entry

### Card reader transaction

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let saleEntity = SaleEntity(amount: 22.0, tipAmount: 5)
ClearentWrapper.shared.startTransaction(
    with: saleEntity,
    isManualTransaction: false
) { error in
    // Handle completion
}
```

{% endcode %}

#### Runtime callbacks

During the transaction, the SDK provides updates through delegate methods:

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func userActionNeeded(action: UserAction) {
    // Prompt user (for example, insert or swipe card)
}
func didReceiveInfo(info: UserInfo) {
    // Display status (for example, processing)
}
```

{% endcode %}

#### Transaction result

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func didFinishTransaction(
    response: TransactionResponse?,
    error: ClearentError?
) {
    if error == nil {
        // Transaction succeeded
    } else {
        // Handle error
    }
}
```

{% endcode %}

### Manual card entry

Use manual entry when a reader is unavailable.

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let saleEntity = SaleEntity(
    amount: 22.0,
    tipAmount: 5,
    card: "4111111111111111",
    csc: "999",
    expirationDateMMYY: "11/28"
)
ClearentWrapper.shared.startTransaction(
    with: saleEntity,
    manualEntryCardInfo: true
) { error in
    // Handle completion
}
```

{% endcode %}


# Manage transactions

### Cancel a transaction

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.cancelTransaction()
```

{% endcode %}

{% hint style="warning" %}
Works only before the card is read.
{% endhint %}

### Void a transaction

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.voidTransaction(
    transactionID: transactionID
) { response, error in
    // Handle result
}
```

{% endcode %}

{% hint style="warning" %}
Use when the transaction is not yet fully processed.
{% endhint %}

### Refund a transaction

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.refundTransaction(
    jwt: jwt,
    saleEntity: saleEntity
) { response, error in
    // Handle result
}
```

{% endcode %}


# Handle reader information

### Get current reader

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let currentReader = ClearentWrapperDefaults.pairedReader
```

{% endcode %}

### Get previously paired readers

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let recentReaders = ClearentWrapperDefaults.recentlyPairedReaders
```

{% endcode %}

### Check connection status

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let isConnected = ClearentWrapper.shared.isReaderConnected()
```

{% endcode %}

### Refresh reader status

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.startDeviceInfoUpdate()
```

{% endcode %}

#### Handle updates

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentUIManager.configuration.readerInfoReceived = { reader in
    // Update battery, signal, etc.
}
```

{% endcode %}


# Upload signature

Capture and upload a signature after a transaction.

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.sendSignatureWithImage(
    image: signatureImage
) { response, error in
    // Handle result
}
```

{% endcode %}

### Completion callback

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func didFinishedSignatureUploadWith(
    response: SignatureResponse?,
    error: ClearentError?
) {
    // Check success or failure
}
```

{% endcode %}

### Retry upload

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.resendSignature { response, error in
    // Retry logic
}
```

{% endcode %}


# Send e-mail receipt

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.sendReceipt(
    emailAddress: "customer@example.com"
) { response, error in
    // Handle result
}
```

{% endcode %}

### Completion callback

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func didFinishedSendingReceipt(
    response: ReceiptResponse?,
    error: ClearentError?
)
```

{% endcode %}


# Process offline transactions

Enable offline mode during initialization by providing:

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
offlineModeEncryptionKeyData
```

{% endcode %}

### Process stored transactions

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentWrapper.shared.processOfflineTransactions { error in
    // Handle result
}
```

{% endcode %}


# Messaging and feedback

The SDK provides standardized feedback for:

* User prompts (for example, insert card)
* Transaction status (for example, processing)
* Errors and recovery steps

To enable improved messaging:

1. Include `ClearentIdtechMessages.bundle`.
2. Add it to **Build Phases** → **Copy Bundle Resources.**


# Cloud EMV

Our semi-integrated **Cloud EMV** solution is a unified, cloud-based payment integration that enables point-of-sale (POS) systems to support a variety of payment devices, delivering a smoother payment experience.

Embed our [Cloud EMV APIs](https://docs.xplorpay.com/api-reference/payments/cards/transaction-emv) into your platform without managing [Payment Card Industry (PCI) DSS Compliance](https://docs.xplorpay.com/security-solutions/pci-compliance#what-is-pci-dss) or undergoing lengthy [Europay, Mastercard, and Visa (EMV) Security certifications](https://en.wikipedia.org/wiki/EMV#EMV_certificates). When you integrate using the [Cloud EMV API](https://docs.xplorpay.com/api-references/payments/cards/transaction-emv), you don’t need separate integrations for each payment terminal.

For more information about payment terminals, see the [Devices](https://docs.xplorpay.com/getting-started/devices) page.


# Cloud EMV integration

The following steps explain how Cloud EMV semi-integration works:

{% stepper %}
{% step %}
**The point-of-sale (POS) application sends a payment request to our REST-based** [**Transaction EMV API**](/api-reference/api/payments/terminal-card-present/transaction-emv) **services.**
{% endstep %}

{% step %}
**Our Cloud EMV service sends card data requests to cloud-based integration services that communicate with** [**payment terminals**](/getting-started/devices).

{% hint style="info" %}
The [Semi Integrated transaction EMV API](/api-reference/api/payments/terminal-card-present/transaction-emv/semi-integrated-transactions) services allow you to integrate [payment terminals](/getting-started/devices) once and replace them as needed.
{% endhint %}

{% hint style="warning" %}
Every semi-integrated device and TID (Terminal ID) associated with an account uses a unique API key. For example, if an account is associated with TID 1001 and TID 1002, each TID has its own API key, and requests for TID 1001 must use the API key assigned to TID 1001.
{% endhint %}
{% endstep %}

{% step %}
**Cloud-based integration services route card data request and activate the payment terminal**.
{% endstep %}

{% step %}
**The payment terminal displays a payment form for the customer to enter their card data and submit it.**
{% endstep %}

{% step %}
**The point-of-sale (POS) application sends a card transaction authorization request, including card data from the payment terminal to our REST-based** [**Transaction EMV API**](/api-reference/api/payments/terminal-card-present/transaction-emv) **services.**
{% endstep %}

{% step %}
**Cloud EMV service sends the card transaction response to the point-of-sale (POS) application.**
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
The point-of-sale (POS) system must be securely connected to the internet to prevent connection timeout errors when receiving a response from the [Cloud EMV API](https://docs.xplorpay.com/api-references/payments/cards/transaction-emv) services.
{% endhint %}


# Manage duplicate transactions

The [semi-integrated transactions API](https://docs.xplorpay.com/api-references/payments/cards/transaction-emv) endpoints let you configure enhanced settings to manage duplicate transactions.

The following settings help prevent duplicate transactions when you integrate with Cloud EMV solution:

## Check-field

The `check-field` lets you assign the value of another field—such as `invoice` or `purchase-order`—to help manage duplicate transactions. When you send a `check-field` request to the [semi-integrated transaction API](https://docs.xplorpay.com/api-references/payments/cards/transaction-emv) endpoint, the system checks for duplicate transactions using the `check-field`, transaction type, an Approved status, and the amount.

The `check-field` in the request checks for duplicate transactions before calling the cloud solution service to activate the [payment terminal](https://docs.xplorpay.com/getting-started/devices). If a duplicate is found, the API endpoint returns an HTTP 200 status code and includes the `check-field-duplicate` field with a value of `true`.

The `check-field-mid` field lets you query all terminals associated with a merchant identifier (MID).

{% hint style="warning" %}
The `transaction-emv` service checks for duplicate transactions by matching the last four digits of the card, the amount, an Approved status, and a time window of the past eight minutes.
{% endhint %}

## OLS gateway duplicate module

The OLS gateway duplicate module checks for duplicate transactions using the last four digits of the card, a time window of the past five minutes, an Approved status, and whether the `Include Invoice` setting is enabled in the duplicate check query.

The OLS gateway duplicate module triggers a query when a [payment terminal](https://docs.xplorpay.com/getting-started/devices) response returns a duplicate transaction with the `check-field-duplicate` field as `true`.

If duplicate check query is configured to return a success response (HTTP 200), Cloud EMV solution returns a “Transaction previously approved” message to the terminal when a duplicate transaction is found.


# Overview

Start here to choose the right Quick Start and complete the required integration steps.

The **Quick Starts** help you launch the right Xplor Pay integration fast. Use this page to choose a solution, prepare your environment, and complete the core setup steps.

### What to expect

Use this space to:

* Choose the integration that matches your product.
* Complete the minimum setup required to start.
* Test the full flow before production.

{% hint style="info" %}
Each Quick Start includes its own prerequisites, setup steps, and solution-specific details.
{% endhint %}

### Required steps

{% stepper %}
{% step %}

### Get access and configuration

Make sure you have the credentials and environment details required for your solution.

This usually includes:

* API or public keys.
* Sandbox or test URLs.
* Account or pricing configuration.
  {% endstep %}

{% step %}

### Choose the right integration path

Pick the solution that matches your customer journey and device model.

Use a hosted flow when you want less implementation work. Use an SDK or device-based option when you need more control in your app or checkout experience.
{% endstep %}

{% step %}

### Build the minimum flow

Implement the shortest path to integrate successfully.

For most integrations, this means you:

* Collect payment or onboarding data.
* Send the required API request or SDK call.
* Handle the response, token, or status update.
  {% endstep %}

{% step %}

### Test before go-live

Run the full flow in your test environment.

Confirm that you can:

* Complete the main success path.
* Handle errors or declines.
* Verify downstream updates such as status, reporting, or saved payment data.
  {% endstep %}
  {% endstepper %}

### Choose a Quick Start

#### Payments and onboarding

* [Hosted Merchant Onboarding](/quick-starts/hosted-merchant-onboarding)
* [JavaScript](/quick-starts/javascript)
* [Cloud EMV](/quick-starts/cloud-emv)

#### Mobile SDKs

* [iOS Framework](/quick-starts/ios-framework)
* [Payment UI](/quick-starts/payment-ui)
* [Android Framework](/quick-starts/android-framework)

#### Additional solutions

* [Recurring Payments](/quick-starts/recurring-payments)
* [ACH Transactions](/quick-starts/ach-transactions)
* [Disputes Management](/quick-starts/disputes-management)
* [Reporting](/quick-starts/reporting)

### Next step

Start with the Quick Start that matches your integration model, then complete its prerequisites before you begin implementation.


# Hosted Merchant Onboarding

The **Hosted Merchant Onboarding** gives you a prebuilt application flow for merchant onboarding. Merchants can complete the application, upload documents, and sign agreements to onboard easily.

### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To use the hosted merchant onboarding process, ensure you have the following:

✅ A test environment URL.&#x20;

{% hint style="info" %}
Contact [Xplor Pay Getting Started](https://xplorpay.com/getting-started/) to get test environment URL.
{% endhint %}

✅ Webhook URL to receive onboarding status updates.

{% hint style="info" %}
Visit [Register URL](/api-reference/webhooks/register-url) and learn how to register your URL.
{% endhint %}

✅ The required integration settings for your account.

{% hint style="info" %}
Contact to [Xplor Pay](https://xplorpay.com/contact/) for integration settings.
{% endhint %}

{% stepper %}
{% step %}

### Get onboarding application URL

To get the onboarding application URL:

1. Use the POST method.
2. Send a request to the [Hosted Merchant Onboarding](/api-reference/api/merchant-onboarding/hosted-merchant-onboarding) API endpoint with the required fields.

{% code overflow="wrap" lineNumbers="true" %}

```json
{
  "merchantInformation": {
    "dbaName": "Example-dba",
    "emailAddress": "janedoe@clearent.com"
  },
  "salesProfile": {
    "mccCode": "9999"
  },
  "pendEmailAddress": "user@example.com"
}
```

{% endcode %}

The response returns the application URL in the `applicationURL` field.

{% code overflow="wrap" lineNumbers="true" %}

```json
{
  "applicationURL": "https://boarding-int.clearent.net/launch-integrator-setup/merchant/4c87c74b-a483-4d4f-8656-b46a59e2e3d4"
}
```

{% endcode %}

This URL directs the merchant to the onboarding page, where they can complete and submit the form.
{% endstep %}

{% step %}

### Application submission

The onboarding page shows all required fields for submission.

Use the sample data in the table to test the onboarding flow.

<table><thead><tr><th valign="top">Field name</th><th valign="top">Sample value</th></tr></thead><tbody><tr><td valign="top">Federal Tax ID</td><td valign="top">99-9000004</td></tr><tr><td valign="top">Routing Number (ABA)</td><td valign="top">083000137</td></tr><tr><td valign="top">Checking Account number</td><td valign="top">123542352343</td></tr></tbody></table>

When merchant selects **Submit**, Xplor Pay validates the data. If the information is valid, the merchant is prompted to sign the agreement digitally.
{% endstep %}

{% step %}

### Pricing configuration

The hosted onboarding application applies default pricing based on your partner account structure.

{% hint style="info" %}
See [Adding Hierarchy & Compensation Details](/partner-portal/partner-portal/guides/merchant-onboarding-via-partner-portal/adding-hierarchy-and-compensation-details) to manage partner hierarchy in your account.
{% endhint %}

To configure the pricing in the onboarding application, see:

* [Pricing Plans](https://docs.xplorpay.com/api-reference/api/merchant-onboarding/onboard-merchant/pricing-plan-and-reference/pricing-plans)
  {% endstep %}
  {% endstepper %}


# Cloud EMV

The **Cloud EMV** solution supports [Dejavoo](https://docs.xplorpay.com/getting-started/devices/dejavoo) and [PAX](https://docs.xplorpay.com/getting-started/devices/pax) devices to process payments.

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

To set up [Dejavoo](https://docs.xplorpay.com/getting-started/devices/dejavoo) and [PAX](https://docs.xplorpay.com/getting-started/devices/pax) devices and process payments, ensure you have following:

✅ Local Wi-Fi network that has internet access.

✅ An API access kay issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) and get API access key.
{% endhint %}

{% stepper %}
{% step %}

### Connect device to Wi-Fi

#### PAX A Series

To connect device to the local Wi-Fi network.

1. From the **WSP LINK** screen, tap the **top-left** and **bottom-right** corners of the screen to open the **Main Menu**.
2. Select **Settings** from the Main Menu.
3. Enter the password provided to you (**pax9876@@**) in the **Settings Password** field.
4. Go to **Wi-Fi Settings**.
5. Turn on **Wi-Fi**.
6. Select your local **Wi-Fi** network from the list of available networks.

{% hint style="success" %}
When connected, the **Wi-Fi** icon appears on the screen.
{% endhint %}

#### Dejavoo Z Line

To connect device to the local Wi-Fi:

1. Tap the screen to view the home display.
2. Select **Menu** from the home screen.
3. Select **Utility** from the menu.
4. Enter the password in the **Manager Password** field (for example, `1234`).
5. Go to **Wi-Fi Settings**.
6. Select **Communications** > **Local Params** > **Wi-Fi**.
7. Select **Scan Network**.

{% hint style="info" %}
In **Scan Network** menu, select **Configure** > **Set Password** to set password for your local Wi-Fi network.
{% endhint %}

8. Select your local Wi-Fi network from the list.
9. Select **Connect**.
10. Click **OK** to confirm and connect.

{% hint style="success" %}
When connected, the **Wi-Fi** icon appears on the screen.
{% endhint %}

#### Dejavoo QD Line

To connect device to the local Wi-Fi:

1. Turn on the device by pressing and holding the **Power** button.
2. Select **Settings** from the menu.
3. Enter the password in the **Manager Password** field (for example, `1234`).
4. Select **Wi-Fi Settings**.
5. Turn on **Wi-Fi**.
6. Select your local Wi-Fi network from the list.
7. Enter the password of your Wi-Fi network.
8. Select **Connect**.

{% hint style="success" %}
When connected, the **Wi-Fi** icon appears on the screen.
{% endhint %}
{% endstep %}

{% step %}

### Process payment

Send a request to the [Semi Integrated Transactions](/api-reference/api/payments/terminal-card-present/transaction-emv/semi-integrated-transactions) endpoint to process the payment.
{% endstep %}
{% endstepper %}


# JavaScript

The **JavaScript** SDK provides a secure, client‑side library for web‑based payment processing.

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

To integrate the JavaScript SDK into your website, ensure you have following:

✅ An HTTPS-enabled web server.

✅ A modern browser that supports JavaScript.

✅ An active Xplor Pay account.

{% hint style="info" %}
Contact to [Xplor Pay](https://xplorpay.com/contact/) to create an active account.
{% endhint %}

✅ A public API key.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

✅ A sandbox URL for testing the integration.

{% hint style="info" %}
Contact [Xplor Pay Getting Started](https://xplorpay.com/getting-started/) to get Sandbox URL.
{% endhint %}

{% stepper %}
{% step %}

### Add payment form

To add the payment form into your website:

1. Add a `<div>` tag to your code that hosts the payment form.

{% code lineNumbers="true" %}

```javascript
<div id="payment-form"></div>
```

{% endcode %}

2. Add a `<script>` tag to include the SDK library hosted by Xplor Pay.

{% code overflow="wrap" lineNumbers="true" %}

```js
<script src="https://gateway-int.clearent.net/js-sdk/js/clearent-host.js"></script>
```

{% endcode %}

3. Call the `init` method with the base URL to host the payment form and add your public key.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
<script type="text/javascript">
    ClearentSDK.init({
        "baseUrl": "https://gateway-int.clearent.net",
        "pk": "YOUR PUBLIC KEY GOES HERE"
    });
</script>
```

{% endcode %}

The `baseURL` directs your customers to the hosted payment form where they can enter the payment information.

{% hint style="info" %}
You can style the payment form, see [Format payment page](/guides/javascript/format-payment-page) for more information.
{% endhint %}
{% endstep %}

{% step %}

### Get JSON Web Token

To get a JSON Web Token when a customer submits payment information to process:

1. Add the `ClearentSDK.getPaymentToken` method using promises to access the JWT service.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
ClearentSDK.getPaymentToken().then(
    (result) => {
        console.log("ClearentTokenSuccess");
        console.log(result);
    },
    (error) => {
        console.log("ClearentTokenError");
        console.log(error);
    }
);
```

{% endcode %}

{% hint style="warning" %}
To receive success or error messages from the SDK without using promises, add callback handlers to your web page when the SDK securely calls the JWT service.
{% endhint %}

2. The `ClearentTokenSuccess` callback function securely receives the response from the JWT services, which includes an encrypted JSON Web Token in the `jwt` field.

{% code lineNumbers="true" %}

```javascript
{
   "code":"200",
   "status":"success",
   "exchange-id":"ID-clearent-mobile-jwt-1-c32bfe39-d454-4e34-8b4f-94d850643e48",
   "payload":{
      "mobile-jwt":{
         "jwt":"eyJhbGciOi23UzIh4iJ9.eyJsYXN0LWZvdXIiOiIxMrkP8iwidHlwZSI6Ik1BTlVBTCIsImV4cCI6MTU0NzY0NjU2MSwidG9rZW4iOiIxMTAwMDAwMDAwMDEzNTkyIn0.eT8c_5yUzxCxL2MEtmbG444eTFRW7OxzRF7x4uRIo-U",
         "last-four":"1111"
      },
      "payloadType":"mobile-jwt"
   }
}
```

{% endcode %}

A JSON Web Token (`mobile-jwt`) is *required to* process payments through the [Mobile Transactions](/api-reference/api/payments/mobile/mobile-payment-transactions/mobile-transactions) endpoints.
{% endstep %}

{% step %}

### Create card token

To create a card token when processing the card payments:

1. Add the `create-token` property to your JSON request body of the [Mobile Transactions](/api-reference/api/payments/mobile/mobile-payment-transactions/mobile-transactions) endpoint and set its value to `true`.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
{
    "type": "sale",
    "amount": "15.55",
    "service-fee": "0.46",
    "software-type": "Sally's Seashell Shore Software",
    "software-type-version": "1.0",
    "software-version": "1.0",
    "create-token": true,
    "billing": 
       {
        "zip": "85284"
       }
}
```

{% endcode %}

{% hint style="warning" %}
To process **card-not-present** transactions, you must include the `zip` field in the JSON request body.
{% endhint %}

{% hint style="success" %}
Set the `Create-token` property to `false` to process the card payment without generating a token.
{% endhint %}

The successful response includes a randomly generated Card Token in the `id` field.

{% code lineNumbers="true" %}

```javascript
{
    "rel": "token",
    "href": "/rest/v2/tokens/1100003582050381111",
    "id": "1100003582050381111"
}
```

{% endcode %}

A Card Token allows you to process future card transactions using the [Transactions](/api-reference/api/payments/cards-card-not-present/transactions) endpoints. You *must* include the Card Token in the `card` field of the JSON request body.
{% endstep %}
{% endstepper %}


# iOS Framework

The **Mobile EMV** SDK enables iOS apps to accept EMV chip card payments via Bluetooth or audio jack using the [IDTech VP3300](/getting-started/devices/id-tech#id-tech-vp3300-reader) card reader.

### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To enable the Mobile EMV SDK into your iOS app, ensure you have following:

✅ API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

{% stepper %}
{% step %}

### Set up mobile card reader

To set up the mobile card reader:

1. Turn on the reader.

{% hint style="warning" %}
The reader must be fully charged before you turn it on.
{% endhint %}

2. Enable **Bluetooth** on your iOS device.

{% hint style="success" %}
The reader automatically pairs with your iOS device when Bluetooth is on.
{% endhint %}

3. Insert the chip side of the card into the reader’s slot and wait until the green LED flashes.

{% hint style="success" %}
This confirms a successful card read.
{% endhint %}
{% endstep %}

{% step %}

### Connect iOS app

To connect your iOS app to the card reader:

1. Install SDK dependencies, such as `IDTech.xcframework` , `IDTech.bundle` (v4.0.142 or later) and `CocoaLumberjack.xcframework` .
2. Add the iOS Framework to your project using Carthage.

{% code overflow="wrap" lineNumbers="true" %}

```javascript
github "Clearent/iOS-framework"
carthage update
```

{% endcode %}

3. Import the iOS framework header in your code.

{% code overflow="wrap" lineNumbers="true" %}

```ruby
#import <ClearentIdtechIOSFramework/ClearentIdtechIOSFramework.h>
```

{% endcode %}

4. Initialize the SDK and connect to the card reader.

{% code lineNumbers="true" %}

```objective-c
ClearentConnection *connection = [[ClearentConnection alloc] initBluetoothSearch];
                                  [clearentVP3300 startConnection:connection];
```

{% endcode %}

The iOS Framework connects automatically to the card reader using Apple’s Bluetooth implementation through the IDTech library.

{% hint style="success" %}
The reader’s middle LED flashes *green* when successfully paired.
{% endhint %}
{% endstep %}

{% step %}

### Process payment

To process the payment in your iOS app:

1. Configure the SDK to initiate an EMV card transaction that sends the encrypted token to Xplor Pay.

{% code lineNumbers="true" %}

```swift
ClearentVP3300Config *config = [[ClearentVP3300Config alloc] init];
[config setPublicKey:publicKey];
[config setClearentBaseUrl:baseURL];
config.contactAutoConfiguration = false;
config.contactlessAutoConfiguration = false;
config.contactless = true;
clearentVP3300 = [[Clearent_VP3300 alloc] initWithConnectionHandling:self
                                    clearentVP3300Configuration:config];
clearentManualEntry = [[ClearentManualEntry alloc] init];
[clearentManualEntry setClearentBaseUrl:baseURL];
[clearentManualEntry setPublicKey:publicKey];
```

{% endcode %}

2. Set up a payment request.

{% code lineNumbers="true" %}

```swift
ClearentPayment *payment = [[ClearentPayment alloc] init];
[payment setAmount:theAmount];
payment.amtOther = 0;
payment.type = 0; // Sale
payment.timeout = 10;
payment.tags = nil;
payment.fallback = true;
payment.forceOnline = false;
```

{% endcode %}

3. Initiate a card transaction.

{% code lineNumbers="true" %}

```javascript
ClearentResponse *response = [clearentVP3300 startTransaction:payment
                                         clearentConnection:connection];
if (response.responseType != RESPONSE_SUCCESS) {
    // Notify user transaction could not be started
}
```

{% endcode %}

The Mobile EMV SDK reads the card and encrypts the card data.

4. Add the callback handlers to receive the successful message from the Mobile EMV SDK.

{% code lineNumbers="true" %}

```objective-c
- (void)successTransactionToken:(ClearentTransactionToken *)token {
    // Send the encrypted JWT to the Mobile Payments API
    // POST /rest/v2/mobile/transactions/sale
}
```

{% endcode %}

The Mobile EMV SDK returns an encrypted JSON Web Token (JWT) that contains the transaction data.

5. Use the POST method to send the transaction request to the [Mobile Payment Transactions](/api-reference/api/payments/mobile/mobile-payment-transactions) endpoint to process the payment.
   {% endstep %}
   {% endstepper %}


# Payment UI

Integrate the **Payment UI** wrapper to add a built-in interface for accepting card payments using the VP3300 reader.

### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To integrate and launch the payment UI flow, ensure you have following:

:white\_check\_mark: An API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

:white\_check\_mark: A public key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

:white\_check\_mark: A sandbox URL for testing the integration.

{% hint style="info" %}
Contact [Xplor Pay Getting Started](https://xplorpay.com/getting-started/) to get Sandbox URL.
{% endhint %}

{% stepper %}
{% step %}

### **Add Podfile to the project**

To add and configure a Podfile in your project:

1. Create or open your Xcode project.
2. Navigate to the project root directory.

Open Terminal and run:

{% code title="" overflow="wrap" lineNumbers="true" %}

```shellscript
cd <project-root-path>
```

{% endcode %}

3. Initialize CocoaPods.

Run:

{% code title="" overflow="wrap" lineNumbers="true" %}

```shellscript
pod init
```

{% endcode %}

{% hint style="info" %}
If CocoaPods is not installed, install it by running:
{% endhint %}

{% code title="" overflow="wrap" lineNumbers="true" %}

```shellscript
sudo gem install cocoapods
```

{% endcode %}

4. Open and edit the Podfile.

Replace the contents with the following:

{% code title="pod file" overflow="wrap" lineNumbers="true" %}

```ruby
source 'https://github.com/xplor-pay/CocoaPods.git'
source 'https://github.com/CocoaPods/Specs.git'
# Uncomment the next line to define a global platform for your project
# platform :ios, '13.0'
target 'PROJECTNAME' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'ClearentIdtechIOSFrameworkPod', '4.0.158' 
  # Pods for ExampleSwift
end
```

{% endcode %}

5. Update the target name and pod version.
   * Replace `PROJECTNAME` with your Xcode target name.
   * Verify that you are using the latest pod version.
6. Install the dependencies.

Run:

{% code title="" overflow="wrap" lineNumbers="true" %}

```shellscript
pod install
```

{% endcode %}

7. Open the `.xcworkspace` file generated by CocoaPods.

The Podfile is added and configured. CocoaPods installs the dependencies and updates your project with the required settings and build configurations.
{% endstep %}

{% step %}

### Import the framework

In the file where you trigger the payment flow, import the framework:

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
import ClearentIdtechIOSFramework
```

{% endcode %}

The framework is available in your code file, enabling you to access APIs required to initiate the payment flow.
{% endstep %}

{% step %}

### Initialize the SDK

Before presenting the payment UI, initialize the SDK with your API credentials:

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
ClearentUIManager.shared.initialize(
    with: ClearentUIManagerConfiguration(
        baseURL: "<YOUR_BASE_URL>",
        apiKey: "<YOUR_API_KEY>",
        publicKey: "<YOUR_PUBLIC_KEY>",
        softwareType: "<YOUR_APP_NAME>",
        softwareTypeVersion: "<YOUR_APP_VERSION>"
    )
)
```

{% endcode %}

#### Configuration values

Use the following values when configuring the SDK:

<table><thead><tr><th width="199.666748046875" valign="top">Field name</th><th width="117.666748046875" valign="top">Data type</th><th width="118.6666259765625" valign="top">Required?</th><th>Description</th></tr></thead><tbody><tr><td valign="top"><code>baseURL</code></td><td valign="top">String</td><td valign="top">Required</td><td><p>The API endpoint for the selected environment. </p><p>Use the sandbox URL (<code>https://gateway-int.clearent.net)</code> for testing.</p><p>Use the production URL (<code>https://gateway.clearent.net)</code> for live transactions.</p></td></tr><tr><td valign="top"><code>apiKey</code></td><td valign="top">String</td><td valign="top">Required</td><td>The API key associated with your account and environment. Provided to you during onboarding with Xplor Pay.</td></tr><tr><td valign="top"><code>publicKey</code></td><td valign="top">String</td><td valign="top">Required</td><td>The public key associated with your account and environment. Provided to you during onboarding with Xplor Pay.</td></tr><tr><td valign="top"><code>softwareType</code></td><td valign="top">String</td><td valign="top">Required</td><td>The name of your application used for support purposes. Maximum length is 255 characters.</td></tr><tr><td valign="top"><code>softwareTypeVersion</code></td><td valign="top">String</td><td valign="top">Required</td><td>The version of your application used for support purposes. Maximum length is 255 characters.</td></tr></tbody></table>

The SDK is initialized with your credentials and environment. Your app is ready to present the payment UI.
{% endstep %}

{% step %}

### Launch the payment UI

From your view controller, create a `PaymentInfo` object and present the payment UI:

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
let paymentInfo = PaymentInfo(
    amount: 20.00,
    customerID: "<YOUR_CUSTOMER_ID>",
    invoice: "<YOUR_INVOICE_NUMBER>",
    orderID: "<YOUR_ORDER_ID>",
    billing: ClearentIdtechIOSFramework.ClientInformation,
    shipping: ClearentIdtechIOSFramework.ClientInformation,
    softwareType: "<YOUR_APP_NAME>"
)
ClearentUIManager.shared.paymentViewController(
    paymentInfo: paymentInfo,
    completion: completion
)
```

{% endcode %}

This call presents the full payment flow, including card reader pairing, transaction input, and receipt handling. No additional configuration is required for a basic integration.
{% endstep %}

{% step %}

### Select the payment method

{% hint style="info" %}
Call this method when the user switches between payment options.
{% endhint %}

1. Use the `cardReaderPaymentIsPreferred` property to control which payment method is shown:
   * `true` → Uses the card reader flow.
   * `false` → Displays the manual card entry form.
2. Set this property before presenting the payment UI. The `PaymentViewController` reads this value to determine which flow to display.

{% code title="" overflow="wrap" lineNumbers="true" %}

```swift
func updatePaymentMethod(useCardReader: Bool) {
    ClearentUIManager.shared.cardReaderPaymentIsPreferred = useCardReader
}
```

{% endcode %}
{% endstep %}
{% endstepper %}

The payment UI is displayed, allowing users to complete transactions using either a card reader or manual entry.


# Android Framework

The **Mobile EMV** SDK enables Android apps to accept EMV chip card payments via Bluetooth or audio jack using the [IDTech VP3300](/getting-started/devices/id-tech#id-tech-vp3300-reader) card reader.

### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To enable the Mobile EMV SDK into your iOS app, ensure you have following:

✅ API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

{% stepper %}
{% step %}

### Set up mobile card reader

To set up the mobile card reader:

1. Turn on the reader.

{% hint style="warning" %}
The reader must be fully charged before you turn it on.
{% endhint %}

2. Enable **Bluetooth** on your Android device.

{% hint style="success" %}
The reader automatically pairs with your Android device when Bluetooth is on.
{% endhint %}

3. Insert the chip side of the card into the reader’s slot and wait until the green LED flashes.

{% hint style="success" %}
This confirms a successful card read.
{% endhint %}
{% endstep %}

{% step %}

### Connect Android app

To connect your Android app to the card reader:

1. Add the required .jar files from `android-idtech-sdk/sdk/lib` in your Android project.
2. Add the `PublicOnReceiverListener` object to receive messages from the card reader.
3. Add the `ApplicationContext` or `ApplicationContext3In1` object to enable the card reader modes (DIP/SWIPE/CONTACTLESS).
4. Add the `DeviceFactory` object to connect your app with the VP3300 reader.
5. Configure the card reader.

{% code lineNumbers="true" %}

```javascript
device_configurePeripheralAndConnect();
registerListen();
```

{% endcode %}

6. Ensure the card reader is ready.

{% code lineNumbers="true" %}

```javascript
isReady(); // Wait for readiness before starting a transaction
```

{% endcode %}
{% endstep %}

{% step %}

### Process payment

To process the payment in your Android app:

1. Initiate a card transaction.

{% code lineNumbers="true" %}

```javascript
device_startTransaction();
```

{% endcode %}

2. Generate a JSON Web Token (JWT) for manual card entry.

{% code lineNumbers="true" %}

```javascript
manualCardTokenizer.createTransactionToken(manualEntry);
```

{% endcode %}

3. Use the POST method to send the transaction request to the [Mobile Payment Transactions](/api-reference/api/payments/mobile/mobile-payment-transactions) endpoint to process the payment.
   {% endstep %}
   {% endstepper %}


# Recurring Payments

The **Recurring Payments** engine securely stores customer information, including e-mail address, billing address, first name, and last name.

The [Recurring Payments Service](/api-reference/api/payments/recurring-payments-service) allows you to:

* Create customers and customer tokens for future payment process.
* Schedule payment plans at various frequencies.
* Automatically process payments according to the defined schedule.

### Prerequisites

To process recurring payments, ensure you have following:

✅ An active Xplor Pay account.

{% hint style="info" %}
Contact to [Xplor Pay](https://xplorpay.com/contact/) to create an active account.
{% endhint %}

✅ API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

{% stepper %}
{% step %}

### Create customer

To create a customer:

1. Use the POST method.
2. Send the customer request to the [Customer](/api-reference/api/payments/recurring-payments-service/customer) endpoint with required fields.

The success response returns the customer key in the `customer-key` field.
{% endstep %}

{% step %}

### Create customer token

To create a customer token:

1. Use the POST method.
2. Include the `customer-key` in the request header for authentication.

See the `customer-key` field in the successful response from the create customer endpoint.

3. Send the request to the [Customer Token](/api-reference/api/payments/recurring-payments-service/customer-token) URL with required fields.

The success response returns the customer payment token and card details.
{% endstep %}

{% step %}

### Create payment plan

To create a payment plan:

1. Use the POST method.
2. Send the request to the [Payment Plans](/api-reference/api/payments/recurring-payments-service/payment-plans) endpoint URL with required fields.

The success response returns the `plan-key` for specified date range payment frequency that confirm the payment plan is created and activated for the customer.

{% hint style="info" %}
See [Recurring Payments Service](/api-reference/api/payments/recurring-payments-service) for more information.
{% endhint %}
{% endstep %}
{% endstepper %}


# ACH Transactions

The **ACH Transactions** solution lets you accept direct debit and credit payments securely through the Automated Clearing House (ACH) network.

{% hint style="info" %}
Third-party providers such as Paya and DCS supports to process ACH payments and manage reporting.
{% endhint %}

### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To process ACH transactions, ensure you have following:

✅ Integrated JavaScript SDK.

{% hint style="info" %}
See [JavaScript](/guides/javascript) to integrate.
{% endhint %}

✅ API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

:white\_check\_mark: A sandbox URL for testing the integration.

{% hint style="info" %}
Contact [Xplor Pay Getting Started](https://xplorpay.com/getting-started/) to get Sandbox URL.
{% endhint %}

{% stepper %}
{% step %}

### Set up ACH payment form

To set up the the ACH payment form using the [Add payment form](/guides/javascript/add-payment-form):

1. Add a `<div>` tag to host the ACH payment form.

{% code lineNumbers="true" %}

```javascript
<div id="payment-form"></div>
```

{% endcode %}

2. Include the JavaScript SDK library.

{% code lineNumbers="true" %}

```javascript
<script src="https://gateway-int.clearent.net/js-sdk/js/clearent-host.js"></script>
```

{% endcode %}

3. Initialize the SDK with your sandbox base URL and public key.

{% code lineNumbers="true" %}

```javascript
<script type="text/javascript">
    ClearentSDK.init({
        "baseUrl": "https://gateway-int.clearent.net",
        "pk": "YOUR_PUBLIC_KEY"
    });
</script>
```

{% endcode %}

The ACH payment form appears on your webpage with fields for bank account number, routing number, and account type.
{% endstep %}

{% step %}

### Get JSON Web Token

To get a JSON Web Token:

1. Add the `getPaymentToken()` method to your site to receive a success response.

{% code lineNumbers="true" %}

```javascript
ClearentSDK.getPaymentToken().then(
    (result) => {
        console.log("ACH Token Success");
        console.log(result);
    },
    (error) => {
        console.log("ACH Token Error");
        console.log(error);
    }
);
```

{% endcode %}

The response includes a `jwt` field with the tokenized ACH payment authorization.

{% code lineNumbers="true" %}

```javascript
{
   "code": "200",
   "status": "success",
   "exchange-id": "ID-clearent-mobile-jwt-1-c32bfe39-d454-4e34-8b4f-94d850643e48",
   "payload": {
      "mobile-jwt": {
         "jwt": "eyJhbGciOi23UzIh4iJ9...",
         "last-four": "6789"
      },
      "payloadType": "mobile-jwt"
   }
}
```

{% endcode %}
{% endstep %}

{% step %}

### Process ACH payment

To process the ACH payment:

1. Use the POST method.
2. Include the `mobile-jwt` token in the request headers for authentication.

{% hint style="info" %}
See the `jwt` field in the successful response from the JavaScript SDK.
{% endhint %}

3. Send a transaction request to the [ACH Transaction](/api-reference/api/payments/ach/ach-transaction) endpoint with required fields.

The success response returns the ACH transaction status as `Pending`, `Approved`, or `Failed` in the `status` field.
{% endstep %}
{% endstepper %}


# Disputes Management

The **Disputes** section in the Merchant Portal displays dispute case activities and related details. It also allows you to respond when applicable.

You can manage disputes based on the following case types:

* **Retrieval Request**: Requires you to provide additional information related to the original sale transaction.
* **Chargeback**: Requires you to reverse the disputed credit card sale to the cardholder or issuing bank.
* **Pre-Arbitration**: You cannot respond directly. You may receive an e-mail with instructions to pursue the dispute.

{% hint style="warning" %}
Pre-Arbitration cases may incur significant fees for the losing party.
{% endhint %}

* **Arbitration**: You cannot respond directly. You may receive an e-mail with instructions to pursue the dispute.

{% hint style="info" %}
For more information, contact the **Chargeback & Disputes Department**. Make sure to have the case number available when pursuing or accepting a dispute.
{% endhint %}

#### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

To manage disputes, ensure you have following:

✅ An active Xplore Pay account.

{% hint style="info" %}
Contact to [Xplor Pay](https://xplorpay.com/contact/) to create an active account.
{% endhint %}

✅ An API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get API access key.
{% endhint %}

{% stepper %}
{% step %}

### Manage disputes via Merchant Portal

To manage disputes via Merchant Portal:

1. Go to the [Merchant Portal](https://auth.clearent.net/oauth2/aus4ulyubshD7M0yf697/v1/authorize?client_id=0oa6ggt30dFSxSVxX697\&redirect_uri=https%3A%2F%2Fmy.clearent.net%2Fui%2Fauth%2Fpost-login\&response_type=code\&scope=openid+profile\&state=09ec3d9fa9f14639a90fce520e368774\&code_challenge=FG5jrxz1jKmuxhZlJmeIuIRC0Cqf2GkDimo2TeVShu0\&code_challenge_method=S256).
2. **Sign in** with your Xplor Pay credentials.

The **Home** page appears.

1. In the left menu, select **Disputes**.

The Disputes page shows a list of disputes under the **New Activity** tab. The New Activity tab shows the number of new cases that need a response.

{% hint style="warning" %}
You *must* have the **MerchantHomeUser** role to access the Disputes page. Data on the Disputes page is available for **13** months.
{% endhint %}
{% endstep %}

{% step %}

### Manage disputes via Disputes API

The following table describes endpoints and HTTPS methods to manage disputes via Disputes API.

<table><thead><tr><th valign="top">Endpoint</th><th valign="top">Method</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>/v1.0/reporting/merlincaseaction/</code><strong><code>MerchantDisputes</code></strong></td><td valign="top"><strong>GET</strong></td><td valign="top">This endpoint retrieves a list of disputes for a specific merchant.</td></tr><tr><td valign="top"><code>/v1.0/reporting/merlincaseaction/</code><strong><code>MerchantDisputesHistory</code></strong><code>/</code><strong><code>{caseNumber}</code></strong></td><td valign="top"><strong>GET</strong></td><td valign="top">This endpoint retrieves the history of a specific dispute.</td></tr><tr><td valign="top"><code>/v1.0/reporting/merlincaseaction/</code><strong><code>MerchantDisputesCaseActivity</code></strong><code>/</code><strong><code>{caseNumber}</code></strong></td><td valign="top"><strong>GET</strong></td><td valign="top">This endpoint retrieves the activity and responses for a specific dispute. If the dispute has no response record, the endpoint returns an empty success response.</td></tr><tr><td valign="top"><code>/v1.0/</code><strong><code>responses</code></strong></td><td valign="top"><strong>POST</strong></td><td valign="top">This endpoint uploads transaction evidence for a specific dispute.</td></tr></tbody></table>
{% endstep %}
{% endstepper %}


# Reporting

The **Reporting** solution lets you manage standard and enhanced reports related to merchants, transactions, pricing, disputes, and more.

#### **Prerequisites** <a href="#prerequisites" id="prerequisites"></a>

To manage reports, ensure you have following:

:white\_check\_mark: An active Xplor Pay account.

{% hint style="info" %}
Contact to [Xplor Pay](https://xplorpay.com/contact/) to create an active account.
{% endhint %}

✅ A sandbox URL for testing the integration.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get a sandbox URL
{% endhint %}

✅ API access key issued to you by Xplor Pay.

{% hint style="info" %}
Visit [Let's Get Started - Xplor Pay](https://xplorpay.com/getting-started/) to get an API access key.
{% endhint %}

{% stepper %}
{% step %}

### **Retrieve report via Reporting API**

To retrieve the Standard and Enhanced report:

1. Use the GET method.
2. Send the request to the [Standard Reporting](/api-reference/api/reporting/standard-reporting) or [Enhanced Reporting](/api-reference/api/reporting/enhanced-reporting) endpoint URL.

The following table describes the query parameters to include in the endpoint URL.

<table><thead><tr><th width="150.3333740234375" valign="top">Name</th><th width="111.33331298828125" valign="top">Data type</th><th width="119.99993896484375" valign="top">Required?</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>categoryName</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The category name of the report. Use <code>standard</code> for standard reports and <code>reporting</code> for enhanced reports.</td></tr><tr><td valign="top"><code>reportName</code></td><td valign="top">String</td><td valign="top">Required</td><td valign="top">The name of the report. For a list of available standard and enhanced reports, see <a data-mention href="/spaces/yN9CLsR8tlS8G8avRMB5/pages/iv6Rfs96O6NQMrethdwK">/spaces/yN9CLsR8tlS8G8avRMB5/pages/iv6Rfs96O6NQMrethdwK</a>.</td></tr></tbody></table>

This endpoint returns a successful response, including merchant, transaction, dispute, or merchant and portfolio activity details in JSON format according to the report type.
{% endstep %}

{% step %}

### Download enhanced report via Partner Portal

To download the enhanced report:

1. Go to the [Partner Portal](https://auth.clearent.net/oauth2/aus4ulyubshD7M0yf697/v1/authorize?client_id=0oa6ggt30dFSxSVxX697\&redirect_uri=https%3A%2F%2Fmy.clearent.net%2Fui%2Fauth%2Fpost-login\&response_type=code\&scope=openid+profile\&state=99cec299c624421c9aa81130c0f2d512\&code_challenge=5fMIzA_gkDBkCRpjufsK54nrOfbNfL_UEicUMtEOvmc\&code_challenge_method=S256).
2. **Sign in** with your Xplor Pay credentials.
3. On the dashboard, select **Reports**.
4. On the **Reports** page, find the report you want.
5. Select **Generate Report** next to the report.

The report downloads in Excel or CSV format.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Subscribe to the Xplor Pay Reporting to manage specific reports. See [Broken mention](broken://spaces/yN9CLsR8tlS8G8avRMB5/pages/iAQC3j4wFuFOOYWHdNwW) for more information.
{% endhint %}


# Overview

Our RESTful APIs provide a standardized interface for merchant onboarding and payment processing. These endpoints support consistent, scalable, and easy integration across multiple systems. The APIs also help you retrieve reports and manage disputes programmatically.

The following sections help you integrate with our APIs.

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><i class="fa-memo-circle-check">:memo-circle-check:</i> <strong>API Core Standards</strong></td><td>Learn the core standards of the APIs, including data formats, HTTP methods, and authentication requirements.</td><td><a href="/pages/Nwk5HntIn3aJWmuobrYN">Learn More</a></td></tr><tr><td><i class="fa-webhook">:webhook:</i> <strong>Webhooks</strong></td><td>Explore webhooks to receive the real-time event notifications.</td><td><a href="/pages/TR97FXzMSPGZacUptPPW">Learn More</a></td></tr><tr><td><i class="fa-gear">:gear:</i> <strong>Resources</strong></td><td>Access test data, result codes, and reference materials to support your integration.</td><td><a href="/pages/BhEcJedt9KwfJYyvF3Fx">Learn More</a></td></tr></tbody></table>

Dive into product-specific APIs that power your integrations.

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><i class="fa-briefcase">:briefcase:</i> <strong>Merchant Onboarding API</strong></td><td>Automate merchant onboarding setup or use a UI‑driven, hosted onboarding experience.</td><td><a href="/pages/gHtxRKzmHdnBI4ZvSqRQ">Learn More</a></td></tr><tr><td><i class="fa-credit-card">:credit-card:</i> <strong>Payments API</strong></td><td>Process payments through multiple methods, including card, mobile, and ACH.</td><td><a href="/pages/B7tZPX6gDcqmnkSBMM0Z">Learn More</a></td></tr><tr><td><i class="fa-message-dollar">:message-dollar:</i> <strong>Disputes API</strong></td><td>Retrieve and manage dispute cases, including dispute reporting and merchant responses.</td><td><a href="/pages/UCSMDSQElVmbROWocivc">Learn More</a></td></tr><tr><td><i class="fa-file-chart-pie">:file-chart-pie:</i> <strong>Reporting API</strong></td><td>Access a suite of financial and operational reports providing visibility across multiple merchants.</td><td><a href="/pages/gc3X2wHXftsasfDb19Ai">Learn More</a></td></tr></tbody></table>


# API Core Standards

This page describes the core standards that support the integration with our APIs. It covers supported data formats, HTTP methods, and security requirements for making secure and consistent API requests.

### Supported data format

Each endpoint supports JavaScript Object Notation ([JSON](https://en.wikipedia.org/wiki/JSON)) for both request and response data.

### HTTP methods

Each endpoint supports the standard [HTTP](https://en.wikipedia.org/wiki/HTTP) methods based on its purpose.

* **GET**: Retrieves data.
* **POST**: Creates a new resource or submit data for processing.
* **PUT**: Updates an existing resource.
* **DELETE**: Removes a resource.

### Security requirements

Our APIs use [Transport Layer Security (TLS)](https://en.wikipedia.org/wiki/Transport_Layer_Security) to protect the payment and merchant data.

{% hint style="warning" %}
Requests that use TLS versions earlier than 1.2 are blocked by the firewall.
{% endhint %}

### Authentication

Our APIs require an `Access Key` and `API Key` for authentication.

{% hint style="info" %}
Contact [Xplor Pay](https://docs.xplorpay.com/getting-started) to get an Access Key and API Key.
{% endhint %}

An `Access Key` is required for:

* [Merchant Onboarding API](/api-reference/api/merchant-onboarding)
* [Disputes API](https://docs.xplorpay.com/api-reference/api/disputes)
* [Reporting API](https://docs.xplorpay.com/api-reference/api/reporting)

{% hint style="success" %}
You must include the required Access Key in the authentication headers of every request.
{% endhint %}

An `API Key` is required for [Payments API](/api-reference/api/payments).

{% hint style="success" %}
You must include the required API Key in the authentication headers of every request.
{% endhint %}


# Webhooks

Webhook allows you to receive notifications when specific events occur, such as changes to a merchant account or application submission. Instead of repeatedly polling the API for updates, your endpoint receives HTTP requests instantly making your integration more efficient, scalable, and responsive.

For more information on webhooks, refer to the following articles:

* [Prerequisites](/api-reference/webhooks/prerequisites)
* [Register Endpoint](/api-reference/webhooks/register-url)
* [Webhook Subscriptions](/api-reference/webhooks/webhook-subscriptions)
* [Working with Webhooks](/api-reference/webhooks/working-with-webhooks)
  * [Transaction Webhook](/api-reference/webhooks/working-with-webhooks/transaction-webhooks)
  * [Onboarding Webhooks](/api-reference/webhooks/working-with-webhooks/merchant-onboarding-webhooks)
  * [Equipment Tracking & Activation Webhooks](/api-reference/webhooks/working-with-webhooks/equipment-tracking-and-activation-webhooks)


# Prerequisites

Before you start using webhooks, ensure you meet the following prerequisites:

### Technical requirements

* Create a publicly accessible HTTPS endpoint that can receive and process webhook payloads.
* Implement proper security measures to validate webhook signatures. (Applicable to Transaction Webhooks only)
* Set up an appropriate error handling and retry logic.

### Webhook configuration

Register your Webhook URL with our integration team for configuration. Webhook URLs will be configured on the merchant account to receive POST events.

The accessible HTTPs POST endpoint is prepared to:

* Accept incoming HTTP POST requests.
* Respond with an HTTP `200`` ``OK` status code to acknowledge successful receipt.

### **Webhook configuration by user type** <a href="#webhook-configuration-by-user-type" id="webhook-configuration-by-user-type"></a>

You can manage registered webhooks according to your need.

#### **Software Partners**

The webhook configuration applies during the account setup.

{% hint style="info" %}
The setup process differs depending on the webhook type.
{% endhint %}

#### **Virtual Terminal Users**

{% hint style="warning" %}
Users with an **Account Administrator** role can only configure webhooks in the **Virtual Terminal**.&#x20;
{% endhint %}

To add a webhook URL in the Merchant Portal:

1. Go to **VT Settings** > **Terminal**.
2. Select the **Enable Transaction Alert**.
3. Add your URL to the **Transaction Alert Callback URL** field.
4. Click **Save Terminal** Settings.

{% hint style="info" %}
For more information about Virtual Terminal, see [Virtual Terminal](https://docs.xplorpay.com/merchant-portal/guides/virtual-terminal).
{% endhint %}


# Register URL

To register your URL, send the endpoint details to our Integrations team. The Integrations team will complete the registration on your behalf and confirm once your endpoint is successfully configured.

{% hint style="warning" %}
Ensure that your endpoint supports HTTPS and can handle requests sent from the Integration team.
{% endhint %}

### **Secure endpoint** <a href="#secure-your-endpoint" id="secure-your-endpoint"></a>

To secure the endpoint:

* Use HTTPS endpoint.
* Restrict IP addresses if applicable.

### **Verify your signature** <a href="#verify-your-signature" id="verify-your-signature"></a>

Each webhook request includes a secure signature header to confirm its authenticity. Verifying this signature helps ensure the payload was sent by Xplor Pay.

{% hint style="info" %}
Signature verification is applicable for Transaction Webhooks only. Other webhooks do not include signature validation.
{% endhint %}

### **Webhook notifications** <a href="#webhook-notifications" id="webhook-notifications"></a>

Once your endpoint is registered and webhooks are configured, you will begin receiving event notifications relevant to your merchant account.

The code sample of webhook notification as below:

{% code lineNumbers="true" %}

```json
{
  "event": "Manual Review",
  "merchantId": "6588949900000011",
  "payload": null
}
```

{% endcode %}

{% hint style="warning" %}
The `payload` value varies by event type. Some events return `null`, while others include additional JSON data relevant to the event.
{% endhint %}

### **Retry logic** <a href="#retry-logic" id="retry-logic"></a>

If your endpoint does not acknowledge receipt of a webhook (i.e., returns a `non-2xx` status), the system will automatically retry the callback. A `2xx` status code (e.g., `200 OK`) indicates successful receipt of the webhook, and no retry will be attempted.

`Non-2xx` status codes (e.g., `400 Bad Request`, `500 Internal Server Error`) indicate failure. The system will retry the request based on the retry policy.

* **Total Attempts:** Up to 3 delivery attempts
* **Retry Strategy:** Exponential backoff is applied between each attempt

This ensures reliable delivery of webhook events, even if your endpoint is temporarily unavailable.

{% hint style="warning" %}
Ensure your server responds with a `2xx` status code upon successful receipt to avoid missed events.
{% endhint %}

### **Test webhook**

To test your webhook integration, make sure your endpoint returns a proper HTTP status code to indicate the result of processing the request. To help you test different webhook response scenarios in the INT (integration) environment, the system recognizes special keywords in the merchant’s **DBA (Doing Business As)** name field. Use the following naming conventions to simulate specific onboarding outcomes:

* **\[DECL]** – The application will be marked as **Declined** after signing. A webhook will be triggered with the "Declined" status.
* **\[PEND]** – The application will move to **Pended** status after signing. You will receive a webhook indicating this status change.
* **\[APPR]** – The application will be marked as **Approved** after signing, and a corresponding webhook will be sent.

{% hint style="warning" %}
Ensure that the DBA name includes the exact keyword in brackets (e.g., `MyStore [DECL]`) to trigger the appropriate behavior in the INT environment.
{% endhint %}


# Webhook Subscriptions

Multiple webhook subscription types are available to help you stay informed about key events related to merchant onboarding, transaction activity, and equipment handling. These webhooks deliver real-time notifications to your configured endpoints, allowing for more responsive and automated workflows.

#### **1. Transaction Webhook** <a href="#id-1.-transaction-webhook" id="id-1.-transaction-webhook"></a>

Delivers real-time notifications for transaction events, including successful payments, declines, and refunds. Ideal for updating dashboards, triggering email receipts, or managing reconciliation.

#### **2. Onboarding Webhooks** <a href="#id-2.-onboarding-webhooks" id="id-2.-onboarding-webhooks"></a>

Provides updates on the merchant onboarding process. Notifications include application status changes, required corrections, and terminal shipping progress.

#### **3. Equipment Tracking and Activation Webhooks** <a href="#id-3.-equipment-tracking-and-activation-webhooks" id="id-3.-equipment-tracking-and-activation-webhooks"></a>

Sends alerts when payment terminals are shipped and enables merchants to activate their terminals upon delivery.

{% hint style="warning" %}
Onboarding and equipment webhooks aren't triggered by transactions but are essential for setting up and enabling payment processing events.
{% endhint %}




---

[Next Page](/llms-full.txt/1)

