Purchase

Last updated: 2026-03-13

INTENT
se.westpay.softpos.PURCHASE

Initiate a contactless card payment through WestPay SoftPOS

Request Body

amountstringrequired

Payment amount using a comma as the decimal separator, e.g. 100,50 for 100.50. Must be greater than zero.

currencyIdintrequired

ISO 4217 numeric currency code, e.g. 752 for SEK, 978 for EUR.

gratuityAmountstringoptional

Tip/gratuity amount in the same comma-decimal format as amount. Only used when gratuity is enabled.

gratuity_enabledbooleanoptional

When true, enables the tip/gratuity prompt on the SoftPOS terminal.

HTTP Status Code Summary

CodeDescription
RESULT_OKThe operation completed. Check isSuccess in the response extras to determine if the transaction was approved.
RESULT_CANCELEDThe operation was cancelled or could not complete. Check the error / Error extra for the reason.
Request
kotlin
1private val resultLauncher = registerForActivityResult(
2    ActivityResultContracts.StartActivityForResult()
3) { result ->
4    if (result.resultCode == Activity.RESULT_OK) {
5        val data = result.data
6        val success = data?.getBooleanExtra("isSuccess", false) ?: false
7        if (success) {
8            val transactionId = data?.getStringExtra("transactionId")
9            val amount = data?.getStringExtra("amount")
10            val cardType = data?.getStringExtra("cardType")
11            // Handle successful payment
12        } else {
13            val error = data?.getStringExtra("error")
14            val denialReason = data?.getStringExtra("denialReason")
15            // Handle failure
16        }
17    } else {
18        val error = result.data?.getStringExtra("error")
19            ?: result.data?.getStringExtra("Error")
20        // Handle cancellation
21    }
22}
23
24fun initiatePurchase(amount: String, currencyId: Int) {
25    val intent = Intent("se.westpay.softpos.PURCHASE").apply {
26        putExtra("amount", amount)           // e.g. "100,50"
27        putExtra("currencyId", currencyId)   // e.g. 752 for SEK
28        addCategory(Intent.CATEGORY_DEFAULT)
29    }
30    if (intent.resolveActivity(packageManager) != null) {
31        resultLauncher.launch(intent)
32    } else {
33        showError("WestPay SoftPOS is not installed")
34    }
35}
36
37// With tip/gratuity
38fun initiatePurchaseWithTip(amount: String, currencyId: Int, tipAmount: String? = null) {
39    val intent = Intent("se.westpay.softpos.PURCHASE").apply {
40        putExtra("amount", amount)
41        putExtra("currencyId", currencyId)
42        tipAmount?.let { putExtra("gratuityAmount", it) }
43        putExtra("gratuity_enabled", true)
44        addCategory(Intent.CATEGORY_DEFAULT)
45    }
46    resultLauncher.launch(intent)
47}
Response
Response
1{
2  "isSuccess": true,
3  "amount": "100,50",
4  "currencyId": "752",
5  "transactionId": "TX123456",
6  "terminalId": "T001",
7  "acqRefNumber": 123456789,
8  "cardType": "Visa",
9  "maskedCardPan": "****1234",
10  "type": "Purchase",
11  "status": "Approved",
12  "time": "2025-01-06T10:30:00",
13  "denialReason": "None",
14  "error": "None",
15  "receiptDetails": "{...}"
16}