Terminal SDK Models

classes reference

Purchase Response


@Serializable
data class PurchaseResponse(
    
    @SerialName("status") 
    val status: String? = null,
    
    @SerialName("details") 
    val details: IntentDetails,
    
    @fun("getLastReceipt") 
    val receipt: Receipt,
    //return the receipt for last transaction related to the intent ID 
    
    @fun("getLastTransaction") 
    val transaction: TransactionResponse,
    //return the last transaction related to the intent ID 
    
)

Transaction Response


@Serializable
data class TransactionResponse(
    
    @SerialName("id") 
    val id: String,
    
    @SerialName("status") 
    val status: Status? = null,
    
    @SerialName("amount") 
    val amount: String? = null,
    
    @SerialName("currency") 
    val currency: Currency? = null,
    
    @SerialName("createdAt") 
    val createdAt: String? = null,
    
    @SerialName("completedAt") 
    val completedAt: String? = null,
    
    @SerialName("canceledAt") 
    val canceledAt: String? = null,
    
    @SerialName("cancelReason") 
    val cancelReason: String? = null,
    
    @SerialName("referenceId") 
    val referenceId: String? = null,
    
    @SerialName("orderId") 
    val orderId: String? = null,
    
    @SerialName("pinRequired") 
    val pinRequired: Boolean? = null,
    
    @SerialName("card") 
    val card: Card,
    
    @SerialName("events") 
    val events: List<Event>,
    
    @SerialName("amountOther") 
    val amountOther: String? = null,
    
    @SerialName("performance") 
    val performance: List<Performance> = emptyList()
)

@Serializable
data class Card(
    
    @SerialName("pan") 
    val pan: String? = null,
    
    @SerialName("exp") 
    val exp: String? = null
)

@Serializable
data class Event(
    
    @SerialName("rrn") 
    val rrn: String,
    
    @SerialName("stan") 
    val stan: String? = null,
    
    @SerialName("type") 
    val type: String? = null,
    
    @SerialName("status") 
    val status: Status,
    
    @SerialName("receipt") 
    val receipt: Receipt
)

@Serializable
data class Receipt(
    
    @SerialName("type") 
    val type: String,
    
    @SerialName("id") 
    val id: String,
    
    @SerialName("data") 
    val data: String
)

//getPOSLineReceipt
@Serializable
data class ReceiptData(
    
    @SerialName("actionCode") 
    val actionCode: String,
    
    @SerialName("amount") 
    val amount: String,
    
    @SerialName("amountAuthorized") 
    val amountAuthorized: LabelField<String>,
    
    @SerialName("authCode") 
    val authCode: String,
    
    @SerialName("card") 
    val card: POSLineCardInfo,
    
    @SerialName("currency") 
    val currency: Currency,
    
    @SerialName("emvData") 
    val emvData: String? = null,
    
    @SerialName("endAt") 
    val endAt: String,
    
    @SerialName("merchant") 
    val merchant: POSLineMerchantInfo,
    
    @SerialName("message") 
    val message: String? = null,
    
    @SerialName("meta") 
    val meta: List<POSLineMetaData>,
    
    @SerialName("qrCode") 
    val qrCode: String? = null,
    
    @SerialName("receiptType") 
    val receiptType: String,
    
    @SerialName("rrn") 
    val rrn: String,
    
    @SerialName("stan") 
    val stan: String,
    
    @SerialName("startAt") 
    val startAt: String,
    
    @SerialName("status") 
    val status: String,
    
    @SerialName("supportedLanguages") 
    val supportedLanguages: List<String>,
    
    @SerialName("surchargeAmount") 
    val surchargeAmount: String? = null,
    
    @SerialName("taxPercentage") 
    val taxPercentage: String? = null,
    
    @SerialName("tid") 
    val tid: String,
    
    @SerialName("totalFees") 
    val totalFees: String? = null,
    
    @SerialName("transactionUuid") 
    val transactionUuid: String,
    
    @SerialName("version") 
    val version: String,
    
)

@Serializable
enum class Status {
    @SerialName("APPROVED") APPROVED,
    @SerialName("DECLINED") DECLINED
}

@Serializable
data class Terminal(
    
    @SerialName("terminalId") 
    val terminalId: String,
    
    @SerialName("bankId") 
    val bankId: String,
    
    @SerialName("merchantId") 
    val merchantId: String,
    
    @SerialName("vendorId") 
    val vendorId: String,
    
    @SerialName("merchantCategoryCode") 
    val merchantCategoryCode: String
)

@Serializable
data class POSLineCardInfo(
    
    @SerialName("brandCode") 
    val brandCode: String,
    
    @SerialName("exp") 
    val exp: String,
    
    @SerialName("pan") 
    val pan: String,
    
    @SerialName("panSuffix") 
    val panSuffix: String? = null,
)

@Serializable
data class POSLineMerchantInfo(
    
    @SerialName("address") 
    val address: POSLineLocalizedText,
    
    @SerialName("bank") 
    val bank: POSLineBankInfo,
    
    @SerialName("id") 
    val id: String,
    
    @SerialName("mcc") 
    val mcc: String? = null,
    
    @SerialName("name") 
    val name: POSLineLocalizedText,
    
    @SerialName("phone") 
    val phone: String? = null,
)

@Serializable
data class POSLineBankInfo(
    
    @SerialName("id") 
    val id: String,
    
    @SerialName("name") 
    val name: POSLineLocalizedText,
)

@Serializable
data class POSLineLocalizedText(
    
    @SerialName("arabic") 
    val arabic: String? = null,
    
    @SerialName("english") 
    val english: String? = null,
)

@Serializable
data class POSLineMetaData(
    
    @SerialName("key") 
    val key: String,
    
    @SerialName("value") 
    val value: String,
)


Receipt Data Turkey

@Parcelize
@Serializable
data class ReceiptDataTurkey(

    @SerialName("id")
    val id: String? = null,

    @SerialName("pan")
    val pan: String? = null,

    @SerialName("tid")
    val tid: String? = null,

    @SerialName("type")
    val type: String? = null,

    @SerialName("date")
    val date: String? = null,

    @SerialName("time")
    val time: String? = null,

    @SerialName("cardType")
    val cardType: String? = null,

    @SerialName("currency")
    val currency: Currency? = null,

    @SerialName("merchant")
    val merchant: Merchant? = null,

    @SerialName("pinUsed")
    val pinUsed: LocalizedText? = null,

    @SerialName("panSuffix")
    val panSuffix: String? = null,

    @SerialName("acquirerId")
    val acquirerId: String? = null,

    @SerialName("actionCode")
    val actionCode: String? = null,

    @SerialName("cardScheme")
    val cardScheme: String? = null,

    @SerialName("cardDomain")
    val cardDomain: String? = null,

    @SerialName("isApproved")
    val isApproved: Boolean? = null,

    @SerialName("batchNumber")
    val batchNumber: String? = null,

    @SerialName("acquirerName")
    val acquirerName: String? = null,

    @SerialName("approvalCode")
    val approvalCode: String? = null,

    @SerialName("serialNumber")
    val serialNumber: String? = null,

    @SerialName("bankReference")
    val bankReference: String? = null,

    @SerialName("deviceDetails")
    val deviceDetails: String? = null,

    @SerialName("statusMessage")
    val statusMessage: LocalizedText? = null,

    @SerialName("cardExpiration")
    val cardExpiration: String? = null,

    @SerialName("transactionCode")
    val transactionCode: String? = null,

    @SerialName("transactionType")
    val transactionType: TransactionType? = null,

    @SerialName("transactionUuid")
    val transactionUuid: String? = null,

    @SerialName("amountAuthorized")
    val amountAuthorized: AmountAuthorized? = null,

    @SerialName("transactionNumber")
    val transactionNumber: String? = null,

    @SerialName("actionCodeMessage")
    val actionCodeMessage: LocalizedText? = null,

    @SerialName("cardSchemeSponsor")
    val cardSchemeSponsor: String? = null,

    @SerialName("transactionDetails")
    val transactionDetails: LocalizedText? = null,

    @SerialName("applicationCryptogram")
    val applicationCryptogram: String? = null,

    @SerialName("applicationIdentifier")
    val applicationIdentifier: String? = null,

    @SerialName("paymentAccountReference")
    val paymentAccountReference: String? = null,

    @SerialName("systemTraceAuditNumber")
    val systemTraceAuditNumber: String? = null,

    @SerialName("retrievalReferenceNumber")
    val retrievalReferenceNumber: String? = null,

    @SerialName("cryptogramInformationData")
    val cryptogramInformationData: String? = null,

    @SerialName("posSoftwareVersionNumber")
    val posSoftwareVersionNumber: String? = null,

    @SerialName("qrCode")
    val qrCode: String? = null,

    @SerialName("transactionStateInformation")
    val transactionStateInformation: String? = null,

    @SerialName("cardholderVerificationResult")
    val cardholderVerificationResult: String? = null

    @SerialName("installmentsCount")
    val installmentsCount: Int? = null

    @SerialName("installmentAmount")
    val installmentAmount: String? = null,

    @SerialName("installmentCalculation")
    val installmentCalculation: String? = null

    @SerialName("replyMessage")
    val replyMessage: String? = null,
    
    @SerialName("replyMessageExplanation")
    val replyMessageExplanation: String? = null

)


@Serializable
data class TransactionType(

    @SerialName("id")
    val id: String,

    @SerialName("name")
    val name: LocalizedText
)

@Serializable
data class LocalizedText(

    @SerialName("english")
    val english: String,

    @SerialName("turkish")
    val turkish: String
)

@Serializable
data class Currency(

    @SerialName("arabic")
    val arabic: String? = null,

    @SerialName("english")
    val english: String? = null,

    @SerialName("turkish")
    val turkish: String? = null
)

@Serializable
data class Merchant(

    @SerialName("id")
    val id: String,

    @SerialName("name")
    val name: LanguageContent,

    @SerialName("address")
    val address: LanguageContent,

    @SerialName("categoryCode")
    val categoryCode: String
)

@Serializable
data class AmountAuthorized(

    @SerialName("label")
    val label: LocalizedText,

    @SerialName("value")
    val value: String
)

Intent Response Turkey


@Serializable
data class IntentResponseTurkey (
    val details: IntentDetailsTurkey,

    @SerialName("status")
    val status: String,


    @fun("getLastReceipt") 
    val receipt: Receipt,
    //return the receipt for last transaction related to the intent ID 
    
    @fun("getLastTransaction") 
    val transaction: TransactionResponse,
    //return the last transaction related to the intent ID 
)

@Serializable
data class IntentDetailsTurkey(
    @SerialName("intenet_id")
    val intentId: String,
    @SerialName("reference_id")
    val referenceId: String?,
    @SerialName("type")
    val type: String,
    @SerialName("status")
    val status: String?,
    @SerialName("amount")
    val amount: String?,
    @SerialName("pin_required")
    val pinRequired: Boolean = false,
    @SerialName("created_at")
    val createdAt: String?,
    @SerialName("completed_at")
    val completedAt: String?,
    @SerialName("group_receipts_url")
    val receiptsUrl: String?,
    @SerialName("transactions")
    val transactions: List<TransactionResponseTurkey>
)

Reverse Response


@Serializable
data class ReverseResponse(
    
    @SerialName("amount") 
    val amount: String? = null,
    
    @SerialName("completedAt") 
    val completedAt: String? = null,
    
    @SerialName("createdAt") 
    val createdAt: String? = null,
    
    @SerialName("intentId") 
    val intentId: String,
    
    @SerialName("pinRequired") 
    val pinRequired: Boolean,
    
    @SerialName("receiptsUrl") 
    val receiptsUrl: String? = null,
    
    @SerialName("referenceId") 
    val referenceId: String? = null,
    
    @SerialName("status") 
    val status: String? = null,
    
    @SerialName("type") 
    val type: String,
    
    @SerialName("transactions") 
    val transactions: List<TransactionResponse>,
    
)


Refund Response


@Serializable
data class RefundResponse(
    
    @SerialName("status") 
    val status: String? = null,
    
    @SerialName("details") 
    val details: IntentDetails,
    
    @fun("getLastReceipt") 
    val receipt: Receipt,
    //return the receipt for last transaction related to the intent ID 
    
    @fun("getLastTransaction") 
    val transaction: TransactionResponse,
    //return the last transaction related to the intent ID 
    
)


Intent Details


@Serializable
data class IntentDetails(
    @SerialName("intenet_id")
    val intentId: String,

    @SerialName("reference_id")
    val referenceId: String?,

    @SerialName("type")
    val type: String,

    @SerialName("status")
    val status: String?,

    @SerialName("amount")
    val amount: String?,

    @SerialName("pin_required")
    val pinRequired: Boolean = false,

    @SerialName("created_at")
    val createdAt: String?,

    @SerialName("completed_at")
    val completedAt: String?,

    @SerialName("group_receipts_url")
    val receiptsUrl: String?,
    
    @SerialName("transactions")
    val transactions: List<TransactionResponse>,

    @SerialName("canceled_at")
    val canceledAt: String? = null,

    @SerialName("emv_data")
    val emvData: String? = null,

    @SerialName("is_reconciled")
    val isReconciled: Boolean = false

)
{
    fun getLastTransaction(): TransactionResponse? {
        return transactions.lastOrNull()
    }
    fun getLastReceipt(): TransactionResponse.Event.Receipt? {
        return transactions.lastOrNull()?.events?.get(0)?.receipt
    }
}

Routing Profile


 @Serializable
data class RoutingProfile(

    @SerialName("serialNumber")
    val serialNumber: String,

    @SerialName("terminals")
    val terminals: List<RoutingProfileTerminal> = emptyList()

)


@Serializable
data class RoutingProfileTerminal(

    @SerialName("merchantData")
    val merchantData: RoutingProfileMerchantData? = null,

    @SerialName("terminalInfo")
    val terminalInfo: RoutingProfileTerminalInfo? = null

)

@Serializable
data class RoutingProfileMerchantData(

    @SerialName("businessName")
    val businessName: String? = null,

    @SerialName("taxOfficeName")
    val taxOfficeName: String? = null,

    @SerialName("businessAddress")
    val businessAddress: String? = null,

    @SerialName("businessProvince")
    val businessProvince: String? = null,

    @SerialName("businessTelephone")
    val businessTelephone: String? = null,

    @SerialName("acquirerBusinessNo")
    val acquirerBusinessNo: String? = null,

    @SerialName("taxIdentificationNo")
    val taxIdentificationNo: String? = null,

    @SerialName("merchantCategoryCode")
    val merchantCategoryCode: String? = null


)



@Serializable
data class RoutingProfileTerminalInfo(

    @SerialName("bankName")
    val bankName: String? = null,

    @SerialName("acquirerId")
    val acquirerId: String? = null,

    @SerialName("acquirerTerminalId")
    val acquirerTerminalId: String,

    @SerialName("virtualSerialNumber")
    val virtualSerialNumber: String? = null
    

)


Routing Response


 @Serializable
data class RoutingResponse(

    @SerialName("binInformation")
    val binInformation: RoutingBin? = null

)


@Serializable
data class RoutingBin(

    @SerialName("bin")
    val bin: String? = null,

    @SerialName("issuerId")
    val issuerId: String? = null,

    @SerialName("brand")
    val brand: String? = null,

    @SerialName("cardType")
    val cardType: String? = null

)


Routing Session


 @Serializable
data class RoutingSession(

    @SerialName("envelope")
    val envelope: ReaderEnvelope,

    @SerialName("intentId")
    val intentId: String,

    @SerialName("pinCaptured")
    val pinCaptured: Boolean,

    @SerialName("location")
    val location: Location? = null,

    @SerialName("createdAt")
    val createdAt: Instant

)


Installment Option


 @Serializable
data class InstallmentOption(

    @SerialName("installmentCount")
    val installmentCount: Int? = null,

    @SerialName("installmentPercentage")
    val installmentPercentage: Double? = null,

    @SerialName("paymentPlan")
    val paymentPlan: String? = null,

    @SerialName("totalCalculatedAmount")
    val totalCalculatedAmount: Double? = null

)


Intents List Response

@Serializable
data class IntentsListResponse(

    @SerialName("data")
    val data: List<Intent>,

    @SerialName("pagination")
    val pagination: Page
)

@Serializable
data class Intent(
    @SerialName("customer_reference_number")
    val customerReferenceNumber: String?,

    @SerialName("amount")
    val amount: String?,

    @SerialName("id")
    val id: String,

    @SerialName("original_intent_id")
    val originalIntentID: String? = null,

    @SerialName("status")
    val status: String?,

    @SerialName("type")
    val type: String,

    @SerialName("created_at")
    val createdAt: String?,

    @SerialName("completed_at")
    val completedAt: String?,

    @SerialName("cancelled_at")
    val cancelledAt: String?,
)


@Serializable
data class Page(
    @SerialName("current_page")
    val current_page: Int,
)


Card Scheme

Card Scheme

IDNetwork
MC

Mastercard - credit

    DM

    Maestro

      P1

      Mada

        VC

        Visa

          UP

          Union Pay

            DC

            Discover

              JC

              JCB

                AX

                American Express

                  GN

                  GCCNET

                    Transaction Type

                    IDType
                    00

                    PURCHASE

                      20

                      REFUND

                        Reconciliation Receipts Response

                        @Serializable 
                        data class ReconciliationReceiptsResponse(
                        
                        @SerialName("receipt")
                        val receipt: ReconciliationReceipt? = null,
                        
                        @SerialName("reconciliationId")
                        val reconciliationId: String? = null
                        
                        )
                        
                        
                        @Serializable
                        data class ReconciliationReceipt(
                        
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("standard")
                            val standard: String,
                        
                            @SerialName("operationType")
                            val operationType: String,
                        
                            @SerialName("data")
                            val data: ReconciliationReceiptData? = null,
                        
                            @SerialName("reconciliation")
                            val reconciliation: Reconciliation,
                        
                            @SerialName("createdAt")
                            val createdAt: String,
                        
                            @SerialName("updatedAt")
                            val updatedAt: String
                        
                        )
                        
                        @Serializable
                        data class ReconciliationReceiptData(
                        
                            @SerialName("date")
                            val date: String,
                        
                            @SerialName("hour")
                            val hour: String,
                        
                            @SerialName("bankName")
                            val bankName: String,
                        
                            @SerialName("grandTotal")
                            val grandTotal: String,
                        
                            @SerialName("documentRef")
                            val documentRef: String,
                        
                            @SerialName("businessName")
                            val businessName: String,
                        
                            @SerialName("serialNumber")
                            val serialNumber: String,
                        
                            @SerialName("businessNumber")
                            val businessNumber: String,
                        
                            @SerialName("terminalNumber")
                            val terminalNumber: String,
                        
                            @SerialName("endOfDaySummary")
                            val endOfDaySummary: List<EndOfDaySummaryItem>,
                        
                            @SerialName("businessAddressAndTelephone")
                            val businessAddressAndTelephone: String
                        )
                        
                        
                        @Serializable
                        data class Reconciliation(
                        
                            @SerialName("id")
                            val id: String
                        )
                        
                        
                        @Serializable
                        data class EndOfDaySummaryItem(
                        
                            @SerialName("type")
                            val type: String? = null,
                        
                            @SerialName("count")
                            val count: String? = null,
                        
                            @SerialName("amount")
                            val amount: String? = null
                        )
                        
                        
                        

                        Reconcile List Response

                        @Serializable
                        data class ReconciliationListResponse(
                        
                            @SerialName("data")
                            val data: List<ReconciliationItem>,
                        
                            @SerialName("pagination")
                            val pagination: Pagination
                        )
                        
                        @Serializable
                        data class ReconciliationItem(
                        
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("date")
                            val date: String,
                        
                            @SerialName("time")
                            val time: String,
                        
                            @SerialName("startDate")
                            val startDate: String,
                        
                            @SerialName("startTime")
                            val startTime: String,
                        
                            @SerialName("isBalanced")
                            val isBalanced: LabelValue<Boolean>,
                        
                            @SerialName("total")
                            val total: String,
                        
                            @SerialName("currency")
                            val currency: Currency
                        )
                        
                        @Serializable
                        data class Pagination(
                        
                            @SerialName("total_pages")
                            val total_pages: Int? = null,
                        
                            @SerialName("current_page")
                            val current_page: Int,
                        
                            @SerialName("total_data")
                            val total_data: Int? = null
                        )
                        
                        

                        Reconciliation Response

                        @Serializable
                        data class ReconciliationResponse(
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("date")
                            val date: String,
                        
                            @SerialName("time")
                            val time: String,
                        
                            @SerialName("startDate")
                            val startDate: String,
                        
                            @SerialName("startTime")
                            val startTime: String,
                        
                            @SerialName("endDate")
                            val endDate: String,
                        
                            @SerialName("endTime")
                            val endTime: String,
                        
                            @SerialName("merchant")
                            val merchant: Merchant,
                        
                            @SerialName("cardAcceptorTerminalId")
                            val cardAcceptorTerminalId: String,
                        
                            @SerialName("posSoftwareVersionNumber")
                            val posSoftwareVersionNumber: String,
                        
                            @SerialName("cardSchemeSponsorId")
                            val cardSchemeSponsorId: String,
                        
                            @SerialName("isBalanced")
                            val isBalanced: LabelValue<Boolean>,
                        
                            @SerialName("schemes")
                            val schemes: List<Scheme>,
                        
                            @SerialName("details")
                            val details: Details,
                        
                            @SerialName("currency")
                            val currency: LanguageContent,
                        
                            @SerialName("systemTraceAuditNumber")
                            val systemTraceAuditNumber: String
                        )
                        
                        @Serializable
                        data class Details(
                            @SerialName("total")
                            val total: DetailItem,
                        
                            @SerialName("purchase")
                            val purchase: DetailItem,
                        
                            @SerialName("purchaseReversal")
                            val purchaseReversal: DetailItem,
                        
                            @SerialName("refund")
                            val refund: DetailItem,
                        
                            @SerialName("refundReversal")
                            val refundReversal: DetailItem
                        )
                        
                        @Serializable
                        data class DetailItem(
                            @SerialName("label")
                            val label: LanguageContent,
                        
                            @SerialName("total")
                            val total: String,
                        
                            @SerialName("count")
                            val count: Int
                        )
                        
                        @Serializable
                        data class LanguageContent(
                            @SerialName("arabic")
                            val arabic: String? = null,
                        
                            @SerialName("english")
                            val english: String? = null,
                        
                            @SerialName("turkish")
                            val turkish: String? = null
                        )
                        
                        
                        

                        Transactions Response

                        @Serializable
                        data class TransactionsResponse(
                            
                            @SerialName("data")
                            val data: List<Transaction>,
                        
                            @SerialName("pagination")
                            val pagination: Pagination
                            
                        ) {
                        
                            @Serializable
                            data class Transaction(
                                
                                @SerialName("uuid")
                                val uuid: String,
                        
                                @SerialName("scheme")
                                val scheme: String,
                        
                                @SerialName("customerReferenceNumber")
                                val customerReferenceNumber: String? = null,
                        
                                @SerialName("pan")
                                val pan: String? = null,
                        
                                @SerialName("amountAuthorized")
                                val amountAuthorized: String,
                        
                                @SerialName("transactionType")
                                val transactionType: String,
                        
                                @SerialName("currency")
                                val currency: Currency,
                        
                                @SerialName("isApproved")
                                val isApproved: Boolean,
                        
                                @SerialName("isReversed")
                                val isReversed: Boolean,
                        
                                @SerialName("isReconciled")
                                val isReconciled: Boolean,
                        
                                @SerialName("startDate")
                                val startDate: String,
                        
                                @SerialName("startTime")
                                val startTime: String,
                        
                                @SerialName("performance")
                                val performance: List<Performance>
                        
                            )
                        }
                        
                        
                        

                        Receipts Response

                        
                        @Serializable
                        data class ReceiptsResponse(
                        
                            @SerialName("receipts")
                            val receipts: List<Receipt>
                        
                        ) {
                        
                            @Serializable
                            data class Receipt(
                        
                                @SerialName("id") 
                                val id: String,
                        
                                @SerialName("operationType") 
                                val operationType: String,
                        
                                @SerialName("standard") 
                                val standard: String,
                        
                                @SerialName("data") 
                                val data: String,
                        
                                @SerialName("transactionUuid") 
                                val transactionUuid: String
                                
                            ) {
                        
                                @Serializable
                                data class ReceiptData(
                                    
                                    @SerialName("id") 
                                    val id: String,
                        
                                    @SerialName("merchant") 
                                    val merchant: Merchant,
                        
                                    @SerialName("type") 
                                    val type: String,
                        
                                    @SerialName("startDate") 
                                    val startDate: String,
                        
                                    @SerialName("startTime") 
                                    val startTime: String,
                        
                                    @SerialName("endDate") 
                                    val endDate: String,
                        
                                    @SerialName("endTime") 
                                    val endTime: String,
                        
                                    @SerialName("cardSchemeSponsor") 
                                    val cardSchemeSponsor: String,
                        
                                    @SerialName("terminalId") 
                                    val terminalId: String,
                        
                                    @SerialName("systemTraceAuditNumber") 
                                    val systemTraceAuditNumber: String,
                        
                                    @SerialName("posSoftwareVersion") 
                                    val posSoftwareVersion: String,
                        
                                    @SerialName("retrievalReferenceNumber") 
                                    val retrievalReferenceNumber: String,
                        
                                    @SerialName("cardScheme") 
                                    val cardScheme: CardScheme,
                        
                                    @SerialName("transactionType") 
                                    val transactionType: TransactionType,
                        
                                    @SerialName("pan") 
                                    val pan: String,
                        
                                    @SerialName("cardExpiration") 
                                    val cardExpiration: String,
                        
                                    @SerialName("amountAuthorized") 
                                    val amountAuthorized: LabelField<String>,
                        
                                    @SerialName("amountOther") 
                                    val amountOther: LabelField<String>,
                        
                                    @SerialName("currency") 
                                    val currency: Currency,
                        
                                    @SerialName("statusMessage") 
                                    val statusMessage: Currency,
                        
                                    @SerialName("isApproved") 
                                    val isApproved: Boolean,
                        
                                    @SerialName("isRefunded") 
                                    val isRefunded: Boolean,
                        
                                    @SerialName("isReversed") 
                                    val isReversed: Boolean,
                        
                                    @SerialName("approvalCode") 
                                    val approvalCode: ApprovalCode? = null,
                        
                                    @SerialName("verificationMethod") 
                                    val verificationMethod: Currency,
                        
                                    @SerialName("receiptLineOne") 
                                    val receiptLineOne: Currency,
                        
                                    @SerialName("receiptLineTwo") 
                                    val receiptLineTwo: Currency,
                        
                                    @SerialName("thanksMessage") 
                                    val thanksMessage: Currency,
                        
                                    @SerialName("saveReceiptMessage") 
                                    val saveReceiptMessage: Currency,
                        
                                    @SerialName("entryMode") 
                                    val entryMode: String,
                        
                                    @SerialName("actionCode") 
                                    val actionCode: String,
                        
                                    @SerialName("applicationIdentifier") 
                                    val applicationIdentifier: String,
                        
                                    @SerialName("terminalVerificationResult") 
                                    val terminalVerificationResult: String,
                        
                                    @SerialName("transactionStateInformation") 
                                    val transactionStateInformation: String,
                        
                                    @SerialName("cardholderVerificationResult") 
                                    val cardholderVerificationResult: String,
                        
                                    @SerialName("cryptogramInformationData") 
                                    val cryptogramInformationData: String,
                        
                                    @SerialName("applicationCryptogram") 
                                    val applicationCryptogram: String,
                        
                                    @SerialName("kernelId") 
                                    val kernelId: String,
                        
                                    @SerialName("paymentAccountReference") 
                                    val paymentAccountReference: String? = null,
                        
                                    @SerialName("panSuffix") 
                                    val panSuffix: String? = null,
                        
                                    @SerialName("qrCode") 
                                    val qrCode: String,
                        
                                    @SerialName("transactionUuid") 
                                    val transactionUuid: String
                        
                                )
                            }
                        }
                        

                        Transaction Response Turkey

                        @Serializable
                        data class TransactionResponseTurkey(
                            
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("performance")
                            val performance: List<PerformanceDto>? = null,
                        
                            @SerialName("cancelReason")
                            val cancelReason: String? = null,
                        
                            @SerialName("status")
                            val status: String? = null,
                        
                            @SerialName("currency")
                            val currency: Currency? = null,
                        
                            @SerialName("createdAt")
                            val createdAt: String? = null,
                        
                            @SerialName("completedAt")
                            val completedAt: String? = null,
                        
                            @SerialName("referenceId")
                            val referenceId: String? = null,
                        
                            @SerialName("orderId")
                            val orderId: String? = null,
                        
                            @SerialName("pinRequired")
                            val pinRequired: Boolean? = null,
                        
                            @SerialName("card")
                            val card: Map<String, JsonElement> = emptyMap(),
                        
                            @SerialName("events")
                            val events: List<Event>,
                        
                            @SerialName("amountOther")
                            val amountOther: String? = null
                        ) {
                            @Serializable
                            data class Event(
                                
                                @SerialName("receipt")
                                val receipt: Receipt,
                        
                                @SerialName("rrn")
                                val rrn: String,
                        
                                @SerialName("status")
                                val status: String? = null
                            ) {
                                @Serializable
                                data class Receipt(
                                    
                                    @SerialName("standard")
                                    val standard: String,
                        
                                    @SerialName("id")
                                    val id: String,
                        
                                    @SerialName("data")
                                    val data: String
                                )
                        
                                @Serializable
                                data class LocalizedText(
                                    
                                    @SerialName("english")
                                    val english: String,
                        
                                    @SerialName("turkish")
                                    val turkish: String
                                )
                        
                                @Serializable
                                data class Merchant(
                                    
                                    @SerialName("id")
                                    val id: String,
                        
                                    @SerialName("name")
                                    val name: String,
                        
                                    @SerialName("address")
                                    val address: String
                                )
                        
                                @Serializable
                                data class AmountAuthorized(
                                    
                                    @SerialName("label")
                                    val label: LocalizedText,
                        
                                    @SerialName("value")
                                    val value: String
                                )
                        
                                @Serializable
                                data class ReceiptDataTurkey(
                                    
                                    @SerialName("id")
                                    val id: String? = null,
                                    
                                    @SerialName("pan")
                                    val pan: String? = null,
                                    
                                    @SerialName("tid")
                                    val tid: String? = null,
                                    
                                    @SerialName("type")
                                    val type: String? = null,
                                    
                                    @SerialName("date")
                                    val date: String? = null,
                                    
                                    @SerialName("time")
                                    val time: String? = null,
                                    
                                    @SerialName("cardType")
                                    val cardType: String? = null,
                                    
                                    @SerialName("currency")
                                    val currency: Currency? = null,
                                    
                                    @SerialName("merchant")
                                    val merchant: Merchant? = null,
                                    
                                    @SerialName("pinUsed")
                                    val pinUsed: LocalizedText? = null,
                                    
                                    @SerialName("panSuffix")
                                    val panSuffix: String? = null,
                                    
                                    @SerialName("acquirerId")
                                    val acquirerId: String? = null,
                                    
                                    @SerialName("actionCode")
                                    val actionCode: String? = null,
                                    
                                    @SerialName("cardScheme")
                                    val cardScheme: String? = null,
                                    
                                    @SerialName("cardDomain")
                                    val cardDomain: String? = null,
                                    
                                    @SerialName("isApproved")
                                    val isApproved: Boolean? = null,
                                    
                                    @SerialName("batchNumber")
                                    val batchNumber: String? = null,
                                    
                                    @SerialName("acquirerName")
                                    val acquirerName: String? = null,
                                    
                                    @SerialName("approvalCode")
                                    val approvalCode: String? = null,
                                    
                                    @SerialName("serialNumber")
                                    val serialNumber: String? = null,
                                    
                                    @SerialName("bankReference")
                                    val bankReference: String? = null,
                                    
                                    @SerialName("deviceDetails")
                                    val deviceDetails: String? = null,
                                    
                                    @SerialName("statusMessage")
                                    val statusMessage: LocalizedText? = null,
                                    
                                    @SerialName("cardExpiration")
                                    val cardExpiration: String? = null,
                                    
                                    @SerialName("transactionCode")
                                    val transactionCode: String? = null,
                                    
                                    @SerialName("transactionType")
                                    val transactionType: TransactionType? = null,
                                    
                                    @SerialName("transactionUuid")
                                    val transactionUuid: String? = null,
                                    
                                    @SerialName("amountAuthorized")
                                    val amountAuthorized: AmountAuthorized? = null,
                                    
                                    @SerialName("transactionNumber")
                                    val transactionNumber: String? = null,
                                    
                                    @SerialName("actionCodeMessage")
                                    val actionCodeMessage: LocalizedText? = null,
                                    
                                    @SerialName("cardSchemeSponsor")
                                    val cardSchemeSponsor: String? = null,
                                    
                                    @SerialName("transactionDetails")
                                    val transactionDetails: LocalizedText? = null,
                                    
                                    @SerialName("applicationCryptogram")
                                    val applicationCryptogram: String? = null,
                                    
                                    @SerialName("applicationIdentifier")
                                    val applicationIdentifier: String? = null,
                                    
                                    @SerialName("paymentAccountReference")
                                    val paymentAccountReference: String? = null,
                                    
                                    @SerialName("systemTraceAuditNumber")
                                    val systemTraceAuditNumber: String? = null,
                                    
                                    @SerialName("retrievalReferenceNumber")
                                    val retrievalReferenceNumber: String? = null,
                                    
                                    @SerialName("cryptogramInformationData")
                                    val cryptogramInformationData: String? = null,
                                    
                                    @SerialName("posSoftwareVersionNumber")
                                    val posSoftwareVersionNumber: String? = null,
                                    
                                    @SerialName("qrCode")
                                    val qrCode: String? = null,
                                    
                                    @SerialName("transactionStateInformation")
                                    val transactionStateInformation: String? = null,
                                    
                                    @SerialName("cardholderVerificationResult")
                                    val cardholderVerificationResult: String? = null
                                )
                        
                                @Serializable
                                data class TransactionType(
                                    
                                    @SerialName("id")
                                    val id: String,
                        
                                    @SerialName("name")
                                    val name: LocalizedText
                                )
                            }
                        }
                        
                        

                        Terminal

                        @Serializable
                        data class Terminal(
                            @SerialName("networkParams")
                            val networkParams: NetworkParams,
                        
                            @SerialName("terminalSharedPreferences")
                            val terminalSharedPreferences: TerminalSharedPreferences,
                        
                            @SerialName("activity")
                            val activity: Activity,
                        
                            @SerialName("terminalUUID")
                            val terminalUUID: String,
                        
                            @SerialName("readerCoreUI")
                            val readerCoreUI: ReaderCoreUI,
                        
                            @SerialName("tid")
                            val tid: String,
                        
                            @SerialName("name")
                            val name: String? = null,
                        
                            @SerialName("paymentText")
                            val paymentText: PaymentText
                        )
                        
                        
                        

                        User

                        @Serializable
                        data class User(
                            @SerialName("name")
                            val name: String? = null,
                        
                            @SerialName("email")
                            val email: String? = null,
                        
                            @SerialName("mobile")
                            val mobile: String? = null,
                        
                            @SerialName("userUUID")
                            var userUUID: String? = null
                        ) 
                        

                        Authorize Response

                        
                        @Serializable
                        data class AuthorizeResponse(
                            
                            @SerialName("amount") 
                            val amount: String? = null,
                            
                            @SerialName("completedAt") 
                            val completedAt: String? = null,
                            
                            @SerialName("createdAt") 
                            val createdAt: String? = null,
                            
                            @SerialName("intentId") 
                            val intentId: String,
                            
                            @SerialName("pinRequired") 
                            val pinRequired: Boolean,
                            
                            @SerialName("receiptsUrl") 
                            val receiptsUrl: String? = null,
                            
                            @SerialName("referenceId") 
                            val referenceId: String? = null,
                            
                            @SerialName("status") 
                            val status: String? = null,
                            
                            @SerialName("type") 
                            val type: String,
                            
                            @SerialName("transactions") 
                            val transactions: List<AuthorizeReceipt>,
                            
                        )
                        
                        
                        

                        Void Authorization Response

                        
                        @Serializable
                        data class VoidAuthorizationResponse(
                            
                            @SerialName("status") 
                            val status: String? = null,
                            
                            @SerialName("details") 
                            val details: IntentDetails,
                            
                            @fun("getLastReceipt") 
                            val receipt: Receipt,
                            //return the receipt for last transaction related to the intent ID 
                            
                            @fun("getLastTransaction") 
                            val transaction: TransactionResponse,
                            //return the last transaction related to the intent ID 
                            
                        )
                        
                        

                        Authorize Receipt

                        @Serializable
                        data class AuthorizeReceipt(
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("amountOther")
                            val amountOther: String? = null,
                        
                            @SerialName("currency")
                            val currency: Currency,
                        
                            @SerialName("createdAt")
                            val createdAt: String? = null,
                        
                            @SerialName("completedAt")
                            val completedAt: String? = null,
                        
                            @SerialName("pinRequired")
                            val pinRequired: Boolean,
                        
                            @SerialName("performance")
                            val performance: List<PerformanceDto>,
                        
                            @SerialName("card")
                            val card: CardDto? = null,
                        
                            @SerialName("events")
                            val events: List<AuthEventDto>
                        )
                        

                        Capture Response

                        @Serializable
                        data class CaptureResponse(
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("amountOther")
                            val amountOther: String? = null,
                        
                            @SerialName("currency")
                            val currency: Currency,
                        
                            @SerialName("createdAt")
                            val createdAt: String? = null,
                        
                            @SerialName("completedAt")
                            val completedAt: String? = null,
                        
                            @SerialName("pinRequired")
                            val pinRequired: Boolean,
                        
                            @SerialName("performance")
                            val performance: List<PerformanceDto>,
                        
                            @SerialName("card")
                            val card: CardDto? = null,
                        
                            @SerialName("events")
                            val events: List<CaptureEventDto>
                        )
                        

                        Increment Response

                        @Serializable
                        data class IncrementResponse(
                            @SerialName("id")
                            val id: String,
                        
                            @SerialName("amountOther")
                            val amountOther: String? = null,
                        
                            @SerialName("currency")
                            val currency: Currency,
                        
                            @SerialName("createdAt")
                            val createdAt: String? = null,
                        
                            @SerialName("completedAt")
                            val completedAt: String? = null,
                        
                            @SerialName("pinRequired")
                            val pinRequired: Boolean,
                        
                            @SerialName("performance")
                            val performance: List<PerformanceDto>,
                        
                            @SerialName("card")
                            val card: CardDto? = null,
                        
                            @SerialName("events")
                            val events: List<IncrementEventDto>
                        )
                        

                        Otp Response

                        @Serializable
                        data class OtpResponse(
                            @SerialName("message")
                            val message: String? = null
                        )
                        

                        Permission Status

                        @Serializable
                        data class PermissionStatus(
                            @SerialName("permission")
                            val permission: String,
                        
                            @SerialName("isGranted")
                            val isGranted: Boolean
                        )
                        

                        Terminal Connection

                        @Serializable
                        @Parcelize
                        data class TerminalConnection(
                            @SerialName("terminalConnectionData")
                            val terminalConnectionData: TerminalConnectionData,
                        
                            @SerialName("serverSwitcher")
                            val serverSwitcher: ServerSwitcher<PosServiceApi>
                        ) : Parcelable {
                        
                            @Serializable
                            @Parcelize
                            data class TerminalConnectionData(
                                @SerialName("name")
                                val name: String? = null,
                        
                                @SerialName("tid")
                                val tid: String,
                        
                                @SerialName("uuid")
                                val uuid: String = "",
                        
                                @SerialName("busy")
                                val busy: Boolean = false,
                        
                                @SerialName("mode")
                                val mode: String,
                        
                                @SerialName("isLocked")
                                val isLocked: Boolean = false,
                        
                                @SerialName("hasProfile")
                                val hasProfile: Boolean = false,
                        
                                @SerialName("userUUID")
                                val userUUID: String
                            ) : Parcelable
                        }
                        
                        

                        QR Code Status

                        
                        
                        @Serializable
                        data class QrStatusResponse(
                            @SerialName("id")
                            val id: String? = null,
                        
                            /**
                             * Observed values include: "approved" / "declined" and sometimes lifecycle values.
                             * Use [status] for the normalized flow state.
                             */
                            @SerialName("status")
                            val statusRaw: String,
                        
                            @SerialName("message")
                            val message: String? = null,
                        
                            @SerialName("auth_code")
                            val authCode: String? = null,
                        
                            @SerialName("action_code")
                            val actionCode: String? = null,
                        
                            @SerialName("rrn")
                            val rrn: String? = null,
                        
                            @SerialName("stan")
                            val stan: String? = null,
                        
                            @SerialName("amount")
                            val amount: String? = null,
                        
                            @SerialName("receipt")
                            val receipt: Receipt? = null
                        ) {
                            @Transient
                            val status: Status? = Status.from(statusRaw)
                        
                            enum class Status {
                                ENQUIRING,
                                PROCESSING,
                                COMPLETED,
                                FAILED,
                                EXPIRED;
                        
                                companion object {
                                    fun from(raw: String?): Status? {
                                        val normalized = raw?.trim()?.uppercase() ?: return null
                                        values().firstOrNull { it.name == normalized }?.let { return it }
                                        return when (normalized) {
                                            "APPROVED" -> COMPLETED
                                            "DECLINED" -> FAILED
                                            else -> null
                                        }
                                    }
                                }
                            }
                        
                            @Serializable
                            data class Receipt(
                                @SerialName("id")
                                val id: String? = null,
                        
                                @SerialName("standard")
                                val standard: String,
                        
                                @SerialName("data")
                                val data: String
                            )
                        }
                        
                        
                        
                        
                        

                        Generated QR Code

                        
                        @kotlinx.serialization.Serializable
                        data class GeneratedQRCode(
                            @kotlinx.serialization.SerialName("qrCode")
                            val qrCode: String,
                            @kotlinx.serialization.SerialName("transactionId")
                            val transactionId: String,
                            @kotlinx.serialization.SerialName("amount")
                            val amount: String
                        )
                        
                        

                        Send Transaction Failure

                        Serializable
                        sealed class SendTransactionFailure {
                            
                            @Serializable
                            data class TransactionFailure(
                                @SerialName("message")
                                val message: String
                            ) : SendTransactionFailure()
                        }
                        

                        Refund Transaction Failure

                        @Serializable
                        sealed class RefundTransactionFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String
                            ) : RefundTransactionFailure()
                        }
                        

                        Authorize Failure

                        @Serializable
                        sealed class AuthorizeFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String
                            ) : AuthorizeFailure()
                        }
                        

                        Get Intent Failure

                        @Serializable
                        sealed class GetIntentFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String
                            ) : GetIntentFailure()
                        }
                        

                        Get Routing Profile Failure

                        
                         @Serializable
                        data class GetRoutingProfileFailure(
                        
                            @SerialName("message")
                            val message: String
                        )
                        
                        
                        

                        Routing Lookup Failure

                        
                         @Serializable
                        data class RoutingLookupFailure(
                        
                            @SerialName("message")
                            val message: String
                        )
                        
                        
                        

                        Get Intents List Failure

                        @Serializable
                        sealed class GetIntentsListFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String
                            ) : GetIntentsListFailure()
                        }
                        

                        Increment Authorization Failure

                        @Serializable
                        sealed class IncrementAuthorizationFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String? = null
                            ) : IncrementAuthorizationFailure()
                        }
                        

                        Get Terminals Failure

                        @Serializable
                        sealed class GetTerminalsFailure {
                        
                            @Serializable
                            data class FetchingFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : GetTerminalsFailure()
                        }
                        

                        OTP Email Failure

                        @Serializable
                        sealed class OTPEmailFailure {
                        
                            @Serializable
                            data class OTPEmailFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : OTPEmailFailure()
                        }
                        

                        OTP Mobile Failure

                        @Serializable
                        sealed class OTPMobileFailure {
                        
                            @Serializable
                            data class OTPMobileFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : OTPMobileFailure()
                        }
                        

                        Verify Email Failure

                        @Serializable
                        sealed class VerifyEmailFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : VerifyEmailFailure()
                        }
                        

                        Verify Mobile Failure

                        @Serializable
                        sealed class VerifyMobileFailure {
                        
                            @Serializable
                            data class VerificationFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : VerifyMobileFailure()
                        }
                        

                        JWT Login Failure

                        @Serializable
                        sealed class JWTLoginFailure {
                        
                            @Serializable
                            data class JWTLoginFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : JWTLoginFailure()
                        }
                        

                        Void Failure

                        @Serializable
                        sealed class VoidFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String? = null
                            ) : VoidFailure()
                        }
                        

                        Reverse Transaction Failure

                        @Serializable
                        sealed class ReverseTransactionFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String
                            ) : ReverseTransactionFailure()
                        }
                        

                        Reconcile Failure

                        @Serializable
                        sealed class ReconcileFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String
                            ) : ReconcileFailure()
                        }
                        

                        Get Reconciliation List Failure

                        @Serializable
                        sealed class GetReconciliationListFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : GetReconciliationListFailure()
                        }
                        

                        Get Reconciliation Failure

                        @Serializable
                        sealed class GetReconciliationFailure {
                        
                            @Serializable
                            data class GeneralFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : GetReconciliationFailure()
                        }
                        

                        Connect Terminal Failure

                        @Serializable
                        sealed class ConnectTerminalFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String? = null
                            ) : ConnectTerminalFailure()
                        }
                        

                        Capture Authorization Failure

                        @Serializable
                        sealed class CaptureAuthorizationFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String? = null
                            ) : CaptureAuthorizationFailure()
                        }
                        

                        Tip Transaction Failure

                        @Serializable
                        sealed class TipTransactionFailure {
                        
                            @Serializable
                            data class Failure(
                                @SerialName("message")
                                val message: String? = null
                            ) : TipTransactionFailure()
                        }
                        

                        QR Code Refund Failure

                        @Serializable
                        sealed class QrRefundFailure {
                        
                            @Serializable
                            data class QrRefundFailure(
                                @SerialName("message")
                                val message: String? = null
                            ) : QrRefundFailure()
                        }