Skip to main content

Modern Retail

SNAP API

Modern Retail Integration

Modern Retail is a cash payment method via partner minimarket outlets (Indomaret, Alfamart, and Fastpay) that is fully integrated through the national SNAP BI standard. Support the convenience of cash payments in real-time via callbacks.

Modern Retail Transaction Types

Winpay's Modern Retail service supports the following transaction types:

ONE OFF (c)

A single-use payment code that is automatically deactivated after one successful payment.

Supported Payment Methods

The supported modern retail payment methods are as follows:

Channel CodeInstitutionOne Off (c)Open Recurring (o)Close Recurring (r)
INDOMARETIndomaret
ALFAMARTAlfamart
FASTPAYFastpay

Modern Retail Transactions

1. Create Payment Code

POST/v1.0/transfer-va/create-vaService Code: 27

This service is used to create a new modern retail payment code.

Payload Request

ParametersData TypeMandatoryDescription
customerNoStringCVirtual Account No / Payment Code (if applicable)
Mandatory if virtualAccountTrxType = o / r
Length: 3-14
Allowed Chars: numeric
If virtualAccountTrxType = c and payment code is not available, it will be randomly generated
virtualAccountNameStringYCustomer Name
Length: 5-24
Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_), hyphens (-), and spaces (\s)
trxIdStringYTransaction Number
Length: 5-50
Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-)
totalAmountObjectCTotal transaction amount
Mandatory if virtualAccountTrxType = c / r
valueStringYTransaction value
Length: 1-14
Allowed Chars: numeric
currencyStringYCurrency code
Length: 3
Allowed Value: IDR
virtualAccountTrxTypeStringYType of transaction
Allowed Value: c (One Off)
expiredDateStringCTransaction expiration date
Format: YYYY-MM-DDTHH:mm:ss+07:00
Mandatory if virtualAccountTrxType = c / r
Must be more than 1 minute and a maximum of 3 months from the time of request
additionalInfoObjectYAdditional information
channelStringYChannel code
Allowed Value: INDOMARET / ALFAMART / FASTPAY
{
"customerNo": "000003212",
"virtualAccountName": "Chus Pandi",
"trxId": "INV-000000023212x2221",
"totalAmount": {
"value": "25000.00",
"currency": "IDR"
},
"virtualAccountTrxType": "c",
"expiredDate": "2023-09-05T19:30:14+07:00",
"additionalInfo": {
"channel": "INDOMARET"
}
}

Response Payload

ParametersData TypeDescription
responseCodeStringResponse Code
responseMessageStringMessage response
virtualAccountDataObjectData that has been created
partnerServiceIdStringProvider's BIN code
customerNoStringCustomer Number
virtualAccountNoStringPayment Code / VA Number
virtualAccountNameStringCustomer Name
trxIdStringMerchant transaction number
totalAmountObjectTotal transaction amount
valueStringThe transaction value paid by the customer
currencyStringCurrency code
virtualAccountTrxTypeStringType of transaction
expiredDateStringTransaction expiration date
additionalInfoObjectAdditional information
channelStringCode channel
contractIdStringTransaction reference generated by Winpay
{
"responseCode": "2002700",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": " 22691",
"customerNo": "41693898987",
"virtualAccountNo": " 2269141693898987",
"virtualAccountName": "Chus Pandi",
"trxId": "INV-000000023212x2221",
"totalAmount": {
"value": "25000.00",
"currency": "IDR"
},
"virtualAccountTrxType": "c",
"expiredDate": "2023-09-05T19:30:14+07:00",
"additionalInfo": {
"channel": "INDOMARET",
"contractId": "cia80bff69-1073-4811-b1e1-13b738784d8b"
}
}
}

List Response Codes

Response CodeResponse MessageDescription
2002700Success
4002700Bad RequestGeneral request failed error, including message parsing failed.
4002701Invalid field format { field name }
4002702Invalid mandatory field {field name}
4012700Invalid signatureX-Signature wrong
4042716Partner not foundX-Partner-ID not registered
4092700Cannot use same X-EXTERNAL-ID in same dayX-External-ID has already been used on the same day
4092701Duplicate trxIdtrxId has been used before
5002700General ErrorGeneral Error
5002701Internal Server ErrorUnknown Internal Server Failure, Please retry the process again.

2. Inquiry Status

POST/v1.0/transfer-va/statusService Code: 26

This service is used to check the transaction status of modern retail payments.

Payload Request

ParametersData TypeMandatoryDescription
virtualAccountNoStringYPayment Code / VA Number
trxIdStringYTransaction Number
Length: 5-50
Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-)
additionalInfoObjectYAdditional information
contractIdstringYcontractId from create payment
{
"virtualAccountNo": " 2269141708949044",
"additionalInfo": {
"contractId": "ciaf1b982a-9d06-4e27-ba39-a6aefd9e813d",
"channel": "INDOMARET",
"trxId": "xxxxxxxxxxx13"
}
}

Response Payload

ParametersData TypeDescription
responseCodeStringResponse code
responseMessageStringMessage response
virtualAccountDataObjectData that has been created
virtualAccountNoStringPayment Code / VA Number
virtualAccountNameStringCustomer Name
paymentFlagStatusStringTransaction Status (00 - paid, 01 - unpaid, 02 - check)
transactionDateStringTransaction date
referenceNoStringPayment reference number
totalAmountObjectTotal transaction amount
valueStringThe transaction value paid by the customer
currencyStringCurrency code
additionalInfoObjectAdditional information
channelStringCode channel
contractIdStringWinpay generated transaction reference
trxIdStringMerchant transaction number
{
"responseCode": "2002600",
"responseMessage": "Successful",
"virtualAccountData": {
"virtualAccountNo": "2269141708949044",
"virtualAccountName": "Valid 14",
"paymentFlagStatus": "00",
"transactionDate": "2024-02-26T19:04:51+00:00",
"referenceNo": "50966",
"totalAmount": {
"value": "15000.00",
"currency": "IDR"
}
},
"additionalInfo": {
"contractId": "ciaf1b982a-9d06-4e27-ba39-a6aefd9e813d",
"channel": "INDOMARET",
"trxId": "xxxxxxxxxxx13"
}
}

List Response Codes

Response CodeResponse MessageDescription
2002600Success
4002600Bad RequestGeneral request failed error, including message parsing failed.
4002601Invalid field format { field name }
4002602Invalid mandatory field {field name}
4012600Invalid signatureX-Signature wrong
4042601Transaction not foundtrxId and contractId not found
4042616Partner not foundX-Partner-ID not registered
4092600Cannot use same X-EXTERNAL-ID in same dayX-External-ID has already been used on the same day
4092601Duplicate trxIdtrxId has been used before
5002600General ErrorGeneral Error
5002601Internal Server ErrorUnknown Internal Server Failure, Please retry the process again.
5002602reqbill not foundcontractId not found

3. Delete Payment Code

DELETE/v1.0/transfer-va/delete-vaService Code: 31

This service is used to cancel payment codes with unpaid status.

Payload Request

ParametersData TypeMandatoryDescription
virtualAccountNoStringYPayment Code / VA Number
trxIdStringYTransaction Number
Length: 5-50
Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-)
additionalInfoObjectYAdditional information
contractIdstringYcontractId from create payment
channelStringChannel Code
{
"virtualAccountNo": " 2269131710748503",
"trxId": "XINV-000000170104",
"additionalInfo": {
"contractId": "ci067a0336-4ddf-4001-9cef-3eb107c331f4",
"channel": "INDOMARET"
}
}

Response Payload

ParametersData TypeDescription
responseCodeStringResponse code
responseMessageStringMessage response
virtualAccountDataObjectTransaction data
trxIdStringMerchant transaction number
additionalInfoObjectAdditional information
contractIdStringWinpay generated transaction reference
channelStringCode channel
{
"responseCode": "2003100",
"responseMessage": "Success",
"virtualAccountData": {
"trxId": "xxxxxxxxxxx20"
},
"additionalInfo": {
"contractId": "si4390d6cb-5e9f-41fb-bfa3-51f6e7c9e4b4",
"channel": "INDOMARET"
}
}

List Response Codes

Response CodeResponse MessageDescription
2003100Success
4003100Bad RequestGeneral request failed error, including message parsing failed.
4003101Invalid field format { field name }
4003102Invalid mandatory field {field name}
4013100Invalid signatureX-Signature wrong
4043101Transaction not foundtrxId and contractId not found
4043116Partner not foundX-Partner-ID not registered
4093100Cannot use same X-EXTERNAL-ID in same dayX-External-ID have been used on the same day
4093101Duplicate trxIdtrxId already used
5003100General ErrorGeneral Error
5003101Internal Server ErrorUnknown Internal Server Failure, Please retry the process again.
5003102reqbill not foundcontractId not found

Handle Payment Callback

After the customer makes a payment at a modern retail outlet, Winpay will send a callback to the merchant to notify the payment status. The merchant must implement a service to receive callbacks from Winpay.

Retries Policy

We will send a callback to the merchant 3x until the merchant responds with the expected response. However, if the first callback attempt is successful, we will not send another callback.

Callback Info

POST{yoururl}/v1.0/transfer-va/paymentService Code: 25

Payment callback service requested by Winpay systems to the Merchant server.

Header Structure

HeaderValueDescription
Content-Typeapplication/json
X-Timestamp2023-08-24T17:07:05+07:00ISO8601 String
X-Partner-ID{partnerId}
X-Signature{signature}
X-External-ID{externalId}
Channel-ID{channelId}

Callback Payload

ParametersData TypeDescription
partnerServiceIdStringProvider's BIN code
customerNoStringCustomer Number
virtualAccountNoStringPayment Code / VA Number
virtualAccountNameStringCustomer Name
trxIdStringMerchant transaction number
paymentRequestIdStringPayment transaction number
PaidAmountObjectTotal transaction amount
valueStringThe value of the transaction paid by the customer
currencyStringCurrency code
trxDateTimeStringTransaction date
referenceNoStringPayment reference number
additionalInfoObjectAdditional information
channelStringChannel code (INDOMARET / ALFAMART / FASTPAY)
contractIdStringWinpay generated transaction reference
{
"partnerServiceId": " 22691",
"customerNo": "41693903614",
"virtualAccountNo": " 2269141693903614",
"virtualAccountName": "Bayar 2269141693903614",
"trxId": "INV-000000023212x2224",
"paymentRequestId": "88889123",
"paidAmount": {
"value": "10000",
"currency": "IDR"
},
"trxDateTime": "2023-09-05T22:47:00+07:00",
"referenceNo": 36238,
"additionalInfo": {
"channel": "INDOMARET",
"contractId": "ci71a51730-2373-455f-b538-3f9912fefb73"
}
}

Expected Response

{
"responseCode": "2002500",
"responseMessage": "Successful"
}