Card Present (Keyed) Transactions

Process card-present payments without a terminal device — kiosks, in-store web apps, and attended manual entry — with the correct posData classification for interchange accuracy.

Use a keyed Card Present (CP) transaction when the cardholder is physically present at the merchant location but no Priority terminal device is involved. The cashier or customer keys card data directly into your software — a kiosk, an in-store web app, or a manual-entry interface — and your API request must communicate that this is a card-present scenario through the posData and cardPresent fields.

📌

Who this is for — ISVs building in-store experiences where card data is keyed into software (kiosks, in-store web apps, attended manual entry) rather than captured by a terminal device.


What Makes a Transaction "Card Present, Keyed"

A keyed CP transaction has two defining characteristics:

ConditionRequired value
The cardholder and the card are physically present at the merchant locationcardPresent: true
No Priority terminal device captured the card — the data was keyed into softwareposData.panCaptureMethod: "Manual"

The defining factor is physical cardholder presence — not whether a terminal device was used. A transaction with the cardholder physically present but card data keyed manually is still card-present, and must be classified that way for correct interchange treatment.

⚠️

Setting cardPresent: false on a keyed CP transaction downgrades the interchange classification to card-not-present rates, increasing your processing cost. Always reflect physical presence accurately.


When to Use This Path

ScenarioDescription
In-store kioskCustomer enters card data into a self-service kiosk at the merchant location.
In-store web applicationCustomer or attendant uses a payment webpage served at the merchant's physical location.
Attended manual entryCashier manually keys card data while the customer and card are physically present (for example, when a chip is damaged or a magstripe is unreadable).

For card-present transactions involving a terminal device, use Path A — Priority Terminal API instead — posData is auto-populated by the terminal there, and you do not set these fields in the request.


How posData Differs from Terminal Transactions

Terminal API transactionKeyed CP transaction
posDataAuto-populated by the terminalSet by your application in the request body
cardPresentAuto-setSet by your application
Card captureTerminal hardware captures and encrypts the PANYour application captures the keyed PAN

Because no terminal is present to supply environmental data, your application must declare the transaction environment through posData so the card network classifies the transaction correctly.


Required posData Fields

Every keyed CP transaction must include the following fields:

FieldValue for keyed CPWhat it tells the network
panCaptureMethodManualCard data was keyed, not swiped, chipped, or tapped.
cardholderPresencePresentThe cardholder is physically at the merchant location.
deviceAttendanceAttendedA staff member is operating the entry device. (Use a different value only for true self-service kiosks.)
deviceInputCapabilityKeyedOnlyThe entry device supports only keyed input — no chip, NFC, or swipe reader.
deviceLocationOnPremiseEntry happened at the merchant's physical premises.
partialApprovalSupportSupported or NotSupportedWhether your application can handle a partial approval from the issuer — see Partial Approvals below.
transactionStatusNormal for sales / Preauthorization for authsTells the network whether this is a final sale or an authorization to be captured later.
authorizationIndicatorFinal for sales / Undefined for authsPairs with transactionStatus above.

[verify — confirm complete posData field list and accepted values with the API team before publish]


Configurations

Keyed Sale

Use this configuration when the transaction is finalized immediately. Set authorizationIndicator: "Final" and transactionStatus: "Normal".

{
  "cardPresent": true,
  "authorizationIndicator": "Final",
  "posData": {
    "cardholderPresence": "Present",
    "deviceAttendance": "Attended",
    "deviceInputCapability": "KeyedOnly",
    "deviceLocation": "OnPremise",
    "panCaptureMethod": "Manual",
    "partialApprovalSupport": "Supported",
    "transactionStatus": "Normal"
  }
}

Keyed Authorization (Preauthorization)

Use this configuration for an authorization-only transaction that will be captured later. Set authorizationIndicator: "Undefined" and transactionStatus: "Preauthorization".

{
  "cardPresent": true,
  "authorizationIndicator": "Undefined",
  "posData": {
    "cardholderPresence": "Present",
    "deviceAttendance": "Attended",
    "deviceInputCapability": "KeyedOnly",
    "deviceLocation": "OnPremise",
    "panCaptureMethod": "Manual",
    "partialApprovalSupport": "Supported",
    "transactionStatus": "Preauthorization"
  }
}

Capture the authorization later through the standard authorize-then-capture flow. See Authorize Now, Capture Later.


Partial Approvals

The partialApprovalSupport field controls how the issuer handles cards with insufficient funds for the full amount.

ValueBehaviorWhen to use
SupportedThe issuer may approve a partial amount. Your application collects the remainder via another tender (split-tender flow).When your POS can collect a second payment method on the same order.
NotSupportedThe transaction is declined if funds are insufficient — no partial approval is returned.When your POS cannot handle multiple tenders per order.

Example. Order total is $100; available funds on the card are $60.

  • With partialApprovalSupport: "Supported" — the issuer approves $60. Your application collects the remaining $40 via another payment method.
  • With partialApprovalSupport: "NotSupported" — the issuer declines the transaction. The merchant collects $100 via another method or cancels the sale.

Best Practices

PracticeWhy it matters
Always set cardPresent: trueSetting it to false classifies as card-not-present and downgrades interchange.
Mirror the actual environment in posDataEach field has a downstream interchange and risk consequence. Don't copy defaults blindly.
Use Preauthorization when capturing laterNormal is for final sales only — don't use it for auth-then-capture flows.
Decide on partial approvals up frontDon't set Supported unless your POS actually handles split tenders.
Use Path A for terminal-based CP transactionsposData is auto-populated there. This page applies only when card data is keyed into software.

[verify — endpoint URL, full request body schema, and sample response pending confirmation with API team]


Where to Go Next


.readme-logo { display: none !important; }