# Initiate transactions

Process an in-person card payment.

## Initiate a card transaction

/v1/soft-pos-transactions

### Request examples

Use the following requests to initiate a card transaction on a point-of-sale device. Tap+ is contactless; card details are captured on the device, so don't send `fundingData` in the request.

Purchase
```json
{
  "transactionMethod": {
    "entryType": "Instore",
    "fundingType": "Card",
    "intent": "Purchase"
  },
  "amounts": {
    "currencyCode": "GBP",
    "transaction": 9.99
  },
  "merchantTransactionDate": "2025-12-02T10:30:00Z",
  "merchantTransactionId": "TXN-12345-ABCDE",
  "pointOfInteraction": {
    "pointOfSaleId": "POS001",
    "invokeKeyed": false,
    "language": "EN",
    "storeAndForwardType": "None"
  },
  "site": "SITE-1",
  "merchant": "MERCHANT-1",
  "merchantDeeplink": "myapp://payment/callback"
}
```

Standalone refund
```json
{
  "transactionMethod": {
    "entryType": "Instore",
    "fundingType": "Card",
    "intent": "StandaloneRefund"
  },
  "amounts": {
    "currencyCode": "GBP",
    "transaction": 20
  },
  "merchantTransactionDate": "2025-12-02T10:30:00Z",
  "merchantTransactionId": "TXN-REFUND-001",
  "pointOfInteraction": {
    "pointOfSaleId": "POS001",
    "invokeKeyed": false,
    "language": "EN",
    "storeAndForwardType": "None"
  },
  "site": "SITE-1",
  "merchant": "MERCHANT-1",
  "merchantDeeplink": "myapp://payment/callback"
}
```

| Parameter | Description |
|  --- | --- |
| `transactionMethod`object | Details about the transaction method. |
| `transactionMethod.entryType`string | The entry type. For Tap+ transactions, this is always `Instore`. |
| `transactionMethod.fundingType`string | The funding type. For card transactions, this is always `Card`. |
| `transactionMethod.intent`string | The payment intent. [Learn more about intents](/guides/tap-plus/how-it-works#intents).Possible values:`Purchase``StandaloneRefund` |
| `amounts`object | Details about the transaction amount. |
| `amounts.currencyCode`string | The currency code associated with the transaction, in ISO 4217 format. |
| `amounts.transaction`number | The transaction amount. The numbers after the decimal will be zero padded if they are less than the expected `currencyCode` exponent. For example, GBP 1.1 = GBP 1.10, EUR 1 = EUR 1.00, or BHD 1.3 = 1.300. The transaction will be rejected if numbers after the decimal are greater than the expected `currencyCode` exponent (e.g., GBP 1.234), or if a decimal is supplied when the `currencyCode` of the exponent does not require it (e.g., JPY 1.0). |
| `merchantTransactionDate`date-time | The date and time when the transaction happened, in ISO 8601 format. |
| `merchantTransactionId`string | A unique identifier for this transaction. |
| `pointOfInteraction`object | Details about the device and environment where a card present transaction takes place. |
| `pointOfInteraction.pointOfSaleId`string | A PXP unique identifier for the specific point-of-sale device, often assigned by the merchant or payment processor. |
| `pointOfInteraction.language`string | The display language of the POS device, in ISO 639-1 format (e.g. `EN` for English). |
| `pointOfInteraction.invokeKeyed`boolean | Whether keyed entry is invoked. |
| `pointOfInteraction.storeAndForwardType`string | The store-and-forward type (e.g. `None`). |
| `site`string | Your unique site identifier, as assigned by PXP. |
| `merchant`string | Your unique merchant identifier, as assigned by PXP. |
| `merchantDeeplink`string | Optional. The URL or scheme the app will use to return the customer after the transaction (e.g. `myapp://payment/callback`). |


### Response examples

Purchase
If your request is successful, you'll receive a `200` response that includes the transaction's updated `state`. You'll also receive a Transaction (Card Authorised) webhook notification.

```json
{
  "state": "Authorised",
  "stateData": {
    "code": "CRD000",
    "message": "Approved"
  },
  "approvalCode": "212934",
  "merchantTransactionDate": "2025-03-25T09:07:40.974520+00:00",
  "merchantTransactionId": "POS_001",
  "systemTransactionId": "52c8c45e-f922-4208-9c83-23ec0df2d37c",
  "providerTransactionId": "",
  "fundingData": {
    "maskedPrimaryAccountNumber": "541333******0011",
    "expiryMonth": "12",
    "expiryYear": "2025",
    "cardScheme": "MasterCard",
    "gatewayTokenId": "136c92af-da26-411d-8925-388ff2fc7a71",
    "emvDataResponse": {
      "applicationId": "A0000000041010",
      "applicationLabel": "MASTERCARD",
      "authorisationResponseCode": "00",
      "cardHolderVerificationMethodResults": "Pin verified",
      "panSequenceNumber": "03",
      "preferredName": "MasterCard"
    },
    "providerResponse": {
      "provider": "PXP Financial",
      "code": "00",
      "message": "",
      "merchantId": "7171910017",
      "terminalId": "71134563",
      "paymentAccountReference": "",
      "schemeTransactionId": "",
      "merchantAdvice": {
        "code": "",
        "message": ""
      },
      "settlementDate": "2025-04-11T09:11:45.737607+01:00",
      "issuerResponseCode": "00"
    }
  }
}
```

Standalone refund
If your request is successful, you'll receive a `200` response that includes the transaction's updated `state`. You'll also receive a Transaction (Card Authorised) webhook notification.

```json
{
  "state": "Authorised",
  "stateData": {
    "code": "CRD000",
    "message": "Approved"
  },
  "approvalCode": "490113",
  "merchantTransactionDate": "2025-04-17T10:07:40.974520+01:00",
  "merchantTransactionId": "ASR_170425_02",
  "systemTransactionId": "fe94ae54-7f87-4aff-b9d0-85a0bde76735",
  "providerTransactionId": "",
  "fundingData": {
    "maskedPrimaryAccountNumber": "373953*****1004",
    "expiryMonth": "12",
    "expiryYear": "2025",
    "cardScheme": "AmericanExpress",
    "gatewayTokenId": "101afa0c-b427-497a-992b-d78a09bdeb27",
    "providerResponse": {
      "provider": "American Express",
      "code": "000",
      "message": "",
      "merchantId": "0371518531",
      "terminalId": "12345678",
      "paymentAccountReference": "99999999999999999999999999999999999",
      "schemeTransactionId": "000003542490113",
      "merchantAdvice": {
        "code": "",
        "message": ""
      },
      "settlementDate": "2025-04-17T08:41:50.801604+01:00",
      "issuerResponseCode": "00"
    }
  }
}
```