Accept card-present payments in your mobile app.
n2Tap provides headless, PCI-compliant SoftPOS SDKs and app-to-app integration for Android. Ship in days — not months.
// 1. Build the intent val intent = Intent( "com.n2tap.ACTION_START_TRANSACTION" ).apply { putExtra("EXTRA_AMOUNT", 1000 // minor units putExtra("EXTRA_CURRENCY", "USD") } // 2. Launch startActivityForResult(intent, REQUEST_CODE)
{ "status": "SUCCESS", "transactionId": "txn_12345",
"card": { "brand": "VISA", "maskedPan": "**** 1234" } }
Why n2Tap
Everything you need to ship SoftPOS
Built for mobile app teams, ISVs, and POS integrators who need a secure, customizable integration with fast time-to-market.
Secure by default
Sensitive operations — PIN entry and card read — are isolated inside certified SDK modules. PCI CPoC / MPoC compliant out of the box.
Fast integration
Send Android intents or use n2app-lib to construct and receive structured payment responses in minutes, not sprints.
Headless & composable UI
Build your exact payment UX using Jetpack Compose, XML layouts, React Native, or Flutter. No forced UI — pure control.
Production-ready docs
Well-documented APIs, structured response codes, release notes, and runnable examples for every supported platform.
Quickstart
Ship in 3 steps
From zero to a live card-present transaction — with full UI customization and structured responses.
Install the SDK or plugin
Add the Headless SDK or the platform plugin (React Native / Flutter) to your project via your package manager.
Initialize with your credentials
Configure the SDK with your enabler credentials and attach lifecycle hooks to your Activity or AppDelegate.
Start a transaction
Fire an Intent or call the SDK API — get a structured JSON response with status, transaction ID, and masked card data.
// Full example — Kotlin val intent = Intent( "com.n2tap.ACTION_START_TRANSACTION" ).apply { putExtra("EXTRA_AMOUNT", 1000) putExtra("EXTRA_CURRENCY", "USD") putExtra("EXTRA_MERCHANT_ID", merchantId) } startActivityForResult(intent, REQ_CODE) // onActivityResult override fun onActivityResult( requestCode: Int, resultCode: Int, data: Intent? ) { val result = data?.getStringExtra("RESULT") }
Platforms
Pick your stack
Native SDK and cross-platform plugins for every major mobile development framework.
React Native
Cross-platform JS/TS plugin. The n2app-lib wrapper simplifies intent construction and response parsing.
Plugin availableFlutter
Official Dart plugin with full native channel integration, typed response models, and production examples.
Plugin availableKotlin / Android
Headless SDK for deep UI control. Works with Jetpack Compose or XML layouts with full production features.
Headless SDKAPI reference
Structured request & response model
Clear status codes and predictable JSON payloads. Build robust error handling from day one.
{
"status": "SUCCESS",
"transactionId": "txn_12345",
"amount": 1000,
"currency": "USD",
"card": {
"brand": "VISA",
"maskedPan": "**** **** **** 1234",
"entryMode": "CONTACTLESS"
},
"timestamp": "2025-01-15T10:23:45Z"
}Ready to go live?
Join mobile app teams and ISVs using n2Tap to accept secure card-present payments in days.