n2
n2Tap
SoftPOS SDKs
PCI CPoC & MPoC certified

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.

Secure by defaultHeadless UIFast integration
MainActivity.kt
Kotlin
// 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)
Response
{ "status": "SUCCESS", "transactionId": "txn_12345",
"card": { "brand": "VISA", "maskedPan": "**** 1234" } }
3 steps
Install → Initialize → Transact
3 SDKs
Kotlin · React Native · Flutter
PCI
CPoC & MPoC compliant

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.

1

Install the SDK or plugin

Add the Headless SDK or the platform plugin (React Native / Flutter) to your project via your package manager.

2

Initialize with your credentials

Configure the SDK with your enabler credentials and attach lifecycle hooks to your Activity or AppDelegate.

3

Start a transaction

Fire an Intent or call the SDK API — get a structured JSON response with status, transaction ID, and masked card data.

transaction.kt
App-to-App
// 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")
}

API reference

Structured request & response model

Clear status codes and predictable JSON payloads. Build robust error handling from day one.

response.json
Example
{
  "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.