Kirim DOKU

Kirim DOKU is a service designed to facilitate seamless domestic fund transfers. With Kirim DOKU, users can send money directly to recipients' bank accounts within the country without the need to visit a physical bank.

How Kirim DOKU works ?

Kirim DOKU
  1. Account Inquiry

Before initiating a fund transfer, it is crucial to verify the validity of both the sender's and the recipient's bank accounts. Ensuring account accuracy helps prevent transaction errors and supports a seamless transfer process.

Completing an Account Inquiry is mandatory before proceeding with a bank transfer.

  1. Balance Inquiry

Perform a Balance Inquiry to confirm that sufficient funds are available in the sender's account to complete the transaction. This step minimizes the risk of failed transactions due to insufficient balance.

  1. Transfer Bank

This process involves transferring funds from the sender's account to the recipient's account. Ensure all required details, including the recipient's bank account information and the transfer amount, are accurately provided.

  1. Check Status

Track the status of your transfer to confirm its completion. This feature allows real-time monitoring and provides transparency for both the sender and recipient.

Integration Guide

1. Account Inquiry

post
Header parameters
X-EXTERNAL-IDstringRequired

Numeric String. Reference number that should be unique in the same day (Request Id)

Example: 41807553358950093184162180797837
X-PARTNER-IDstringRequired

Client Id for merchant that generated by DOKU

Example: 82150823919040624621823174737537
X-SIGNATUREstringRequired

Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-TIMESTAMPstringRequired

Client's current local time with format YYYY-MM-DDTHH:mm:ssZD

Example: 2020-12-21T14:56:11+07:00
Body
partnerReferenceNostringRequired

Transaction identifier on service consumer system, generated by KD partner

Example: hsjkans284b2he54
customerNumberstringRequired

Customer account number in phone number format

Example: 628115678890
beneficiaryAccountNumberstring · max: 32Required

Destination account number

Example: 8377388292
Responses
200
Transfer bank processed
application/json
post
POST /v1.0/emoney/bank-account-inquiry HTTP/1.1
Host: api-sandbox.doku.com
X-EXTERNAL-ID: text
X-PARTNER-ID: text
X-SIGNATURE: text
X-TIMESTAMP: text
Content-Type: application/json
Accept: */*
Content-Length: 295

{
  "partnerReferenceNo": "hsjkans284b2he54",
  "customerNumber": "628115678890",
  "amount": {
    "value": "200000.00",
    "currency": "IDR"
  },
  "beneficiaryAccountNumber": "8377388292",
  "additionalInfo": {
    "channelCode": "07",
    "beneficiaryBankCode": "014",
    "beneficiaryAccountName": "FHILEA HERMANUS",
    "senderCountryCode": "ID"
  }
}
{
  "responseCode": 2004200,
  "responseMessage": "Successful",
  "referenceNo": "I0438729855304540",
  "partnerReferenceNo": "hsjkans284b2he54",
  "beneficiaryAccountNumber": "8377388292",
  "beneficiaryAccountName": "SUHUT",
  "beneficiaryBankCode": "014",
  "beneficiaryBankShortName": "Bank Central Asia BCA",
  "beneficiaryBankName": "Bank Central Asia BCA",
  "amount": {
    "value": "200000.00",
    "currency": "IDR"
  },
  "sessionId": "I0438729855304540",
  "additionalInfo": {
    "senderCountryCode": "ID",
    "forexRate": "1.00",
    "forexOriginCurrency": "IDR",
    "feeAmount": "4500.00",
    "feeCurrency": "IDR",
    "beneficiaryAmount": "200000.00",
    "referenceNumber": "c5fe5465-0843-4ac7-9c93-57cb2c5ef6b2"
  }
}

2. Balance Inquiry

post
Header parameters
X-EXTERNAL-IDstringRequired

Numeric String. Reference number that should be unique in the same day (Request Id)

Example: 41807553358950093184162180797837
X-PARTNER-IDstringRequired

Client Id for merchant that generated by DOKU

Example: 82150823919040624621823174737537
X-SIGNATUREstringRequired

Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-TIMESTAMPstringRequired

Client's current local time with format YYYY-MM-DDTHH:mm:ssZD

Example: 2020-12-21T14:56:11+07:00
Body
partnerReferenceNostring · max: 64Optional

Transaction identifier on service consumer system, generated by partner.

accountNostring · max: 16RequiredExample: A41879
Responses
200
Transfer bank processed
application/json
post
POST /v1.0/balance-inquiry HTTP/1.1
Host: api-sandbox.doku.com
X-EXTERNAL-ID: text
X-PARTNER-ID: text
X-SIGNATURE: text
X-TIMESTAMP: text
Content-Type: application/json
Accept: */*
Content-Length: 50

{
  "partnerReferenceNo": "text",
  "accountNo": "A41879"
}
{
  "responseCode": 2001100,
  "responseMessage": "Successful",
  "accountNo": "A41879",
  "name": "Simulator Indo Agent",
  "accountInfos": {
    "holdAmount": {
      "value": "0.00",
      "currency": "IDR"
    },
    "avaliableBalance": {
      "value": "823781442.13",
      "currency": "IDR"
    }
  },
  "additionalInfo": {
    "creditAlertLimit": {
      "value": "65000.00",
      "currency": "IDR"
    }
  }
}

3. Transfer Bank

post
Header parameters
X-EXTERNAL-IDstringRequired

Numeric String. Reference number that should be unique in the same day (Request Id)

Example: 41807553358950093184162180797837
X-PARTNER-IDstringRequired

Client Id for merchant that generated by DOKU

Example: 82150823919040624621823174737537
X-SIGNATUREstringRequired

Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-TIMESTAMPstringRequired

Client's current local time with format YYYY-MM-DDTHH:mm:ssZD

Example: 2020-12-21T14:56:11+07:00
Body
partnerReferenceNostring · max: 64Required

Transaction identifier on service consumer system, generated by KD partners. Must be unique per request.

Example: hsjkans284b2he54
customerNumberstring · max: 32Required

Customer Account Number in Phone Number format

Example: 628115678890
beneficiaryAccountNumberstring · max: 32Required

Destination account number

Example: 8377388292
beneficiaryBankCodestringRequired

Bank code

Example: 014
sessionIdstring · max: 25Optional

Inquiry invoice id

Example: I0438729855304540
feeTypeany · max: 25Optional
Responses
200
Transfer bank processed
application/json
post
POST /v1.0/emoney/transfer-bank HTTP/1.1
Host: api-sandbox.doku.com
X-EXTERNAL-ID: text
X-PARTNER-ID: text
X-SIGNATURE: text
X-TIMESTAMP: text
Content-Type: application/json
Accept: */*
Content-Length: 607

{
  "partnerReferenceNo": "hsjkans284b2he54",
  "customerNumber": "628115678890",
  "beneficiaryAccountNumber": "8377388292",
  "beneficiaryBankCode": "014",
  "amount": {
    "value": "200000.00",
    "currency": "IDR"
  },
  "sessionId": "I0438729855304540",
  "feeType": "",
  "additionalInfo": {
    "channelCode": "07",
    "beneficiaryFirstName": "FHILEA",
    "beneficiaryLastName": "HERMANUS",
    "beneficiaryPhoneNumber": "62811600174",
    "beneficiaryBankName": "Bank BCA",
    "beneficiaryAccountName": "FHILEA HERMANUS",
    "senderCountryCode": "ID",
    "senderFirstName": "JOHN",
    "senderLastName": "DOE",
    "senderPersonalId": "89012345",
    "senderPersonalIdType": "KTP",
    "remark": "Remark test"
  }
}
{
  "responseCode": 2004300,
  "responseMessage": "Successful",
  "referenceNo": "DK01123220",
  "partnerReferenceNo": "2020102900000000000001",
  "transactionDate": "2022-11-11T10:51:48+07:00",
  "referenceNumber": "39448581-c741-44f9-b3af-98616e2229b1",
  "additionalInfo": {
    "sessionId": "I0438729855304540",
    "amount": "200000.00"
  }
}

4. Check Status

post
Header parameters
X-EXTERNAL-IDstringRequired

Numeric String. Reference number that should be unique in the same day (Request Id)

Example: 41807553358950093184162180797837
X-PARTNER-IDstringRequired

Client Id for merchant that generated by DOKU

Example: 82150823919040624621823174737537
X-SIGNATUREstringRequired

Symmetric Signature with Get Token (Default)HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod +”:“+ EndpointUrl +":"+ AccessToken +":“+ Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ + TimeStamp

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
X-TIMESTAMPstringRequired

Client's current local time with format YYYY-MM-DDTHH:mm:ssZD

Example: 2020-12-21T14:56:11+07:00
Body
originalPartnerReferenceNostring · max: 64Required

Original transaction identifier on service consumer system. Filled with partnerReferenceNo from remit/transfer API

Example: hsjkans284b2he54
originalReferenceNostring · max: 64Optional

Original transaction identifier on service provider system. Can be filled with referenceNo or sessionId from remit/transfer API.

Example: hsjkans284b2he54
originalExternalIdstring · max: 32Optional

Original transaction identifier on service provider system. Can be filled with X-EXTERNAL_ID from remit/transfer API.

Example: 892834eWg
serviceCodestring · max: 2Required

Transaction type indicator (service code of the original transaction request).

Example: 43
Responses
200
check status processed
application/json
post
POST /v1.0/qr/qr-mpm-status HTTP/1.1
Host: api-sandbox.doku.com
X-EXTERNAL-ID: text
X-PARTNER-ID: text
X-SIGNATURE: text
X-TIMESTAMP: text
Content-Type: application/json
Accept: */*
Content-Length: 142

{
  "originalPartnerReferenceNo": "hsjkans284b2he54",
  "originalReferenceNo": "hsjkans284b2he54",
  "originalExternalId": "892834eWg",
  "serviceCode": "43"
}
{
  "responseCode": 2005300,
  "responseMessage": "Successful",
  "originalReferenceNo": "DK01123220",
  "originalPartnerReferenceNo": "2020102900000000000001",
  "serviceCode": 43,
  "latestTransactionStatus": "00",
  "amount": {
    "value": "65000.00",
    "currency": "IDR"
  },
  "transactionDate": "2024-09-17T14:41:52. 022+07:00",
  "originalResponseCode": 0,
  "originalResponseMessage": "Transfer Approve",
  "transactionStatusDesc": "Transaction is successfully processed",
  "sessionId": "I0438729855304540",
  "additionalInfo": {
    "cashInTime": "2024-09-17 13:56:57",
    "remark": "Remark test",
    "beneficiaryAmount": "200000.00"
  }
}

5. Unpaid Notification

For Sandbox Environment

  • UNPAID to FAILED transaction

    • beneficiaryBankCode must be 002

    • beneficiaryAccountNumber must contain 12345

    • channel.code must be 07 (or not send the parameter at all)

  • For UNPAID to SUCCESS/PAID transaction

    • beneficiaryBankCode must be other than 002, e.g. 014

    • beneficiaryAccountNumber must contain 12345

    • channel.code must be 07 (or not send the parameter at all)

post

This API is used to notify partners when the transaction status initially gets UNPAID status and then updated by DOKU's system to either Success or Failed. If partners don't want to implement Unpaid Notification API, they may opt to call the Transaction Info API to fetch the status of a transaction. To receive unpaid notifications, partners are required to prepare Callback URLs for sandbox and production environments. For UNPAID to PAID transactions. In the sandbox environment, the notification will be sent in under 5 minutes. For UNPAID to FAILED transactions In the sandbox environment, the notification will be sent at odd hours e.g. 1 P.M., 3 P.M., 5 P.M., and so on.

Path parameters
merchantUrlUnpaidNotificationstringRequired

Merchant url path for receiving Unpaid notification by KIRIMDOKU provided by partner

Header parameters
requestIdstringRequired

Unique reference identification sent by the API partner.

Example: fd53b1e3-9c35-4dfa-a95ca8dbc5695485
agentKeystringRequired

Hash key of authorization agent

Example: A41418
signaturestringRequired

Unique authorization code generated by partner validated by KIRIMDOKU

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
Content-TypestringRequired

The Content-Type field indicates that JSON type is acceptable to send to the recipient

Example: application/json
Body
sendTrxIdstring · max: 64Optional

Transaction identifier on service consumer system, generated by partner.

transactionIdstring · max: 16RequiredExample: DK0018353
invoiceNumberstringRequired

Transaction ID that have been updated

Example: I088787987870912
transactionStatusstringRequired

Remit transaction status. Use this status to determine whether the beneficiary is receiving the funds or not. 50: Success, 35: Failed, 20: Unpaid, 40: Refunded.

Example: 50
activityCodestringRequired

Specific notification code

Example: 200
messagestringRequired

Notification message “Transaction is Success” or “Transaction is Failed”

Example: Transaction is Success
processDatestringRequired

Update time in yyyy-MM-ddTHH:mm:ss format

Example: 2024-01-12'T'07:30:12
createdTimestringRequired

Payment creation time in Epoch time format

Example: 1699520040340
Responses
200
Notification processed Successfully
application/json
post
POST /{merchantUrlUnpaidNotification} HTTP/1.1
Host: {merchant-domain}
requestId: text
agentKey: text
signature: text
Content-Type: application/json
Accept: */*
Content-Length: 232

{
  "sendTrxId": "text",
  "transactionId": "DK0018353",
  "invoiceNumber": "I088787987870912",
  "transactionStatus": "50",
  "activityCode": "200",
  "message": "Transaction is Success",
  "processDate": "2024-01-12'T'07:30:12",
  "createdTime": "1699520040340"
}
200

Notification processed Successfully

{
  "status": true,
  "transactionId": "DK0018353",
  "responseCode": "00",
  "responseMessage": "Successfully processed"
}

6. Refund Notification

For Sandbox Environment, beneficiaryAccountNumber parameter must be 7746555134

post

This API is used to notify partners when a refund occurs in the KIRIMDOKU system. KIRIMDOKU will notify partners with the URL that has been registered, and the notification will be done maximum 3 times or until the notification callback response is correct. If partners don't want to implement Refund Notification API, they may opt to call the Transaction Info API to fetch the status of a transaction. To receive refund notifications, partners are required to prepare Callback URLs for sandbox and production environments. In the sandbox environment, the notification will be sent in 5 minutes after the partner hits the remit API.

Path parameters
merchantUrlRefundNotificationstringRequired

Merchant url path for receiving Refund notification by KIRIMDOKU provided by partner

Header parameters
requestIdstringRequired

Unique reference identification sent by the API partner.

Example: fd53b1e3-9c35-4dfa-a95ca8dbc5695485
agentKeystringRequired

Hash key of authorization agent

Example: A41418
signaturestringRequired

Unique authorization code generated by partner validated by KIRIMDOKU

Example: ieNOENDdN4MnectGytx5UvmOfASZ2oGWMCJ8gVqkw3tB98ofgY9cbxSeY4IYoYeoKs+0QP4h8BTBhemlfeXp1w==
Content-TypestringRequired

The Content-Type field indicates that JSON type is acceptable to send to the recipient

Example: application/json
Body
transactionIdstring · max: 16RequiredExample: DK0018353
activityCodestringRequired

Specific notification code

Example: 200
messagestringRequired

Notification message “Transaction is Success” or “Transaction is Failed”

Example: Transaction is Refunded
processDatestringRequired

Update time in yyyy-MM-ddTHH:mm:ss format

Example: 2024-01-12'T'07:30:12
Responses
200
Notification processed Successfully
application/json
post
POST /{merchantUrlRefundNotification} HTTP/1.1
Host: {merchant-domain}
requestId: text
agentKey: text
signature: text
Content-Type: application/json
Accept: */*
Content-Length: 124

{
  "transactionId": "DK0018353",
  "activityCode": "200",
  "message": "Transaction is Refunded",
  "processDate": "2024-01-12'T'07:30:12"
}
200

Notification processed Successfully

{
  "status": true,
  "transactionId": "DK0018353",
  "responseCode": "00",
  "responseMessage": "Successfully processed"
}

Last updated

Was this helpful?