Payment Request
A payment request starts a payment on the terminal. The shopper taps or inserts their card, and you get the result back in the same call.
Flow
- Your POS sends a payment request to Adyen.
- Adyen forwards it to the terminal, which asks the shopper for their card.
- The terminal processes the payment.
- Your POS gets the result in the response.
Test URL
POST https://terminal-api-test.adyen.com/sync
Add your API key to the header:
- X-API-Key: [your-api-key]
warning
The connection stays open until the shopper finishes. Set your HTTP timeout to at least 150 seconds.
Request Example
{
"SaleToPOIRequest": {
"MessageHeader": {
"ProtocolVersion": "3.0",
"MessageClass": "Service",
"MessageCategory": "Payment",
"MessageType": "Request",
"SaleID": "POS-01",
"ServiceID": "0001",
"POIID": "S1F2-000158213601234"
},
"PaymentRequest": {
"SaleData": {
"SaleTransactionID": {
"TransactionID": "9990QQAZ1221",
"TimeStamp": "2026-10-01T12:00:00+00:00"
}
},
"PaymentTransaction": {
"AmountsReq": {
"Currency": "ISK",
"RequestedAmount": 4890
}
}
}
}
}
Request Fields
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| MessageCategory | String | Required | The type of request. Payment for a payment. | Payment |
| SaleID | String | Required | The ID of your POS system or cash register. | POS-01 |
| ServiceID | String | Required | Your unique ID for this request. Must be unique per terminal within 48 hours. Max 10 characters. | 0001 |
| POIID | String | Required | The ID of the terminal. See Get Started. | S1F2-000158213601234 |
| TransactionID | String | Required | Your reference for the payment. | 9990QQAZ1221 |
| TimeStamp | String | Required | The date and time of the request, in ISO 8601 format. | 2026-10-01T12:00:00+00:00 |
| Currency | String | Required | The three-character ISO currency code. | ISK |
| RequestedAmount | Decimal | Required | The amount in major units, so 4890 is 4.890 ISK and 10.99 is 10,99 EUR. | 4890 |
caution
RequestedAmount is in major units. This differs from Straumur's Hosted Checkout and Payment Gateway, which use minor units.
Response
{
"SaleToPOIResponse": {
"MessageHeader": {
"MessageCategory": "Payment",
"MessageType": "Response",
"SaleID": "POS-01",
"ServiceID": "0001",
"POIID": "S1F2-000158213601234"
},
"PaymentResponse": {
"POIData": {
"POITransactionID": {
"TransactionID": "BV0q001765198762003.NC6HT9CRT65ZGN82",
"TimeStamp": "2026-10-01T12:00:15.000Z"
}
},
"PaymentResult": {
"AmountsResp": {
"Currency": "ISK",
"AuthorizedAmount": 4890
}
},
"Response": {
"Result": "Success",
"AdditionalResponse": "pspReference=NC6HT9CRT65ZGN82&..."
}
}
}
}
Response Fields
| Field | Type | Description | Example |
|---|---|---|---|
| Result | String | Success or Failure. | Success |
| ErrorCondition | String | Only on failure. Why the payment failed, for example Refusal or Aborted. | Refusal |
| TransactionID (in POIData) | String | The terminal's transaction reference. You need it for refunds. The part after the dot is the PSP reference. | BV0q001765198762003.NC6HT9CRT65ZGN82 |
| AuthorizedAmount | Decimal | The amount that was authorized. | 4890 |
| AdditionalResponse | String | Extra details about the payment, as URL-encoded key-value pairs. | pspReference=NC6HT9CRT65ZGN82&... |
tip
If you don't get a response (for example a timeout), don't send the payment again. Check what happened with a Transaction Status request.