Terminal SDK & API Integration

This guide covers common issues and best practices when integrating myPOS terminals into custom software using the available SDKs and APIs.


Choosing an Integration Method

MethodBest forCompatible devicesNotes
USBRetail, kiosksGo2, Ultra, Carbon, SigmaFast, stable — recommended for most retail use cases
BluetoothMobile / tablet setupsGo2 (with BT module), Android SDK devicesGo2 must be ordered with the Bluetooth hardware module
WiFi TCP/IPLocal network setupsGo2, Ultra, Carbon, SigmaPOS and master device must be on the same subnet; POSLink Manager must be set to WiFi mode
RS-232Legacy integrations, kiosksSigma (RS-232A or RS-232B port)Full protocol documentation available under NDA
MDBVending machinesSigmaVia MDB cable; see Sigma & Vending Machine guide
ePOS / EPOS APICloud-initiated paymentsUltra, Carbon (Android Smart terminals only)NOT compatible with Go2

ePOS API vs. CRR API

ePOS API

Allows ECR/ERP/cash register systems to send payment commands to a myPOS terminal over REST — enabling direct payment initiation remotely (not requiring local network proximity). Works with Ultra and Carbon (Android Smart terminals). Not compatible with Go2.

CRR API / ECR Mode

Cash register integration over the local network (TCP/IP). Requires both devices to be on the same subnet. Compatible with Go2 and Android Smart terminals. Uses device profiles and POSLink Manager.


Available SDKs

SDKUse caseCompatible devicesConnection types
Android SDK (Slave SDK)Control a POS terminal from an Android master deviceGo2, Ultra, CarbonUSB, Bluetooth, TCP/IP
.NET SDKControl a POS terminal from a Windows machineSigma, Go2USB-C, RS-232
iOS SDKIn-person payments initiated from an iOS deviceCompatible terminalsBluetooth, TCP/IP
Smart SDKBuild apps that run directly on the terminalUltra, CarbonOn-device (no external master)
Glass SDK (SoftPOS)Turn an Android phone or tablet into a payment deviceAndroid phone/tablet with NFCNFC contactless

SoftPOS (Glass SDK) is not certified for unattended use due to security requirements. It is intended for supervised payment acceptance only. For unattended environments, use a Sigma or Go2 device.


Android SDK Setup & Common Issues

Prerequisites

  • The terminal and master device must be on the same WiFi network (or connected via USB/Bluetooth).
  • The terminal must be set to Slave / Cash Register mode (see Terminal Configuration guide).
  • POSLink Manager must be running (open, not just installed) and set to the correct communication mode.
  • Always send a GET_STATUS command before any transaction command to confirm the terminal is ready.
  • Avoid switching to EPOS mode — stay on WiFi for consistent behavior.

USB not recognized (myPOS Ultra)

Ensure POSLink Manager is running and the connection type in POSLink Manager is explicitly set to USB. The terminal will not appear as a USB device without both conditions being met.

Access denied on COM port

The "Access Denied" error on a COM port means another application (or the OS) is currently occupying that port.

  • Check for other apps (POS software, terminal emulators) that may have the port open.
  • Reboot the machine and try again before any other serial application opens.
  • Verify the correct COM port is configured in your POS software settings.

.NET SDK Setup

  • Initialize every session with the GET_STATUS method before sending any transaction commands.
  • Integration supported via USB-C or RS-232.
  • For .NET Core compatibility, request the DLL source code from the integration team at integrations@mypos.com.
  • Documentation: see the myPOS developer portal under In-Person Payments → .NET SDK.

APK Signing Issues on myPOS Devices

If your app fails to install on a myPOS terminal (e.g. Ultra, Carbon) due to signature issues:

1
Enable both V1 and V2 APK signing

In your build.gradle file, ensure both V1 (JAR) and V2 (full APK) signing are enabled.

2
Add extractNativeLibs to your manifest

Add android:extractNativeLibs="true" in your Android manifest file.

3
Upload unsigned release APK to App Market

Upload an unsigned release APK — myPOS applies the correct signature during distribution. Do not sign the APK yourself. Increment the version number when submitting an update.


Screen Pinning / Lock Task Mode

To lock a custom app to the screen (kiosk mode) on a myPOS Android terminal:

  • Use startLockTask() to lock the current activity to the screen.
  • Use stopLockTask() to exit lock task mode.
  • Implement a 5-second simultaneous press-and-hold gesture on two UI elements as the unlock mechanism — this prevents accidental exits while remaining accessible to staff.

MIFARE / NFC Card Detection

Direct access to the NFC reader is restricted for security reasons on myPOS terminals. To detect and interact with MIFARE cards:

  • Use the UltralightManagement class from the Smart SDK.
  • Methods: bind → open → detect → read block.
  • Refer to the Smart SDK documentation on GitHub for the full usage reference.

Pre-Authorization via Terminal SDK

Flow

  1. Customer taps card for a pre-authorized amount (maximum expected charge)
  2. After service is rendered, finalize with the actual amount (up to the pre-authorized value)
  3. Pre-authorizations are valid for up to 30 days

Key identifiers

  • PREAUTH_CODE — use to reference the authorization when completing or cancelling
  • SID — Store ID, required alongside PREAUTH_CODE
  • Approval code 00 = success

Cancellations are possible at any time within the 30-day window. There is no limit on the number of cancellations.


Reversals via SDK

  • A reversal requires the customer's card to be physically presented — the card must be tapped or inserted again.
  • Reversals can be performed on any transaction, not just the most recent one.
  • A new RRN (Reference Retrieval Number) is generated for each reversal.
  • Confirm success by checking both the Approval property (should be '00') and the Status property — checking only one is insufficient.

Double-Charge Prevention (PIN Errors)

When a payment returns a response code indicating PIN is required (codes 1A, 70, 65, 55):

1Prompt the customer to enter their PIN on the terminal.
2Wait 20 seconds, then use MPRGetTnxStatus to check the transaction status.
3Repeat if necessary. The first transaction attempt is automatically cancelled and a new one is initiated — implement this flow correctly to prevent double charges.

Last Transaction Data After App Crash

If your app crashes during a payment, use the LastTransactionProvider class from the Smart SDK to retrieve the last transaction data after restarting. Implement this logic in your app to avoid lost transaction records.


Aborting a Payment on Sigma

To abort a payment before the card is tapped:

  • .NET SDK: call StopWaitingForCard()
  • IPP API: send METHOD=PURCHASE, STAGE=101

Ensure all mandatory fields are correctly populated before sending any command to avoid the terminal entering an inconsistent state.


EPOS API Payments Not Appearing on Terminal

If payment commands sent via the EPOS API do not show on the terminal screen:

  1. Confirm POSLink Manager is installed and running.
  2. Confirm the Pair Type in POSLink Manager is explicitly set to EPOS mode.
  3. Confirm the terminal model is compatible with ePOS (Ultra or Carbon — not Go2).

Sending Transaction Data for Receipt Printing

Terminals cannot proactively push data to a connected computer, but you can include custom data when initiating a payment from a master device. The terminal will return transaction details — including the custom data — to the software after the payment completes.

This requires SDK or API integration. If you need to implement this, involve your software provider for the specific integration design.