Take a payment
To charge a card, call this endpoint with the amount and the device you want to charge on. Straumur pre-creates the payment (owning the amount and reference) and returns a ready-to-run Adyen SaleToPOIRequest. Your app hands that request to the SDK, which performs the contactless read.
You identify the device by its POIID — the installationId returned when you created the session.
Request
POST https://checkout-api.staging.straumur.is/api/v1/taptopay/integrator/payment
Headers:
X-API-key: YOUR_API_KEY
Content-Type: application/json
Body:
{
"storeMid": "1234567890",
"poiId": "A8E90121-598F-4553-89E0-B5492AFD9D37",
"amount": 499000,
"expectedCurrency": "ISK"
}
| Field | Type | Description | |
|---|---|---|---|
| storeMid | String | Required | The MID of the merchant store the charge is for. Must be a store your API key is authorized for. |
| poiId | String | Required | The device's POIID (installationId from the session). The charge runs on this device. |
| amount | Integer | Required | The amount to charge, in minor units, like every other Straumur amount: 499000 is 4990 ISK. ISK amounts must end in 00, and the amount must be at least the currency's minimum. See Currencies and Minor Units. |
| expectedCurrency | String | Required | The currency your app displayed to the shopper. Straumur never charges in this — it only confirms it matches the store's settlement currency and rejects on mismatch. |
Send 499000 for 4990 ISK, not 4990. A major-unit amount is not rejected as malformed: for ISK it is read as a hundredth of what you meant, or rejected if it doesn't end in 00.
Response
{
"reference": "a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6",
"amount": 499000,
"currency": "ISK",
"saleToPoiRequest": "{\"SaleToPOIRequest\":{ ... }}",
"responseDateTime": "2026-10-21T10:16:00Z",
"responseIdentifier": "e3605f81-6b09-4ce1-83ad-5a8d49f3cd44"
}
| Field | Type | Description |
|---|---|---|
| reference | String | The Straumur-generated payment reference. It is echoed back on the payment webhook, so keep it to correlate the outcome. |
| amount | Integer | The amount charged, in minor units — the same units as the request. |
| currency | String | The store's settlement currency, resolved server-side. |
| saleToPoiRequest | String | The serialized Adyen Terminal API SaleToPOIRequest. Hand it to the SDK verbatim — do not modify it. |
| responseDateTime | DateTime | When Straumur answered (UTC). |
| responseIdentifier | String | A unique id for this response. Quote it when contacting Straumur support. |
Pass saleToPoiRequest to the SDK to run the transaction. The shopper taps their card, and the SDK completes the read on the device.
Getting the result
The authorization result is not returned in the response to this call — the card is read after you receive it. Instead, Straumur delivers the outcome on your payment webhook, exactly like any other Straumur payment, matched by the reference above.
See Webhooks → Payment → Authorization event for the payload and how to validate it.
When to expect errors
Errors return HTTP 400 with errorMessage, errorCode and responseIdentifier (see Errors).
errorCode | errorMessage | When |
|---|---|---|
1005 | Could not parse field [{0}]. Expected a {1}. | A field has the wrong JSON type, e.g. amount sent as an object. |
1006 | Unknown field [{0}] in the JSON request body. | The body contains a field this endpoint does not take. |
2000 | Field [{0}] cannot be empty. | storeMid, poiId, amount or expectedCurrency is missing or blank. |
2045 | Merchant cannot access store or store does not exist. Value: [{0}] | No store with that MID that your key is authorized for. |
2039 | Unable to process due to merchant status - Inactive. Please contact support. | The store's merchant is not active. |
2046 | Tap to Pay is not enabled for the store. Value: [{0}] | The store's contract is not active, or Tap to Pay is not enabled on it. |
2047 | Tap to Pay device is not active. Value: [{0}] | No active device with that poiId in the store — unknown, never completed a session, or disabled. |
2048 | Field [{0}] does not match the store's settlement currency. Value: [{1}] | expectedCurrency does not match the store's settlement currency. |
2001 | Field [{0}] is not a valid number. Value: [{1}]. | amount is not a whole number of minor units. |
2002 | Field [{0}] cannot be negative. Value: [{1}]. | amount is negative. |
2026 | Amount in minor units for ISK must end in 00. Value: [{0}]. | An ISK amount that does not end in 00 — usually an amount sent in major units. |
2022 | Amount requested is lower than the minimum amount for the currency. Value: [{0}]. Min amount: [{1}] | amount is below the currency's minimum, which includes zero. |