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
| Method | Best for | Compatible devices | Notes |
|---|---|---|---|
| USB | Retail, kiosks | Go2, Ultra, Carbon, Sigma | Fast, stable — recommended for most retail use cases |
| Bluetooth | Mobile / tablet setups | Go2 (with BT module), Android SDK devices | Go2 must be ordered with the Bluetooth hardware module |
| WiFi TCP/IP | Local network setups | Go2, Ultra, Carbon, Sigma | POS and master device must be on the same subnet; POSLink Manager must be set to WiFi mode |
| RS-232 | Legacy integrations, kiosks | Sigma (RS-232A or RS-232B port) | Full protocol documentation available under NDA |
| MDB | Vending machines | Sigma | Via MDB cable; see Sigma & Vending Machine guide |
| ePOS / EPOS API | Cloud-initiated payments | Ultra, 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
| SDK | Use case | Compatible devices | Connection types |
|---|---|---|---|
| Android SDK (Slave SDK) | Control a POS terminal from an Android master device | Go2, Ultra, Carbon | USB, Bluetooth, TCP/IP |
| .NET SDK | Control a POS terminal from a Windows machine | Sigma, Go2 | USB-C, RS-232 |
| iOS SDK | In-person payments initiated from an iOS device | Compatible terminals | Bluetooth, TCP/IP |
| Smart SDK | Build apps that run directly on the terminal | Ultra, Carbon | On-device (no external master) |
| Glass SDK (SoftPOS) | Turn an Android phone or tablet into a payment device | Android phone/tablet with NFC | NFC 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:
In your build.gradle file, ensure both V1 (JAR) and V2 (full APK) signing are enabled.
Add android:extractNativeLibs="true" in your Android manifest file.
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
UltralightManagementclass 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
- Customer taps card for a pre-authorized amount (maximum expected charge)
- After service is rendered, finalize with the actual amount (up to the pre-authorized value)
- Pre-authorizations are valid for up to 30 days
Key identifiers
PREAUTH_CODE— use to reference the authorization when completing or cancellingSID— 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
Approvalproperty (should be'00') and theStatusproperty — 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):
MPRGetTnxStatus to check the transaction status.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:
- Confirm POSLink Manager is installed and running.
- Confirm the Pair Type in POSLink Manager is explicitly set to EPOS mode.
- 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.