How To Start
| Platform | Requirements |
|---|---|
| iOS | iOS 13.0 or later, Xcode 14.0 or later |
| Android | Android 8.0 (API 26) or later, Android Studio |
| Hardware | PAX D135 Bluetooth card reader |
- Sign up for a free North Developer account.
- Contact us for credentials. You will receive your EPX ID (four-part key) and EPX Key for authentication. Once credentials are provisioned, they can be referenced when logged in by selecting the User profile icon in the top right corner of the screen, selecting View Dashboard, then Credentials.
- Apply for a Merchant Processing Account. Once approved, a Merchant ID (MID) will be provided to you.
- Download the PAX Mobile SDK framework for your platform from the Resources page and follow the integration steps below.
When logged in, you can use the Integration Tracker to view the status of your integration, notes from meetings with Integration Engineers, resources related to your solution, and more. - When development is complete, contact us and once we ensure things are working properly, Production credentials will be provided to you.
iOS Integration
Step 1: Add the PaxSDK Framework
-
Create a new folder called
Librariesin your Xcode project's root directory usingFile>New>Folder. -
Drag the
PaxSDK.xcframeworkfile from the downloaded SDK package into your project'sLibrariesfolder. Select "Copy items if needed" before clicking Finish. -
Go to your target's General settings and verify that the
PaxSDK.xcframeworkis listed under the Frameworks, Libraries and Embedded Content section. If not, click the "+" icon and add it manually.
Step 2: Configure Bluetooth Permissions
Add the following keys to your Info.plist to enable Bluetooth communication with the PAX D135 reader:
Step 3: Initialize the SDK (iOS)
The PaxSDK class requires seven parameters for initialization:
| Parameter | Description |
|---|---|
epxId | The ID given by EPX to identify your application (four-part key) |
epxKey | Authentication key for the JSON API, provided by EPX |
environment | Switch between .Uap (sandbox/certification) and .Production |
merchantName | The name or DBA of the merchant (not sent to EPX) |
terminalNumber | Identifies the particular reader and device combination (not sent to EPX) |
maxRetries | Number of failed chip reads before the reader/code goes to the swipe fallback scenario |
trace | Enable to log raw request/response data for debugging |
Step 4: Connect to the PAX D135 Reader (iOS)
Connect to the Bluetooth device using the BLEViewController:
Android Integration
Step 1: Add the SDK Dependency
Add the PAX SDK to your Android project by including the AAR file in your libs folder and adding the following to your build.gradle:
Step 2: Configure Bluetooth Permissions
Add the following permissions to your AndroidManifest.xml:
Step 3: Initialize the SDK (Android)
| Parameter | Description |
|---|---|
easyLink | Instance of EasyLinkSdkManager (singleton) |
epxId | The four-part key provided by EPX (used as the EPI-Id header) |
epxKey | The HMAC key used to generate the EPI-Signature |
Step 4: Connect to the PAX D135 Reader (Android)
First, discover devices using the EasyLink SDK Manager:
Once you have a device, connect to it:
Transaction Workflow
All card-present transactions follow this general flow:
- Initiate Transaction using
runTxn()(Android) or transaction methods likesale(),refund(), etc. (iOS). This opens the reader to accept a chip dip, tap, or card swipe. - Device reads card via chip, tap, or swipe.
- Transaction is sent to EPX and a response is returned.
Listener Methods (Android)
The PaxNabEventListener interface provides the following callback methods:
| Method | Description |
|---|---|
transactionResponse(PaxNabTxnResponse) | Called when the transaction completes. Contains the transaction result with Success status, Message, and nested EpxResponse object containing the actual EPX host response. |
showMessage(String) | Called with display messages for the customer (e.g., "PRESENT CARD", "REMOVE CARD", "PROCESSING..."). Display these messages to the user in your UI. |
debugMessage(String) | Called with debug log messages. Use this for troubleshooting and logging SDK activity. |
Transaction Types
Sale
The sale transaction is an authorization and capture within the same transaction. The authorization is immediately captured, and the transaction will settle during the next batch close time.
Required fields: amount, transaction, batchID, industryType
iOS:
Android:
Authorization Only
An authorization only transaction holds funds on a cardholder's account without capturing. A subsequent capture transaction is required for settlement.
iOS:
Android:
Capture
The capture transaction captures a previous authorization to allow settlement. The capture amount can be equal to or less than the original authorization.
Required fields: amount, batchID, transaction, bric
iOS:
Android:
Refund (Card Present)
The refund transaction returns funds to an account previously acted upon by a settled sale or capture. Multiple partial refunds can be performed up to the original transaction amount.
Required fields: amount, batchID, transaction
iOS:
Android:
Linked Refund (Card Not Present)
A linked refund can be performed without the card present by including the BRIC of the original sale or capture:
iOS:
Android:
Reverse
Voids and reverses an unsettled Sale or Auth Only transaction.
iOS:
Android:
Void
Voids a Capture or Refund before settlement.
Android:
Incremental Authorization
Increases a prior authorization amount. Requires the BRIC from the original authorization.
Android:
Batch Close
Marks transactions for settlement.
Android:
Transaction Lookup
Query a transaction using its BRIC.
Android:
Batch Totals
Retrieve batch totals using batchID.
Android:
Additional Transaction Fields
Beyond the required fields, you can include additional parameters in your transaction requests:
| Field Name | EPX Field | Description |
|---|---|---|
invoiceNumber | INVOICE_NBR | Invoice number for the transaction |
orderNumber | ORDER_NBR | Order number for the transaction |
tipAmount | TIP_AMT | Tip amount (decimal) |
taxAmount | TAX_AMT | Tax amount (decimal) |
taxExempt | TAX_EXEMPT | Tax exempt flag |
emailAddress | Customer email address | |
address.address | ADDRESS | Street address for AVS verification |
address.zipCode | ZIP_CODE | ZIP code for AVS verification |
address.firstName | FIRST_NAME | Customer first name |
address.lastName | LAST_NAME | Customer last name |
address.state | STATE | State for AVS verification |
softDescriptor | SOFT_DESCRIPTOR | Soft descriptor for statement |
Example with additional fields (iOS):
Response Handling
Android:
Displaying Messages to User:
Use the PaxNabEventListener methods to surface status or instructions:
Support
For further assistance with your integration, please contact our support team or visit the Resources page for additional documentation and downloads.