API Reference
DOKU DocsChangelogDOKU Github
  • Getting Started with DOKU API
    • User Registration
    • Idempotency Request
    • Notification
      • Setup Notification URL
      • HTTP Notification Sample for SNAP
      • HTTP Notification Sample - Non SNAP
      • Best Practice
      • Retry Notification
      • Override Notification URL
    • Signature Component
      • Non-SNAP
        • Signature Component from Request Header
        • Signature Componen from Response Header
        • Signature from API Get Method
        • Sample Code
      • SNAP
        • Symmetric Signature
        • Asymmetric Signature
    • Response Code
      • HTTP Status and Case Code
    • Check Status API
      • Non-SNAP
      • SNAP
    • Retrieve Payment Credential
  • Accept Payment
    • DOKU Checkout
      • Integration Guide
        • Backend Integration
        • Frontend Integration
        • Simulate payment and Notification
      • Supported Payment Methods
      • Status Order
      • Additional Feature
        • Tokenization
        • Promo on DOKU Checkout Page
        • Track Campaign Source on Google Analytics
      • Checkout Settings
    • Direct API
      • Non-SNAP
        • Cards
          • Payment Page Integration Guide
          • Host-To-Host Integration Guide
          • Mastercard Automatic Billing Updater (ABU) Integration Guide
            • Backend Integration
        • e-Wallet
          • Overview
          • DOKU e-Wallet
          • OVO Push Payment
          • ShopeePay
          • LinkAja
        • Paylater
          • Akulaku
          • Kredivo
          • Indodana
        • Digital Banking
          • Jenius Pay
        • Convenience Store
          • Alfa Group
          • Indomaret
      • SNAP
        • Integration Guide
          • Get Token API
            • B2B
            • B2B2C
          • Virtual Account
            • CIMB Virtual Account
            • BSI Virtual Account
            • BCA Virtual Account
            • BNC Virtual Account
            • BNI Virtual Account
            • Mandiri Virtual Account
            • BRI Virtual Account
            • BTN Virtual Account
            • Permata Virtual Account
            • Danamon Virtual Account
            • BSS Virtual Account
          • E-Wallet
            • DOKU Wallet
            • DANA
            • OVO
            • ShopeePay
          • Direct Debit
            • Allo Bank Direct Debit
            • BRI Direct Debit
            • CIMB Direct Debit
            • Mandiri Direct Debit
          • Kartu Kredit Indonesia Cepat Secure(KKI CPTS)
            • Host to Host Integration
          • QRIS
    • Finance and Settlement
      • Split Settlement
      • Custom Settlement Report
      • Hold and Release Settlement
      • Bulk Registration Bank
    • Test on DOKU Demo Site
    • DOKU Payment Simulator
  • Developer Kit
    • Postman Collection
    • Libraries and SDK
  • Wallet As A Service
    • Sub Account
  • Partnership
    • Partner API
      • Check Requirements API
      • Generate Token API
      • Upload File API
      • Business Registration API
      • Create Business Lite API
      • Get Business Data API
  • Payout
    • Kirim DOKU
  • FLEXIBILL
    • Account Billing
      • Batch Upload
    • DOKU Biller
      • Response Code
      • Samples
  • PAYCHAT API
    • Send WhatsApp Message
  • Archive
    • Non-SNAP
      • Tokenization V1
      • e-Wallet
        • OVO Recurring
        • OVO Open API
    • SNAP
      • Virtual Account
        • BCA v1.0
        • BRI v1.0
        • BNI v1.0
        • BNC v1.0
        • Mandiri v1.0
        • BTN v1.0
        • Permata v1.0
        • Danamon Virtual Account
      • e-Wallet
        • OVO Open API
        • DANA
        • ShopeePay
      • Direct Debit
        • CIMB Direct Debit
        • BRI Direct Debit
        • Allobank
Powered by GitBook

DOKU API

  • Legacy Documentation
On this page

Was this helpful?

  1. Payout

Kirim DOKU

PreviousGet Business Data APINextAccount Billing

Last updated 3 months ago

Was this helpful?

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 ?

  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


2. Balance Inquiry


3. Transfer Bank

4. Check Status


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)


6. Refund Notification

For Sandbox Environment, beneficiaryAccountNumber parameter must be 7746555134

Kirim DOKU
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
400
Bad Request
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"
  }
}
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
400
Bad Request
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"
    }
  }
}
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
400
Bad Request
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"
  }
}
  • How Kirim DOKU works ?
  • Integration Guide
  • 1. Account Inquiry
  • POST/v1.0/emoney/bank-account-inquiry
  • 2. Balance Inquiry
  • POST/v1.0/balance-inquiry
  • 3. Transfer Bank
  • POST/v1.0/emoney/transfer-bank
  • 4. Check Status
  • POST/v1.0/qr/qr-mpm-status
  • 5. Unpaid Notification
  • POST/{merchantUrlUnpaidNotification}
  • 6. Refund Notification
  • POST/{merchantUrlRefundNotification}
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
400
Bad Request
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"
  }
}
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"
}
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"
}