Skip to content

Payment Disbursement Business Codes

Transaction Status Codes

json
{
  "transactionStatus": 10,
  "transactionMessage": "SUCCESS"
}

Status Code Descriptions

CodeDescriptionPossible Reasons
0UNKNOWNUnknown
10SUCCESSSuccess
20FAILEDFailure
40TIMEOUTTimeout during payment channel processing, status does not imply success or failure
50PENDINGTransaction accepted, awaiting payment channel response or T+1 processing, status does not imply success or failure

API Details

Transfer to Account API

INFO

Purpose: Used for transfers between bank/wallet accounts.

Request URL: api/remit/bank/v1

Request Method: POST

WARNING

  1. Transaction fees are calculated separately and are not deducted from the disbursement amount.

  2. Explanation for notifyUrl:

    2.1 If the merchant's backend already has a disbursement callback address configured, this field can be omitted, and the backend configuration will be used.

    2.2 If the merchant's backend has no disbursement callback address configured, this field must be provided, and the URL passed in the request will be used.

    2.3 If both the backend and the request provide a callback address, the URL passed in the request will take priority.

Request Parameters

ParameterRequiredTypeDescriptionExample
orderIdYesStringMerchant order ID202305250001
beneficiaryYesObject
- countryYesStringCountry, can be "ID"ID
- firstNameYesStringFirst nameMia
- lastNameYesStringLast nameSmith
- phoneNumberYesStringPhone number62856123456
beneficiaryAccountYesObjectBeneficiary account information
- bankYesStringBank code, refer to the bank code list014
- cityYesStringBeneficiary account city, can be "Jakarta"Jakarta
- nameYesStringBeneficiary account nameJohn Doe
- numberYesStringBeneficiary account number6790153860
senderAmountYesLongPayment amount10000
notifyUrlNoStringCallback URL to receive payment status notificationshttp://test.com
beneficiaryCityNoStringBeneficiary city nameJakarta
beneficiaryCountryNoStringBeneficiary country, can be "ID"ID
beneficiaryCurrencyNoStringBeneficiary currency, can be "IDR"IDR
senderNoObjectIf sender is provided, all related fields are required
- countryNoStringSender's country, can be "ID"ID
- firstNameNoStringSender's first nameMia
- lastNameNoStringSender's last nameSmith
- phoneNumberNoStringSender's phone number62856123456
- birthDateNoStringSender's birthdate (YYYY-MM-DD)2000-01-01
- personalIdNoStringSender's personal ID number167101110100001
- personalIdTypeNoStringPersonal ID type, fixed values: KTP (ID Card), PASSPORTKTP
- personalIdCountryNoStringPersonal ID issuing countryID
senderCountryNoStringSender's country, can be "ID"ID
senderCurrencyNoStringSender's currency, can be "IDR"IDR

Request Example

json
{
  "orderId": "202305250001",
  "notifyUrl": "http://test.com",
  "beneficiary": {
    "country": "ID",
    "firstName": "FHILEA",
    "lastName": "HERMANUS",
    "phoneNumber": "628156056051"
  },
  "beneficiaryAccount": {
    "bank": "014",
    "city": "Jakarta",
    "name": "FHILEA HERMANUS",
    "number": "0803944123"
  },
  "senderAmount": 10000
}

Response Parameters

ParameterTypeDescriptionExample
orderIdStringMerchant order ID202305250001
transactionIdStringPlatform transaction IDT230525999999
transactionStatusIntTransaction status (see status codes)50
transactionMessageStringTransaction message (corresponds to transaction status)Pending
createdTimeStringOrder creation time, YYYY-MM-DD HH:MM:SS2023-05-23 17:27:58
cashInTimeStringCash-in time, YYYY-MM-DD HH:MM:SSnull
senderAmountLongPayment amount10000
serviceFeeAmountLongService fee5000
beneficiaryNameStringBeneficiary nameFHILEA HERMANUS
beneficiaryAccountNumberStringBeneficiary account number628156056051
reasonStringFailure reason, fixed values: LOW_BALANCE, INVALID_BENEFICIARY, USER_AMOUNT_EXCEED_LIMIT.
If empty, contact support for investigation in case of failure.

Response Example

json
{
  "status": 1,
  "message": "PROCESSING SUCCESS",
  "data": {
    "orderId": "202305250001",
    "transactionId": "T230525999999",
    "transactionStatus": 50,
    "transactionMessage": "PENDING",
    "createdTime": "2023-05-23 17:27:58",
    "cashInTime": null,
    "senderAmount": 10000,
    "serviceFeeAmount": 5000,
    "beneficiaryName": "FHILEA HERMANUS",
    "beneficiaryAccountNumber": "628156056051",
    "reason": ""
  }
}

TIP

The success of the transaction is determined by the transaction status code, not the request processing status. You can use the "Platform Transaction ID" for future status queries.

Asynchronous Callback Notification API

INFO

Purpose: Used to notify the merchant after a disbursement has been completed.

Request URL: Callback URL configured in the merchant backend or the notifyUrl passed in the request.

Request Method: POST

WARNING

After receiving the asynchronous notification, respond with the string "SUCCESS" (without quotes), and not in JSON format. Once successfully notified, no further notifications will be sent, with a maximum of 5 attempts.

Platform Notification Parameters

ParameterTypeDescriptionExample
orderIdStringMerchant order ID202305250001
transactionIdStringPlatform transaction IDT230525999999
transactionStatusIntTransaction status (see status codes)10
transactionMessageStringTransaction message (corresponds to transaction status)Success
createdTimeStringOrder creation time, YYYY-MM-DD HH:MM:SS2023-05-23 17:27:58
cashInTimeStringCash-in time, YYYY-MM-DD HH:MM:SS2023-05-23 17:30:58
senderAmountLongPayment amount10000
serviceFeeAmountLongService fee5000
beneficiaryNameStringBeneficiary nameFHILEA HERMANUS
beneficiaryAccountNumberStringBeneficiary account number

628156056051 | | reason | String | Failure reason, fixed values: LOW_BALANCE, INVALID_BENEFICIARY.
If empty, contact support for investigation in case of failure. | |

Example of Notification Data Sent to Merchant

json
{
  "status": 1,
  "message": "PROCESSING SUCCESS",
  "data": {
    "orderId": "202305250001",
    "transactionId": "T230525999999",
    "transactionStatus": 10,
    "transactionMessage": "SUCCESS",
    "createdTime": "2023-05-23 17:27:58",
    "cashInTime": "2023-05-23 17:30:58",
    "senderAmount": 10000,
    "serviceFeeAmount": 5000,
    "beneficiaryName": "FHILEA HERMANUS",
    "beneficiaryAccountNumber": "628156056051",
    "reason": ""
  }
}

Transaction Query API

INFO

Purpose: Used to query the status of a specific transaction.

Request URL: api/remit/query/v1

Request Method: POST

Request Parameters

ParameterRequiredTypeDescriptionExample
queryIdYesStringQuery ID, must be unique202305260001
orderIdYesStringMerchant order ID202305250001
transactionIdNoStringPlatform transaction ID (if not specified, merchant order ID will be used; if both are provided, they will be cross-checked)T20230525999

Request Example

json
{
  "queryId": "202305260001",
  "orderId": "202305250001",
  "transactionId": "T230525999999"
}

Response Parameters

ParameterTypeDescriptionExample
orderIdStringMerchant order ID202305250001
transactionIdStringPlatform transaction IDT230525999999
transactionStatusIntTransaction status (see status codes)10
transactionMessageStringTransaction message (corresponds to transaction status)Success
createdTimeStringOrder creation time, YYYY-MM-DD HH:MM:SS2023-05-23 17:27:58
cashInTimeStringCash-in time, YYYY-MM-DD HH:MM:SS2023-05-23 17:28:01
senderAmountLongPayment amount10000
serviceFeeAmountLongService fee5000
beneficiaryNameStringBeneficiary nameFHILEA HERMANUS
beneficiaryAccountNumberStringBeneficiary account number628156056051
reasonStringFailure reason, fixed values: LOW_BALANCE, INVALID_BENEFICIARY.
If empty, contact support for investigation in case of failure.

Response Example

json
{
  "status": 1,
  "message": "PROCESSING SUCCESS",
  "data": {
    "orderId": "202305250001",
    "transactionId": "T230525999999",
    "transactionStatus": 10,
    "transactionMessage": "SUCCESS",
    "createdTime": "2023-05-23 17:27:58",
    "cashInTime": "2023-05-23 17:28:01",
    "senderAmount": 10000,
    "serviceFeeAmount": 5000,
    "beneficiaryName": "FHILEA HERMANUS",
    "beneficiaryAccountNumber": "628156056051",
    "reason": ""
  }
}

WARNING

Currently, only individual transaction queries are supported. Please do not query the same order frequently, as the platform limits query requests.

The cashInTime will only have a value after a successful transaction.

Balance Inquiry API

INFO

Purpose: Used to query the merchant account balance.

Request URL: api/balance/query/v1

Request Method: POST

Request Parameters

No request body is required; only relevant information in the request header is needed. Refer to Request Header Information.

Response Parameters

ParameterTypeDescriptionExample
amountAvailableLongAvailable balance66000
preSettledAmountLongAmount pending settlement10000
totalAmountLongTotal balance = Available + Pending Settlement76000

Response Example

json
{
  "status": 1,
  "message": "PROCESSING SUCCESS",
  "data": {
    "amountAvailable": 66000,
    "preSettledAmount": 10000,
    "totalAmount": 76000
  }
}