Card Present (NFC Contactless) Transactions
A Card Present (CP) NFC contactless transaction lets you process payments by reading encrypted card data transmitted wirelessly from the cardholder's card or mobile wallet. The cardholder taps their NFC-enabled card, smartphone, or wearable device against a compatible contactless reader at the point of sale.
Unlike EMV chip transactions that require card insertion, NFC contactless transactions complete without physical contact — offering the fastest checkout experience at the point of sale. The payment data structure is identical to EMV chip, with the only difference being the card capture method: tap instead of insert.
Common use cases include:
- Customer-Facing Retail: High-volume POS environments where speed and contactless experience reduce queue times.
- Mobile Wallet Payments: A customer pays using Apple Pay, Google Pay, or Samsung Pay by tapping their device against the NFC reader.
- Fallback from Chip: NFC tap is preferred but the cardholder's card does not support contactless — the transaction falls back to EMV chip insertion.
How it Works
NFC contactless CP transactions require you to set cardPresent to true and populate the posData object with contactless-specific values. Two configurations are supported depending on whether you intend to capture the payment immediately or at a later time.
NFC Authorization (Preauthorization)
Use this configuration when performing an authorization-only transaction that will be captured later. Set authorizationIndicator to "Undefined" and transactionStatus to "Preauthorization".
{
"cardPresent": true,
"authorizationIndicator": "Undefined",
"posData": {
"cardholderPresence": "Present",
"deviceAttendance": "Attended",
"deviceInputCapability": "ChipSwipe",
"deviceLocation": "OnPremise",
"panCaptureMethod": "ContactlessChip",
"partialApprovalSupport": "Supported",
"transactionStatus": "Preauthorization"
}
}NFC Sale
Use this configuration when the transaction is intended to be finalized immediately. Set authorizationIndicator to "Final" and transactionStatus to "Normal".
{
"cardPresent": true,
"authorizationIndicator": "Final",
"posData": {
"cardholderPresence": "Present",
"deviceAttendance": "Attended",
"deviceInputCapability": "ChipSwipe",
"deviceLocation": "OnPremise",
"panCaptureMethod": "ContactlessChip",
"partialApprovalSupport": "Supported",
"transactionStatus": "Normal"
}
}Understanding Partial Approvals
The partialApprovalSupport field determines whether the issuing bank can approve a portion of the requested amount when the card has insufficient funds for the full transaction.
| Value | Description | When to use |
|---|---|---|
Supported | The issuer can approve a partial amount. Your application collects the remaining balance using another payment method. | Use when your application supports split-tender payments. |
NotSupported | The transaction is declined if insufficient funds are available. No partial approval is returned. | Use when your application does not support multiple payment methods for a single transaction. |
Example: Purchase amount is $100. Available funds on the card are $60. The issuer approves $60, and the merchant collects the remaining $40 using another payment method.
Best Practices
| Practice | Description |
|---|---|
| Prefer NFC contactless over swipe when available | NFC contactless carries the same low fraud risk and interchange rate as EMV chip. Always prefer tap or chip over magnetic stripe when the card and hardware support it. |
Set panCaptureMethod to "ContactlessChip" | Passing an incorrect capture method will result in interchange downgrade or network decline. |
Set deviceInputCapability to "ChipSwipe" | This declares that the device supports both chip and swipe entry alongside contactless, required for correct interchange classification on NFC transactions. |
Accurately reflect the transaction environment in posData | Each posData field must match the actual transaction context. Incorrect values cause interchange downgrades or network declines. |
| Handle partial approvals explicitly | If your application supports split-tender payments, set partialApprovalSupport to "Supported" and handle partial approval responses in your integration logic. |