Need a custom solution?
Request DemoThe 'Transaction Type' in the MPI request informs Paydee’s MPI Server on what the request is.
The subsequent sections describe the different Transaction Type supported.
Quick reference for all supported transaction types.
| Transaction Type | MPI_TRANS_TYPE | Purpose | Triggered By | Typical Use Case |
|---|---|---|---|---|
| Sales | SALES | Initiate a payment and render checkout page | Cardholder browser | One-time checkout (FPX, e-Wallets, Cards) |
| Void | VSALES | Cancel an unsettled SALES transaction | Merchant server | Order cancelled before settlement |
| Refund | REFUND | Refund a settled transaction (partial or full) | Merchant server | Returns, failed fulfilment |
| Inquiry | INQ | Retrieve current transaction status | Merchant server | Timeout recovery, browser closed |
| Pre-Recurring | PRERECURR | Validate card and initiate recurring setup (no settlement) | Cardholder browser | Subscription card validation |
| Init-Recurring | INITRECURR | Initialise recurring payment with settlement | Cardholder browser | Start subscription billing |
| Recurring | RECURR | Charge card automatically at intervals | Merchant server | Trigger a subscription billing event |
| Init-Installment | INITINSTL | Initialise installment payment | Cardholder browser | Fixed installment plans |
| Installment | INSTL | Charge installment amount | Merchant server | Scheduled installment billing |
| Terminate | TERMINATE | End recurring or installment programme | Merchant server | Cancel subscription or plan |
| Pre-Authorization | PREAUTH | Reserve amount without settlement | Cardholder browser | Hotels, tours, variable pricing |
| Sales Complete | SALESCOMPL | Finalise PREAUTH with actual amount | Merchant server | Complete variable amount charges |
Triggered from Cardholder Browser
Use this transaction type to initiate a payment and render the checkout page.
E.g
i. Key Exchange
ii. Request
[MPI Server will render the Payment Page.]
You might have additional approved payment methods, too. If you want more payment methods, speak with our sales.
If you are building your own payment page that fits your brand visual. You should render your payment page & collect payment detail before performing the following sequence.
i. Key Exchange
ii. Request
Note: Make sure you sent the payment method accordingly
For Card payment, the MPI server would authenticate the cardholder. During authentication:
i. Checks the 3DS version the card is enrolled in
ii. Initiate challenge/frictionless flow
Triggered from Merchant Server
Void a SALES transaction. Use Refund for transaction that has been settled.
Triggered from Merchant Server
To refund for transaction that has been settled. You may perform partial refund.
| Payment Channel | Void/Refund/Both | Cut-off time for void request | Processing Method | Credit to buyer within |
|---|---|---|---|---|
| Credit/Debit card | Both | 11:30pm GMT+8 | ||
| Boost | Both | 11:59pm GMT+8 | Auto | 1-business day |
| TnG e-Wallet | Both | 11:59pm GMT+8 | Auto | 1-business day |
| Grab Pay | Both | 11:59pm GMT+8 | Auto | 1-business day |
| Maybank QR Push | Refund | Manual | 7-business day | |
| Alipay | Both | 11:59pm GMT+8 | Auto | 1-business day |
Triggered from Merchant Server
This message checks the status of a transaction. Merchants are highly recommended to implement INQ before re-attempting a new SALES when the following occurs:
i. No response (time out)
ii. Cardholder closes browser
The transaction status will be returned in MPI_ERROR_CODE field
| ERROR CODE | CODE DEFINITION |
|---|---|
|
000 |
Transaction Successful |
|
001 |
Transaction Failed |
|
002 |
Transaction Was Cancelled |
|
003 |
Transaction Has Expired (Time Out) |
|
004 |
Transaction In Progress |
Triggered from Cardholder Browser
These 2 transaction types are part of Paydee’s Split Payment API. They are used to initialise Recurring (subscription) Payment. When the MPI Service receives this request, it will authenticate the cardholder. During the authentication:
i. MPI checks the 3DS version the card is enrolled in
ii. MPI initiates challenge/frictionless flow
| Message Type | Settlement Schedule |
|---|---|
|
PRERECURR |
No |
|
INITRECURR |
Yes (End of the day - 11 p.m.) |
The cardholder will receive notification from the Issuing Bank that RM1.00 (or another amount set by the merchant) has been charged on his/her card.
The RM1.00 will be returned to the cardholder if the message type is PRERECURR because the transaction will not be settled.
Important control parameters for PRERECURR/INITRECURR.
| CONTROL | USES |
|---|---|
|
Frequency |
Controls interval between payments (in days) |
|
Expiry |
Controls when the split payment arrangement shall end |
|
Count |
Controls the maximum number of payments |
|
Maximum Amount |
Controls the maximum payment amount |
|
Total Amount |
Controls the accumulated payment amount |
|
Terminate |
Terminates the split payment |
These messages should be triggered from the cardholder’s browser.
Triggered from Merchant Server
This recurring event attempts to charge the cardholder for the services they subscribe to at predefined intervals. This should be triggered automatically by the Merchant’s Application Server at the right interval without cardholder intervention. The cardholders might receive a notification from their Issuing Bank that their card has been charged.
Triggered from Cardholder Browser
This is part of Paydee’s Split Payment API. Use this transaction type to initiate Installment Payment. Installment Payment is prefered if the amount and number of payment (installment) is known.
When the MPI Service receives this request, it will authenticates the cardholder. During the authentication:
i. MPI checks the 3DS version the card is enrolled in
ii. MPI initiates challenge/frictionless flow
Important control parameters for INITINSTL
| USES | |
|---|---|
|
Frequency |
Controls interval between payments (in days) |
|
Expiry |
Controls when the split payment arrangement shall end |
|
Count |
Controls the maximum number of payments |
|
Maximum Amount |
Controls the maximum payment amount |
|
Total Amount |
Controls the accumulated payment amount |
|
Terminate |
Terminates the split payment |
Triggered from Merchant Server
This recurring event attempts to charge the cardholder for the agreed installment payment at predefined intervals. This should be triggered automatically by the Merchant’s Application Server at the right interval without cardholder intervention. The cardholders might receive a notification from their Issuing Bank that their card has been charged.
Triggered from Merchant Server
This terminates an installment payment programme prematurely.
Triggered from Cardholder Browser
This transaction type is triggered from the cardholder's browser. It is used when the final amount may not be known in advance. The amount pre-authorised will not be settled immediately. It is primarily used to authenticate the identity of the cardholder and check if the cardholder has sufficient credit to complete the payment later.
Triggered from Merchant Server
This message is used to finalise the PREAUTH transaction and charge the cardholder with the final amount. If the final amount exceeds the initial PREAUTH amount by 20%, the transaction will be rejected. Therefore, we recommend merchant to:
i. Track & monitor cardholder spending. Perform a SALESCOMP to complete the transaction and reinitiate another PREAUTH.
ii. PREAUTH with a pre-agreed amount and any additional incurred amount.
The merchant can always SALESCOMPL with an amount that is less than the PREAUTH amount.
Download the message file here or use the table below to guide you what to pack in the MPI Request message.
|
SALES
|
VSALES
(VOID) |
REFUND
|
INQ
(Inquiry) |
PRE/INIT RECURR
(Initialize Recurring) |
RECURR
(Recurring) |
INITINSTL
(Initialize Installment) |
INSTL
(Installment) |
TERMINATE
(Cancel Split Payment) |
PREAUTH
|
SALESCOMPL
(Sales Complete) |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| MPI_TRANS_TYPE | M | M | M | M | M | M | M | M | M | M | M |
| MPI_MERC_ID | M | M | M | M | M | M | M | M | M | M | M |
| MPI_PAN | C | C | C | C | |||||||
| MPI_PAN_EXP | C | C | C | C | |||||||
| MPI_CVV2 | C | C | C | C | |||||||
| MPI_CARD_HOLDER_NAME | M | M | M | M | |||||||
| MPI_PURCH_AMT | M | M | M | M | M | M | M | M | M | M | M |
| MPI_PURCH_CURR | M | M | M | M | M | M | M | M | M | M | M |
| MPI_TRXN_ID | M | M | M | M | M | M | M | M | M | M | M |
| MPI_ORI_TRXN_ID | M | M | M | M | M | M | M | ||||
| MPI_PURCH_DATE | M | M | M | M | M | M | M | M | M | M | M |
| MPI_ADDR_MATCH | O | O | O | O | O | O | O | O | O | O | O |
| MPI_BILL_ADDR_CITY | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_STATE | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_CNTRY | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_POSTCODE | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_LINE1 | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_LINE2 | C | C | C | C | C | C | C | C | C | C | C |
| MPI_BILL_ADDR_LINE3 | C | C | C | C | C | C | C | C | C | C | C |
| MPI_SHIP_ADDR_CITY | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_STATE | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_CNTRY | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_POSTCODE | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_LINE1 | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_LINE2 | O | O | O | O | O | O | O | O | O | O | O |
| MPI_SHIP_ADDR_LINE3 | O | O | O | O | O | O | O | O | O | O | O |
| MPI_EMAIL | M | M | M | M | M | M | M | M | M | M | M |
| MPI_HOME_PHONE | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_HOME_PHONE_CC | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_WORK_PHONE | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_WORK_PHONE_CC | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_MOBILE_PHONE | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_MOBILE_PHONE_CC | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 | C1 |
| MPI_RESPONSE_TYPE | O | O | O | O | O | O | O | O | O | O | O |
| MPI_RECURRING_FREQUENCY | M | M | |||||||||
| MPI_RECURR_EXPIRY | M | M | |||||||||
| MPI_RECURR_MAX_CNT | M | M | |||||||||
| MPI_RECURR_MAX_AMT | M | M | |||||||||
| MPI_RECURR_MAX_TOTAL | M | M | |||||||||
| MPI_MAC | M | M | M | M | M | M | M | M | M | M | M |
Effective 12 February 2024, Visa requires merchants to provide these data fields to authenticate the cardholders.
Rule #1. Merchants must capture and send the billing address, except in countries where the billing address field does not exist:
Rule #2. Merchants must capture and send:
Rule #3. At least contact number (work, home or mobile) should be provided: