Skip to main content

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"
}
FieldTypeDescription
storeMidStringRequiredThe MID of the merchant store the charge is for. Must be a store your API key is authorized for.
poiIdStringRequiredThe device's POIID (installationId from the session). The charge runs on this device.
amountIntegerRequiredThe 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.
expectedCurrencyStringRequiredThe 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.
Amounts are in minor units

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"
}
FieldTypeDescription
referenceStringThe Straumur-generated payment reference. It is echoed back on the payment webhook, so keep it to correlate the outcome.
amountIntegerThe amount charged, in minor units — the same units as the request.
currencyStringThe store's settlement currency, resolved server-side.
saleToPoiRequestStringThe serialized Adyen Terminal API SaleToPOIRequest. Hand it to the SDK verbatim — do not modify it.
responseDateTimeDateTimeWhen Straumur answered (UTC).
responseIdentifierStringA 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).

errorCodeerrorMessageWhen
1005Could not parse field [{0}]. Expected a {1}.A field has the wrong JSON type, e.g. amount sent as an object.
1006Unknown field [{0}] in the JSON request body.The body contains a field this endpoint does not take.
2000Field [{0}] cannot be empty.storeMid, poiId, amount or expectedCurrency is missing or blank.
2045Merchant cannot access store or store does not exist. Value: [{0}]No store with that MID that your key is authorized for.
2039Unable to process due to merchant status - Inactive. Please contact support.The store's merchant is not active.
2046Tap 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.
2047Tap to Pay device is not active. Value: [{0}]No active device with that poiId in the store — unknown, never completed a session, or disabled.
2048Field [{0}] does not match the store's settlement currency. Value: [{1}]expectedCurrency does not match the store's settlement currency.
2001Field [{0}] is not a valid number. Value: [{1}].amount is not a whole number of minor units.
2002Field [{0}] cannot be negative. Value: [{1}].amount is negative.
2026Amount 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.
2022Amount 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.