DocumentationRecipesAPI ReferenceChangelog
Documentation

Inquiry

inquiry API allows merchant to inquire transaction and retrieve transaction details

Inquiry API provides an endpoint for merchant to inquire on transaction details. This endpoint can be used to get details such as transaction status, type, approval code and more.

After making a successful transaction call to Transaction API, transaction ID will be returned. Merchant will be required to use this transaction ID for inquiry or subsequent transaction actions.

You can integrate in two UI environments:

  1. Traditional Activity / Fragment UI
  2. Modern Jetpack Compose UI

Inquiry Request

Inquiry Request do not take any body and uses GET request. Merchant have to pass transaction ID as path parameter to make an inquiry request

Option 1 : Payment in Activity or Fragment

class InquiryActivity : AppCompatActivity() {

    private val enquiryLauncher =
        registerForActivityResult(msaPosApi.enquiryTranStatusContract()) { result ->
            when (result) {
                is PosResponse.Success -> {
                    val txn = result.data
                    // handle success
                }
                is PosResponse.Failed -> {
                    // handle failed
                }
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_inquiry)

        // Example call
        triggerEnquiry("ORIGINAL_TRANSACTION_ID")
    }

    private fun triggerEnquiry(originalTranId: String) {
        val enquiryRequest = PosRequest.EnquiryTranStatus(
            orgTranId = originalTranId
        )
        enquiryLauncher.launch(enquiryRequest)
    }
}

Option 2 : Payment in Jetpack Compose

@Composable
fun InquiryScreen(msaPosApi: MsaPosApi, originalTranId: String) {
    val context = LocalContext.current

    val enquiryLauncher = rememberLauncherForActivityResult(msaPosApi.enquiryTranStatusContract()) { result ->
        when (result) {
            is PosResponse.Success -> {
                val txn = result.data
								// handle success
            }
            is PosResponse.Failed -> {
                // handle failed
            }
        }
    }

    Button(onClick = {
        val enquiryRequest = PosRequest.EnquiryTranStatus(
            orgTranId = originalTranId
        )
        enquiryLauncher.launch(enquiryRequest)
    }) {
        Text("Check Transaction Status")
    }
}

Inquiry Response

{
 "rspCode" : "0",
 "rspMsg": "Success",
 "data" : {
  "tranId": "M9279873298",
  "trace": "M9279873298",
  "rrn": "897323",
  "tranType": "SALE",
  "tranStatus": "Approved",
  "approvalCode": "979384",
  "paymentMethod": "Visa",
  "cardData" : {
    "aid": "",
    "appName": "",
    "tc": "",
    "tsi": "",
    "tvr": ""
  },
  "entryMode" : "NFC",
  "maskedAccount": "**** **** **** 1234",
  "cvmPerformed": "NO_CVM",
  "acqMid": "MID98392",
  "acqTid": "0001",
  "posMessageId": "{merchant unique reference no}",
  "mchAddress": "",
  "mchName": "2C2P Pte Ltd",
  "totalAmount": 60.00,
  "createByName": "",
  "createdAt": "1744687184773",
  "updatedAt": "1744687184773"
 }
}

Response: PosResponse<T>

All responses from the POS Lib return as a sealed class:

sealed class PosResponse<T>(val rspCode: String, val rspMsg: String) : Serializable

Sub Types

TypeDescription
Success<Unit>Response: Completed successfully
Failed<Unit>Response: failed. Use rspCode, rspMsg for debugging

Successful Transaction Response

data class TransactionResponse(
    val tranId: String,
    val tranType: String,           // SALE, VOID, etc.
    val tranStatus: String,         // Approved, Declined, etc.
    val rrn: String,                // Reference number
    val approvalCode: String,
    val paymentMethod: String,      // Visa, MasterCard, etc.
    val maskedAccount: String,
    val totalAmount: BigDecimal,
    val posMessageId: String,
    val acqMid: String,
    val acqTid: String,
    val entryMode: String,
    val trace: String,
    val cardData: CardData,
    val cvmPerformed: String,
    val mchName: String,
    val mchAddress: String,
    val createdAt: String,
    val updatedAt: String
)
Status Reference
FieldDescription
tranTypeSALE / VOID / REFUND / AUTH
tranStatusApproved / Declined / Processing / Voided / Reversed
rrnHost-generated reference number (ARN)
tranIdUnique ID from backend
posMessageIdYour reference ID for tracking
approvalCodeApproval code from issuer
maskedAccountMasked card number

Card Data Object

data class CardData(
  val aid: String,
  val appName: String,
  val tc: String,
  val tsi: String,
  val tvr: String,
)