NAV Navbar
Logodoku
Javascript PHP XML
  • Introduction
  • Getting Started
  • KIRIMDOKU API
  • API Response
  • List of Supported Banks
  • Version
  • Introduction

    KIRIMDOKU API supports two methods of transfer processing – namely, Bank Transfer and DOKU Wallet Transfer. See below for features of each service:

    1. Bank Transfer: Bank transfer service where transfer destination goes to the beneficiary bank account. With this service, a partner is required to validate the bank account through inquiry.

    2. DOKU Wallet Transfer: Wallet transfer service where transfer destination goes to the beneficiary DOKU wallet. With this service, a partner is required to validate the wallet account through inquiry.

    Getting Started

    To integrate, a merchant should have AGENTKEY. Please prepare a minimum of 3 email credentials to be registered on the KIRIMDOKU system. The main function of these 3 email addresses are:

    Process Flow

    Below is the process flow between KIRIMDOKU and partners that can be used to perform a certain action.

    KIRIMDOKU URL

    KIRIMDOKU has 2 separate environments for sandbox/staging and production, which are differentiate using different URL and key credentials. You can integrate and test with our staging environment before going live.

    Below are the URLs of KIRIMDOKU API:

    Staging/sandbox URL https://staging.doku.com/apikirimdoku

    Production URL https://kirimdoku.com/v2/api

    Shared Key Hash Value

    Sample Encryption Method in JAVA

    private static final String ALGORITHM = "AES";
    public static String encrypt(String valueToEnc, String encKey) throws Exception {
        Key key = new SecretKeySpec(encKey.getBytes(), ALGORITHM);
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encValue = c.doFinal(valueToEnc.getBytes());
        return new String(Base64.encodeBase64(encValue));
    }

    public static void main(String[] args) throws Exception {
        String concatenatedString = "A41418" + "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb";
        String encryptionKey = "627054fevj1sutvs";
        String signature = encrypt(concatenatedString, encryptionKey);
        System.out.println(signature);
    }

    Sample Encryption Method in PHP

     <?php 
        $agentKey = "A41418";
        $requestId = "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb";
        $plaintext = $agentKey . $requestId;
        $key ="627054fevj1sutvs";
        $cipher = "aes-128-ecb";
        if (in_array($cipher, openssl_get_cipher_methods()))
        {
            $ciphertext = openssl_encrypt($plaintext, $cipher, $key);
            echo $ciphertext;
            echo "<br/> ";
            $original_plaintext = openssl_decrypt($ciphertext, $cipher, $key);
            echo $original_plaintext;
        }
    ?>

    Sample Encryption Method in GOLANG

    package main

    import (
        "bytes"
        "crypto/aes"
        "crypto/cipher"
        "encoding/base64"
        "fmt"
    )

    func main() {
        src := "A41418e8a32355-e202-4bc7-8ae7-ad4e7316bbcb"
        key := "627054fevj1sutvs"
        crypted := AesEncrypt(src, key)
        AesDecrypt(crypted, []byte(key))
    }

    func AesDecrypt(crypted, key []byte) []byte {
        block, err := aes.NewCipher(key)
        if err != nil {
            fmt.Println("err is:", err)
        }
        blockMode := NewECBDecrypter(block)
        origData := make([]byte, len(crypted))
        blockMode.CryptBlocks(origData, crypted)
        origData = PKCS5UnPadding(origData)
        plain := string(origData)
        fmt.Println("plain:", plain)
        return origData
    }

    func AesEncrypt(src, key string) []byte {
        block, err := aes.NewCipher([]byte(key))
        if err != nil {
            fmt.Println("key error1", err)
        }
        if src == "" {
            fmt.Println("plain content empty")
        }
        ecb := NewECBEncrypter(block)
        content := []byte(src)
        content = PKCS5Padding(content, block.BlockSize())
        crypted := make([]byte, len(content))
        ecb.CryptBlocks(crypted, content)
        fmt.Println("encrypted:", base64.StdEncoding.EncodeToString(crypted))
        return crypted
    }

    func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
        padding := blockSize - len(ciphertext)%blockSize
        padtext := bytes.Repeat([]byte{byte(padding)}, padding)
        return append(ciphertext, padtext...)
    }

    func PKCS5UnPadding(origData []byte) []byte {
        length := len(origData)
        unpadding := int(origData[length-1])
        return origData[:(length - unpadding)]
    }

    type ecb struct {
        b cipher.Block
        blockSize int
    }

    func newECB(b cipher.Block) *ecb {
        return &ecb{
            b: b,
            blockSize: b.BlockSize(),
        }
    }

    type ecbEncrypter ecb

    func NewECBEncrypter(b cipher.Block) cipher.BlockMode {
        return (*ecbEncrypter)(newECB(b))
    }
    func (x *ecbEncrypter) BlockSize() int { return x.blockSize }
    func (x *ecbEncrypter) CryptBlocks(dst, src []byte) {
        if len(src)%x.blockSize != 0 {
            panic("crypto/cipher: input not full blocks")
        }
        if len(dst) < len(src) {
            panic("crypto/cipher: output smaller than input")
        }
        for len(src) > 0 {
            x.b.Encrypt(dst, src[:x.blockSize])
            src = src[x.blockSize:]
            dst = dst[x.blockSize:]
        }
    }

    type ecbDecrypter ecb

    func NewECBDecrypter(b cipher.Block) cipher.BlockMode {
        return (*ecbDecrypter)(newECB(b))
    }
    func (x *ecbDecrypter) BlockSize() int { return x.blockSize }
    func (x *ecbDecrypter) CryptBlocks(dst, src []byte) {
        if len(src)%x.blockSize != 0 {
            panic("crypto/cipher: input not full blocks")
        }
        if len(dst) < len(src) {
            panic("crypto/cipher: output smaller than input")
        }
        for len(src) > 0 {
            x.b.Decrypt(dst, src[:x.blockSize])
            src = src[x.blockSize:]
            dst = dst[x.blockSize:]
        }
    }

    To secure the communication, DOKU implements Shared Key Hash Value - an additional parameter from Merchant or DOKU, called SIGNATURE. This parameter value is hashed using AES hash method with combination of ENCRYPTIONKEY. The hashed SIGNATURE generated by partner will be validated with hashed SIGNATURE generated by DOKU System and vice versa. If match, then it will be considered genuine request or response.

    You can access KIRIMDOKU API staging by using these keys:

    Below is the sample code to generate signature:

    Step - 1

    Combine your agentKey and requestId to generate a raw string. Example:

    String concatenatedString = "A41418" + "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb"

    concatednatedString will result in "A41418e8a32355-e202-4bc7-8ae7-ad4e7316bbcb"

    Step - 2

    An example of JAVA implementation to generate SIGNATURE is shown as below:

    private static final String ALGORITHM = "AES";
    public static String encrypt(String valueToEnc, String encKey) throws Exception {
        Key key = new SecretKeySpec(encKey.getBytes(), ALGORITHM);
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encValue = c.doFinal(valueToEnc.getBytes());
        return new String(Base64.encodeBase64(encValue));
    }

    Step - 3

    Use concatenatedString with the 16 char ENCRYPTIONKEY given by KIRIMDOKU system to generate SIGNATURE content. An example of JAVA implementation is shown as below:

    String concatenatedString = "A41418" + "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb";
    String encryptionKey = "627054fevj1sutvs";
    String signature = encrypt(concatenatedString, encryptionKey);
    // signature value shoud be:
    // HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0

    KIRIMDOKU API

    This API reference is organized by KIRIMDOKU team. Any changes or updates will be notified by authorized personnel from DOKU to partners.

    PING

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/ping \
    -H 'Content-Type: application/json' \
    -d '{
      "agentKey": "A41418",
      "requestId": "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb",
      "signature": "HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0"
    }'
    Endpoint Method Definition
    /ping HTTP POST Check connection availibility to API KIRIMDOKU

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json

    Success Response Example

    {
      "status" : 0,
      "message" : "Ok"
    }

    Failed Response Example

    {
      "status" : 9,
      "message" : "Unathorized access"
    }

    REQUEST BODY

    Name Type Mandatory Description
    agentKey String Mandatory Given AGENTKEY
    requestId String Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature String Mandatory Refer to Shared Key Hash Value section.

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Ok)

    Check Balance

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/checkbalance \
    -H 'Content-Type: application/json' \
    -d '{
      "agentKey": "A41418",
      "requestId": "e8a32355-e202-4bc7-8ae7-ad4e7316bbcb",
      "signature": "HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0"
    }'
    Endpoint Method Definition
    /checkbalance HTTP POST To check partner last deposit balance

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json

    Success Response Example

    {
      "status": 0,
      "message": "Check balance success",
      "balance": {
        "corporateName": "ABC Corp (TEST)",
        "creditLimit": 0.000000,
        "creditAlertLimit": 0.000000,
        "creditLastBalance": 9999696393837.600000
      }
    }

    Failed Response Example

    {
      "status" : 9,
      "message" : "Unathorized access"
    }

    REQUEST BODY

    Name Type Mandatory Description
    agentKey String Mandatory Given AGENTKEY
    requestId String Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature String Mandatory Refer to Shared Key Hash Value section.

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Check balance success)
    balance Object Refer to Balance Object section.

    Inquiry Bank Transfer

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/cashin/inquiry \
    -H 'Content-Type: application/json' \
    -H 'agentKey: A41418' \
    -H 'requestId: e8a32355-e202-4bc7-8ae7-ad4e7316bbcb' \
    -H 'signature: HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0' \
    -d '{
      "channel": {
        "code": "07"
      },
      "beneficiaryAccount": {
        "bank": {
          "code": "CENAIDJA",
          "countryCode": "ID",
          "id": "014",
          "name": "BANK BCA"
        },
        "city": "Jakarta",
        "name": "FHILEA HERMANUS",
        "number": "0803944123"
      },
      "beneficiaryCountry": {
        "code": "ID"
      },
      "beneficiaryCurrency": {
        "code": "IDR"
      },
      "senderCountry": {
        "code": "ID"
      },
      "senderCurrency": {
        "code": "IDR"
      },
      "senderAmount": 10000
    }'

    Success Response Example

    {
      "status": 0,
      "message": "Transfer Inquiry Approve",
      "inquiry": {
        "idToken": "I040781880663070",
        "senderCountry": {
          "code": "ID",
          "name": "Indonesia",
          "currency": {
            "code": "IDR"
          }
        },
        "senderCurrency": {
          "code": "IDR"
        },
        "beneficiaryCountry": {
          "code": "ID",
          "name": "Indonesia",
          "currency": {
            "code": "IDR"
          }
        },
        "beneficiaryCurrency": {
          "code": "IDR"
        },
        "channel": {
          "code": "07",
          "name": "Bank Deposit"
        },
        "forexReference": {
          "id": 2402,
          "forex": {
            "origin": {
              "code": "IDR"
            },
            "destination": {
              "code": "IDR"
            }
          },
          "rate" : 1.0,
          "createdTime" : 1614219703986
        },
        "fund" : {
          "origin" : {
            "amount" : 10000.000000,
            "currency" : "IDR"
          },
          "fees": {
            "total": 3000.000000,
            "currency": "IDR",
            "components": [
              {
                "description": "Default Fee",
                "amount": 3000.000000
              }
            ],
            "additionalFee": 0.000000,
            "fixedFee": 0.000000
          },
          "destination": {
            "amount": 10000.00,
            "currency": "IDR"
          }
        },
        "beneficiaryAccount": {
          "id": null
          "bank": {
            "id": "014",
            "code": "CENAIDJA",
            "name": "Bank Central Asia BCA",
            "city": "Jakarta",
            "countryCode": "ID",
            "groupBank": "Bank Central Asia BCA",
            "province": "Jakarta"
          },
          "number": "0803944123",
          "name": "FHILEA HERMANUS",
          "city": "Jakarta,"
          "address": "null"
        }
      }
    }
    Endpoint Method Definition
    /cashin/inquiry HTTP POST Get beneficiary account information details

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json
    agentKey Mandatory Given AGENTKEY
    requestId Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature Mandatory Refer to Shared Key Hash Value section.

    REQUEST BODY

    Name Type Mandatory Description
    channel Object Mandatory Refer to Channel Object section.
    beneficiaryAccount Object Mandatory Refer to Beneficiary Account Object section.
    beneficiaryCountry Object Mandatory Refer to Beneficiary Country Object section.
    beneficiaryCurrency Object Mandatory Refer to Beneficiary Currency Object section.
    senderCountry Object Mandatory Refer to Sender Country Object section.
    senderCurrency Object Mandatory Refer to Sender Currency Object section.
    senderAmount Numeric Mandatory Minimum IDR 10.000, Maximum IDR 25.000.000

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Transfer Inquiry Approve)
    inquiry Object Refer to Inquiry Object section.

    Inquiry DOKU Wallet

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/cashin/inquiry \
    -H 'Content-Type: application/json' \
    -H 'agentKey: A41418' \
    -H 'requestId: e8a32355-e202-4bc7-8ae7-ad4e7316bbcb' \
    -H 'signature: HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0' \
    -d '{
      "channel": {
        "code": "04"
      },
      "beneficiaryAccount": {
        "city": "Jakarta",
        "name": "FHILEA HERMANUS"
      },
      "beneficiaryWalletId": "lea@doku.com",
      "beneficiaryCountry": {
        "code": "ID"
      },
      "beneficiaryCurrency": {
        "code": "IDR"
      },
      "senderCountry": {
        "code": "ID"
      },
      "senderCurrency": {
        "code": "IDR"
      },
      "senderAmount": 10000
    }'

    Success Response Example

    {
      "status": 0,
      "message": "Inquiry succeed",
      "inquiry": {
        "idToken": "I01613251428268",
        "senderCountry": {
          "code": "ID",
          "name": "Indonesia",
          "currency": {
            "code": "IDR"
          }
        },
        "senderCurrency": {
          "code": "IDR"
        },
        "beneficiaryCountry": {
          "code": "ID",
          "name": "Indonesia",
          "currency": {
            "code": "IDR"
          }
        },
        "beneficiaryCurrency": {
          "code": "IDR"
        },
        "channel": {
          "code": "04",
          "name": "Cash To Wallet"
        },
        "forexReference": {
          "id": 2402,
          "forex": {
            "origin": {
              "code": "IDR"
            },
            "destination": {
              "code": "IDR"
            }
          },
          "rate" : 1.0,
          "createdTime" : 1614219703986
        },
        "fund" : {
          "origin" : {
            "amount" : 10000.000000,
            "currency" : "IDR"
          },
          "fees": {
            "total": 1000.000000,
            "currency": "IDR",
            "components": [
              {
                "description": "Default Fee",
                "amount": 1000.000000
              }
            ],
            "additionalFee": 0.000000,
            "fixedFee": 0.000000
          },
          "destination": {
            "amount": 10000.000000,
            "currency": "IDR"
          }
        },
        "beneficiaryWalletId": "lea@doku.com",
        "beneficiaryWalletName": "FHILEA HERMANUS"
      }
    }
    Endpoint Method Definition
    /cashin/inquiry HTTP POST Get beneficiary account information details

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json
    agentKey Mandatory Given AGENTKEY
    requestId Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature Mandatory Refer to Shared Key Hash Value section.

    REQUEST BODY

    Name Type Mandatory Description
    channel Object Mandatory Refer to Channel Object section.
    beneficiaryAccount Object Mandatory Refer to Beneficiary Account Object section.
    beneficiaryWalletId String Mandatory Beneficiary DOKU Wallet ID
    e.g: lea@doku.com
    beneficiaryCountry Object Mandatory Refer to Beneficiary Country Object section.
    beneficiaryCurrency Object Mandatory Refer to Beneficiary Currency Object section.
    senderCountry Object Mandatory Refer to Sender Country Object section.
    senderCurrency Object Mandatory Refer to Sender Currency Object section.
    senderAmount Numeric Mandatory Minimum IDR 10.000, Maximum IDR 10.000.000 *

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Inquiry succeed)
    inquiry Object Refer to Inquiry Object section.

    Remit Bank Transfer

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/cashin/remit \
    -H 'Content-Type: application/json' \
    -H 'agentKey: A41418' \
    -H 'requestId: e8a32355-e202-4bc7-8ae7-ad4e7316bbcb' \
    -H 'signature: HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0' \
    -d '{
      "channel": {
        "code": "07"
      },
      "inquiry": {
        "idToken": "I01429544261270"
      },
      "beneficiary": {
        "country": {
          "code": "ID"
        },
        "firstName": "FHILEA",
        "lastName": "HERMANUS",
        "phoneNumber": "628156056051"
      },
      "beneficiaryCity": "Jakarta",
      "beneficiaryCountry": {
        "code": "ID"
      },
      "beneficiaryAccount": {
        "bank": {
          "id": "014",
          "code": "CENAIDJA",
          "name": "BANK BCA",
          "countryCode": "ID"
        },
        "city": "Jakarta",
        "name": "FHILEA HERMANUS",
        "number": "0803944123"
      },
      "beneficiaryCurrency": {
        "code": "IDR"
      },
      "sender": {
        "country": {
          "code": "ID"
        },
        "firstName": "FHILEA",
        "lastName": "HERMANUS",
        "phoneNumber": "628156056051",
        "birthDate": "1900-01-01",
        "personalId": "01234567890",
        "personalIdType": "KTP",
        "personalIdCountry": {
          "code": "ID"
        }
      },
      "senderCountry": {
        "code": "ID"
      },
      "senderCurrency": {
        "code": "IDR"
      },
      "senderAmount": 10000,
      "sendTrxId": "remit-20191007-001"
    }'

    Success Response Example

    {
      "status": 0,
      "message": "Remit accepted",
      "remit": {
        "paymentData": {
          "mallId": "2",
          "chainMallId": null,
          "accountNumber": "00",
          "accountName": "ABC Corp (TEST)",
          "channelCode": "07",
          "inquiryId": "I01429544261270",
          "currency": "IDR",
          "amount": "10000.00",
          "trxCode": "bc629bff-0cc9-45d3-8fa8-f27341ca8228",
          "hostRefNumber": null,
          "issuerName": null,
          "responseCode": "00",
          "responseMsg": "Transfer Approve",
          "paymentSystrace": null
        },
        "transactionId": "DK0856068",
        "transactionStatus": 50
      }
    }
    Endpoint Method Definition
    /cashin/remit HTTP POST Execute transfer to the beneficiary

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json
    agentKey Mandatory Given AGENTKEY
    requestId Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature Mandatory Refer to Shared Key Hash Value section.

    REQUEST BODY

    Name Type Mandatory Description
    channel Object Mandatory Refer to Channel Object section.
    inquiry Object Mandatory Refer to Inquiry Object section.
    beneficiary Object Mandatory Refer to Beneficiary Object section.
    beneficiaryCity String Mandatory Beneficiary city location.
    e.g: Jakarta
    beneficiaryCountry Object Mandatory Refer to Country Object section.
    beneficiaryAccount Object Mandatory Refer to Beneficiary Account Object section.
    beneficiaryCurrency Object Mandatory Refer to Currency Object section.
    sender Object Mandatory Refer to Sender Object section.
    senderCountry Object Mandatory Refer to Country Object section.
    senderCurrency Object Mandatory Refer to Currency Object section.
    senderAmount Numeric Mandatory Minimum IDR 10.000, Maximum IDR 25.000.000
    sendTrxId String Not Mandatory Transaction ID from merchant side.
    senderNote String Not Mandatory Note or information from sender.

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Remit accepted)
    remit Object Refer to Remit Object section.

    Remit DOKU Wallet

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/cashin/remit \
    -H 'Content-Type: application/json' \
    -H 'agentKey: A41418' \
    -H 'requestId: e8a32355-e202-4bc7-8ae7-ad4e7316bbcb' \
    -H 'signature: HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0' \
    -d '{
      "channel": {
        "code": "04"
      },
      "inquiry": {
        "idToken": "I01613251428268"
      },
      "beneficiary": {
        "country": {
          "code": "ID"
        },
        "firstName": "FHILEA",
        "lastName": "HERMANUS",
        "phoneNumber": "628156056051"
      },
      "beneficiaryCity": "Jakarta",
      "beneficiaryCountry": {
        "code": "ID"
      },
      "beneficiaryAccount": {
        "city": "Jakarta",
        "name": "FHILEA HERMANUS"
      },
      "beneficiaryWalletId": "lea@doku.com",
      "beneficiaryCurrency": {
        "code": "IDR"
      },
      "sender": {
        "country": {
          "code": "ID"
        },
        "firstName": "FHILEA",
        "lastName": "HERMANUS",
        "phoneNumber": "628156056051",
        "birthDate": "1900-01-01",
        "personalId": "01234567890",
        "personalIdType": "KTP",
        "personalIdCountry": {
          "code": "ID"
        }
      },
      "senderCountry": {
        "code": "ID"
      },
      "senderCurrency": {
        "code": "IDR"
      },
      "senderAmount": 10000,
      "sendTrxId": "remit-20191007-002"
    }'

    Success Response Example


      "status": 0, 
      "message": "Remit accepted", 
      "remit": { 
        "transactionId": "DK0857458", 
        "transactionStatus": 50 
      } 
    }
    Endpoint Method Definition
    /cashin/remit HTTP POST Execute transfer to the beneficiary

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json
    agentKey Mandatory Given AGENTKEY
    requestId Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature Mandatory Refer to Shared Key Hash Value section.

    REQUEST BODY

    Name Type Mandatory Description
    channel Object Mandatory Refer to Channel Object section.
    inquiry Object Mandatory Refer to Inquiry Object section.
    beneficiary Object Mandatory Refer to Beneficiary Object section.
    beneficiaryCity String Mandatory Beneficiary city location.
    e.g: Jakarta
    beneficiaryCountry Object Mandatory Refer to Country Object section.
    beneficiaryAccount Object Mandatory Refer to Beneficiary Account Object section.
    beneficiaryWalletId String Mandatory Beneficiary DOKU Wallet ID
    e.g: lea@doku.com
    beneficiaryCurrency Object Mandatory Refer to Currency Object section.
    sender Object Mandatory Refer to Sender Object section.
    senderCountry Object Mandatory Refer to Country Object section.
    senderCurrency Object Mandatory Refer to Currency Object section.
    senderAmount Numeric Mandatory Minimum IDR 10.000, Maximum IDR 10.000.000 *
    sendTrxId String Not Mandatory Transaction ID from merchant side.
    senderNote String Not Mandatory Note or information from sender.

    RESPONSE BODY

    Name Type Description
    status Integer Response status (Success: 0)
    message String Response message (Success: Remit accepted)
    remit Object Refer to Remit Object section.

    Transaction Info

    Request Example

    curl -X POST \
    https://staging.doku.com/apikirimdoku/transaction/info \
    -H 'Content-Type: application/json' \
    -H 'agentKey: A41418' \
    -H 'requestId: e8a32355-e202-4bc7-8ae7-ad4e7316bbcb' \
    -H 'signature: HL8PGPqGBaTOgdbZio9r1oJqT7GgNpwPU6vKZxHAmQBSEiCYuClafD2AzsNtvPP0' \
    -d '{
      "transactionId": "DK0856068"
    }'

    Success Response Example

    {
      "transaction": {
        "id": "DK0856068",
        "inquiryId": "I01429544261270",
        "sendTrxId": "b062e358-8a8d-498d-90c2-1bed87c8dea3",
        "status": 50,
        "createdTime": 1569234448061,
        "cashInTime": "2019-09-23 17:27:28",
        "agent": {
          "code": "A41418",
          "country": {
            "code": "ID",
            "name": "Indonesia",
            "currency": {
              "code": "IDR"
            }
          },
          "user": {
            "username": "oabc",
            "name": "o abc"
          }
        },
        "channel": {
          "code": "07",
          "name": "Bank Deposit"
        },
        "sender": {
          "id": "CID0154734",
          "firstName": "FHILEA",
          "lastName": "HERMANUS",
          "personalIdType": "KTP",
          "personalId": "01234567890",
          "birthDate": "1900-01-01",
          "phoneNumber": "628156056051",
          "gender": "NULL",
          "country": {
            "code": "ID",
            "name": "Indonesia",
            "currency": {
              "code": "IDR"
            }
          },
          "cityName": null,
          "address": null,
          "postalCode": null,
          "email": null
        },
        "beneficiary": {
          "id": "CID0154735",
          "firstName": "FHILEA",
          "lastName": "HERMANUS",
          "personalIdType": null,
          "personalId": null,
          "phoneNumber": "628156056051",
          "gender": "NULL",
          "country": {
            "code": "ID",
            "name": "Indonesia",
            "currency": {
              "code": "IDR"
            }
          },
          "cityName": null,
          "address": null,
          "postalCode": null,
          "email": null
        },
        "fund": {
          "origin": {
            "country": {
              "code": "ID",
              "name": "Indonesia",
              "currency": {
                "code": "IDR"
              }
            },
            "currency": "IDR",
            "amount": 10000.000000
          },
          "destination": {
            "country": {
              "code": "ID",
              "name": "Indonesia",
              "currency": {
                "code": "IDR"
              }
            },
            "currency": "IDR",
            "amount": 10000.000000
          },
          "fees": {
            "total": 6500.000000,
            "fixedFee": 0.000000,
            "additionalFee": 0.000000,
            "currency": "IDR",
            "components": [
              {
                "description": "Default Fee",
                "amount": 6500.000000
              }
            ]
          }
        },
        "transactionlog": {
          "status": 0,
          "statusMessage": "Processed",
          "referenceStatus": "00",
          "referenceMessage": "Transfer Approve",
          "channelCode": "07"
        }
      },
      "status": 0,
      "message": "Transaction info success"
    }
    Endpoint Method Definition
    /transaction/info HTTP POST Get transaction status or information

    REQUEST HEADER

    Name Mandatory Value
    Content-Type Mandatory application/json
    agentKey Mandatory Given AGENTKEY
    requestId Mandatory A unique request identifier.
    It is advisable to use UUID format.
    signature Mandatory Refer to Shared Key Hash Value section.

    REQUEST BODY

    Name Type Mandatory Description
    transactionId String Mandatory Transaction Id can be filled with Inquiry idToken, Remit transactionId or Remit sendTrxId value.

    RESPONSE BODY

    Name Type Description
    transaction Object Use transaction.status value to determine whether beneficiary receiving the funds or not.
    (Success: 50, Possible transaction status)
    Refer to Transaction Object section
    status Integer Response status (Success: 0)
    message String Response message (Success: Transaction info success)

    Request Objects

    CHANNEL OBJECT

    Name Type Mandatory Description
    code String Mandatory Use 07 for Bank Transfer, and 04 for DOKU Wallet Transfer

    BENEFICIARY ACCOUNT OBJECT

    Name Type Mandatory Description
    bank Object Mandatory Refer to Bank Object section.
    (Bank Transfer requests only)
    address String Not Mandatory Beneficiary account address
    city String Mandatory Beneficiary account city
    name String Mandatory Beneficiary account name
    number String Mandatory Beneficiary account number
    (Bank Transfer requests only)

    BANK OBJECT

    Name Type Mandatory Description
    code String Mandatory Bank Swift code. (List of Supported Banks)
    countryCode String Mandatory Bank country code. (Use ID for Indonesia)
    id String Mandatory Indonesian Bank code. (List of Supported Banks)
    name String Mandatory Bank name. (List of Supported Banks)

    COUNTRY OBJECT

    Name Type Mandatory Description
    code String Mandatory Use ID for Indonesia

    CURRENCY OBJECT

    Name Type Mandatory Description
    code String Mandatory Use IDR for Indonesian Rupiah

    INQUIRY OBJECT

    Name Type Mandatory Description
    idToken String Mandatory Inquiry idToken from last Inquiry API.

    BENEFICIARY OBJECT

    Name Type Mandatory Description
    country Object Mandatory Refer to Country Object section.
    firstName String Mandatory Beneficiary first name.
    lastName String Mandatory Beneficiary last name.
    phoneNumber String Mandatory Beneficiary phone number.

    SENDER OBJECT

    Name Type Mandatory Description
    country Object Mandatory Refer to Country Object section.
    firstName String Mandatory Sender first name.
    lastName String Mandatory Sender last name.
    phoneNumber String Mandatory Sender phone number.
    birthDate String Mandatory Sender birth date. In YYYY-MM-DD format.
    personalId String Mandatory Sender personal (national) id number.
    personalIdType String Mandatory Sender personal (national) id type. Example :KTP, PASSPORT
    personalIdCountry Object Mandatory Country code of publisher of sender's personal ID.
    Refer to Country Object section.

    Response Objects

    BALANCE OBJECT

    Name Type Description
    corporateName String Partner's corporate name
    creditLimit Decimal The remaining balance a partner can hold. If partner's last deposit balance is below this amount, then the remaining last deposit balance cannot be used for transactions.
    creditAlertLimit Decimal To give email alert to partners when the amount of money in partner's last deposit balance reaching or below this amount.
    creditLastBalance Decimal Partner's last deposit balance

    INQUIRY OBJECT

    Name Type Description
    idToken String Id from the last inquiry.
    Please save this id to be used in Remit API.
    senderCountry Object Refer to Country Object section.
    senderCurrency Object Refer to Currency Object section.
    beneficiaryCountry Object Refer to Country Object section.
    beneficiaryCurrency Object Refer to Currency Object section.
    channel Object Refer to Channel Object section.
    forexReference Object Refer to Forex Reference Object section.
    fund Object Refer to Fund Object section.
    beneficiaryAccount Object Refer to Beneficiary Account Object section.
    (Bank Transfer responses only)
    beneficiaryWalletId String Beneficiary wallet ID information.
    (DOKU Wallet responses only)
    beneficiaryWalletName String Beneficiary wallet name information.
    (DOKU Wallet responses only)

    COUNTRY OBJECT

    Name Type Description
    code String Country code. Example: ID
    name String Country name. Example: Indonesia
    currency Object Refer to Currency Object section.

    CURRENCY OBJECT

    Name Type Description
    code String Currency code. Example: IDR

    CHANNEL OBJECT

    Name Type Description
    code String Channel code. Example: 07 or 04
    name String Channel name. Example: Bank Deposit or Cash To Wallet

    BENEFICIARY ACCOUNT OBJECT

    Name Type Description
    id Integer Beneficiary bank account id.
    Filled after remit is success.
    bank Object Beneficiary bank information.
    Refer to Bank Object section.
    number String Beneficiary account number information.
    name String Beneficiary account name information.
    city String Beneficiary account city information.
    address String Beneficiary account address information.

    BANK OBJECT

    Name Type Description
    id String Bank id information. Example: 014
    code String Bank code information. Example: CENAIDJA
    name String Bank name information. Example: BANK BCA
    city String City of the bank. Example: Jakarta
    countryCode String Bank country code information. Example: ID
    groupBank String Group bank information
    province String Province of the bank

    REMIT OBJECT

    Name Type Description
    paymentData Object Refer to Payment Data Object section.
    (Bank Transfer responses only)
    transactionId String Remit transaction ID.
    Please save this id as the transaction reference.
    transactionStatus String Remit transaction status.
    Use this status to determine whether beneficiary receiving the funds or not.
    (Success: 50, Possible transaction status)

    PAYMENT DATA OBJECT

    Name Type Description
    mallId String -
    chainMallId String -
    accountNumber String -
    accountName String Corporate name information.
    channelCode String Channel code. Example: 07 or 04
    inquiryId String Inquiry idToken used in Remit API.
    currency String Currency information. Example: IDR
    amount String Amount sent to beneficiary.
    trxCode String -
    hostRefNumber String -
    issuerName String -
    responseCode String -
    responseMsg String -
    paymentSystrace String -

    FOREX REFERENCE OBJECT

    Name Type Description
    id Integer Forex reference ID
    forex Object Refer to Forex Object section.
    rate Decimal Exchange rate from origin currency to destination currency
    createdTime Timestamp Forex creation time

    FOREX OBJECT

    Name Type Description
    origin Object Origin currency code.
    Refer to Currency Object section.
    destination Object Destination currency code.
    Refer to Currency Object section.

    FUND OBJECT

    Name Type Description
    origin Object Source amount.
    Refer to Amount Object section.
    fees Object Refer to Fees Object section.
    destination Object Destination amount.
    Refer to Amount Object section.

    AMOUNT OBJECT

    Name Type Description
    amount Decimal Amount of money
    currency String Currency code

    FEES OBJECT

    Name Type Description
    total Decimal Amount of fee charged to partner's deposit (default fee).
    currency String Default fee's currency (follows the origin currency).
    components Object Componets of default fee.
    Refer to Fees Component Object section.
    additionalFee Decimal Fee charged to the beneficiary, deducted from the amount received (currency follows the destination currency)
    fixedFee Decimal Fee for account validation(currency follows the destination currency)

    FEES COMPONENT OBJECT

    Name Type Description
    description String Default fee
    amount Decimal Amount of default fee

    TRANSACTION OBJECT

    Name Type Description
    id String Remit transaction ID.
    inquiryId String Inquiry idToken from the last Inquiry API.
    sendTrxId String Transaction ID from merchant's side.
    status String Remit transaction status.
    Use this status to determine whether beneficiary receiving the funds or not.
    (Success: 50, Possible transaction status)
    createdTime Timestamp Payment creation time (in epoch time format)
    cashInTime Timestamp Payment time YYYY-mm-DD HH:MM:SS
    senderNote String Note or information from sender.
    agent Object Refer to Agent Object section
    channel Object Refer to Channel Object section
    sender Object Refer to Sender Object section
    beneficiary Object Refer to Beneficiary Object section
    fund Object Refer to Fund (Transaction Info) Object section
    transactionLog Object Refer to Transaction Log Object section

    AGENT OBJECT

    Name Type Description
    code String Agent's code
    country Object Agent's country
    Refer to Country Object section
    user Object Agent's name and user name
    Refer to User Object section

    USER OBJECT

    Name Type Description
    username String Agent's username
    name String Agent's name

    SENDER OBJECT

    Name Type Description
    id String Sender id
    firstName String Sender first name.
    lastName String Sender last name.
    personalIdType String Sender personal (national) id type. Example: KTP, PASSPORT
    personalId String Sender personal (national) id number
    birthDate String Sender birth date. In YYYY-MM-DD format
    phoneNumber String Sender phone number
    gender String Gender of the sender
    country Object Sender country. Refer to Country Object section
    cityName String Sender city name
    address String Sender address
    postalCode String Sender postal code
    email String Sender email

    BENEFICIARY OBJECT

    Name Type Description
    id String Beneficiary id
    firstName String Beneficiary first name
    lastName String Beneficiary last name
    personalIdType String Beneficiary personal (national) id type. Example: KTP, PASSPORT
    personalId String Beneficiary personal (national) id number
    phoneNumber String Beneficiary phone number
    gender String Gender of the beneficiary
    country Object Beneficiary country. Refer to Country Object section
    cityName String Beneficiary city name
    address String Beneficiary address
    postalCode String Beneficiary postal code
    email String Beneficiary email

    FUND (TRANSACTION INFO) OBJECT

    Name Type Description
    origin Object Source amount.
    Refer to Amount (Transaction Info) Object section
    destination Object Destination amount.
    Refer to Amount (Transaction Info) Object section
    fees Object Refer to Fees Object section

    AMOUNT (TRANSACTION INFO) OBJECT

    Name Type Description
    country Object Refer to Country Object section
    currency String Currency code
    amount Decimal Amount of money

    TRANSACTION LOG OBJECT

    Name Type Description
    status String Remit status code
    statusMessage String Remit status message
    referenceStatus String Response code from the bank/issuer
    referenceMessage String Response message from the bank/issuer
    channelCode String Channel code. Example: 07 or 04

    API Response

    Response Status

    Status Description Possible Reason
    -1 Internal Error Internal engine error/Temporary unavailable/Unreachable access gateway.
    0 Success Indicate API Call is performed successfully.
    1 Failed Indicate API Call is performed unsuccessfully. (Example: Inquiry is failed due to account not found or other reason.)
    9 Unathorized access Request header parameters is incorrect/missing.
    11 Invalid parameters Request body parameters is incorrect/missing.
    E.g: Sender country is not valid.
    13 Duplicate sendTrxId Reference The value of sendTrxId must be unique
    16 Missing configuration Merchant is not properly configured.
    E.g: Fee for channel bank deposit has not been set.
    29 Rejected Transaction with high risk. Caused by several reasons:
    1. Multiple transfers to the same beneficiary within last 60 seconds.
    2. Multiple transfers to the same beneficiary up to IDR 500 million/day or 50 times/day.
    3. Multiple transfers to the same beneficiary up to IDR 1 billion/month or 200 times/month.
    55 Timeout Internal connection timeout.
    91 Inactive Merchant inactive.
    95 Corporate credit limit has exceeded Caused by a transaction where partner last deposit balance reaching or below credit alert limit.
    97 Account is Invalid Caused by beneficiary account number has failed inquiry 4 times in the past 2 hours.
    98 Rejected Caused by beneficiary account number has been rejected in the last 2 hours.
    99 Invalid Json Invalid Json format.
    99 Expired Inquiry Token Inquiry token is expired after 30 days.

    Transaction Status

    Status Description
    0 Transaction status is unknown.
    20 Timeout (pending) transaction. Status will be changed after reconciliation (T+1 working days). Labeled with UNPAID in the dashboard.
    Do not treat transaction with this status as success or failed.
    35 Transfer failed to be processed. Labeled with FAILED in the dashboard.
    Treat transaction with this status as failed.
    40 Transaction has been refunded.
    50 Transaction is sucessfully processed. Labeled with PAID in the dashboard.
    Treat transaction with this status as success.
    65 Transaction is on process to change from pending to either success or failed. Labeled with PENDING PROCESS in the dashboard.
    Do not treat transaction with this status as success or failed.

    List of Supported Banks

    KIRIMDOKU API supports transfer to over 100 Banks in Indonesia. Please refer to below information regarding Bank details:

    No Bank Name Code SWIFT Code
    1 BANK BRI 002 BRINIDJA
    2 BANK MANDIRI 008 BMRIIDJA
    3 BANK NEGARA INDONESIA (BNI 46) 009 BNINIDJA
    4 BANK DANAMON 011 BDINIDJA
    5 BANK PERMATA 013 BBBAIDJA
    6 BANK BCA 014 CENAIDJA
    7 BANK BII MAYBANK 016 IBBKIDJA
    8 BANK PANIN 019 PINBIDJA
    9 BANK CIMB NIAGA/BANK CIMB NIAGA SYARIAH 022 BNIAIDJA
    10 BANK UOB BUANA INDONESIA 023 BBIJIDJA
    11 BANK OCBC NISP 028 NISPIDJA
    12 CITIBANK 031 CITIIDJX
    13 BANK OF AMERICA 033 BOFAID2X
    14 BANK CCB INDONESIA 036 BWKIIDJA
    15 BANK ARTHA GRAHA 037 ARTGIDJA
    16 BANGKOK BANK LTD 040 BKKBIDJA
    17 THE BANK OF TOKYO MITSUBISHI UFJ LTD 042 BOTKIDJX
    18 BANK DBS INDONESIA 046 DBSBIDJA
    19 BANK RESONA PERDANIA 047 BPIAIDJA
    20 BANK MIZUHO INDONESIA 048 MHCCIDJA
    21 STANDARD CHARTERED BANK 050 SCBLIDJX
    22 BANK CAPITAL INDONESIA 054 BCIAIDJA
    23 BANK BNP PARIBAS 057 BNPAIDJA
    24 BANK ANZ INDONESIA 061 ANZBIDJX
    25 BANK OF CHINA LIMITED 069 BKCHIDJA
    26 BANK BUMI ARTA 076 BBAIIDJA
    27 BANK HSBC INDONESIA 087 HSBCIDJA
    28 BANK RABOBANK 089 RABOIDJA
    29 BANK MUTIARA 095 CICTIDJA
    30 BANK MAYAPADA INTERNATIONAL 097 MAYAIDJA
    31 BANK BJB 110 PDJBIDJA
    32 BPD DKI JAKARTA 111 BDKIIDJ1
    33 BPD DIY 112 PDYKIDJ1
    34 BPD JAWA TENGAH 113 PDJGIDJ1
    35 BANK JATIM 114 PDJTIDJ1
    36 BPD JAMBI 115 PDJMIDJ1
    37 BPD ACEH 116 PDACIDJ1
    38 BPD SUMATERA UTARA 117 PDSUIDJ1
    39 BPD SUMATERA BARAT/BANK NAGARI 118 PDSBIDSP
    40 BPD RIAU 119 PDRIIDJ1
    41 BPD SUMATERA SELATAN 120 BSSPIDSP
    42 BPD LAMPUNG 121 PDLPIDJ1
    43 BPD KALSEL 122 PDKSIDJ1
    44 BPD KALIMANTAN BARAT 123 PDKBIDJ1
    45 BPD KALTIM 124 PDKTIDJA
    46 BPD KALTENG 125 PDKGIDJ1
    47 BPD SULSEL 126 PDWSIDJ1
    48 BANK SULUTGO 127 PDWUIDJ1
    49 BPD NTB 128 PDNBIDJ1
    50 BPD BALI 129 PDBAIDJ1
    51 BANK NTT 130 PDNTIDJ1
    52 BANK MALUKU 131 PDMLIDJ1
    53 BPD PAPUA 132 PDIJIDJ1
    54 BPD BENGKULU 133 PDBKIDJ1
    55 BPD SULAWESI TENGAH 134 PDWGIDJ1
    56 BPD SULAWESI TENGGARA 135 PDWRIDJ1
    57 BANK BNP (BANK NUSANTARA PARAHYANGAN) 145 NUPAIDJ6
    58 BANK OF INDIA INDONESIA 146 BKIDIDJA
    59 BANK MUAMALAT 147 MUABIDJA
    60 BANK MESTIKA DHARMA 151 MEDHIDS1
    61 BANK METRO EXPRESS/BANK SHINHAN INDONESIA 152 MEEKIDJ1
    62 BANK SINARMAS 153 SBJKIDJA
    63 BANK MASPION INDONESIA 157 MASDIDJ5
    64 BANK GANESHA 161 GNESIDJA
    65 BANK ICBC 164 ICBKIDJA
    66 BANK QNB KESAWAN 167 AWANIDJA
    67 BANK TABUNGAN NEGARA (BTN) 200 BTANIDJA
    68 BANK SAUDARA (BANK WOORI SAUDARA) 212 BSDRIDJA
    69 BANK TABUNGAN PENSIUNAN NASIONAL (BTPN) 213 SUNIIDJA
    70 BANK VICTORIA SYARIAH 405 SWAGIDJ1
    71 BSI-BRIS (BANK BRI SYARIAH) 451 DJARIDJ1
    72 BANK BJB SYARIAH 425 SYJBIDJ1
    73 BANK MEGA 426 MEGAIDJA
    74 BSI-BNIS (BANK BNI SYARIAH) 427 SYNIIDJ1
    75 BANK KB BUKOPIN 441 BBUKIDJA
    76 BSI-BSM (BANK SYARIAH MANDIRI) 451 BSMDIDJA
    77 BANK JASA JAKARTA 472 JSABIDJ1
    78 BANK HANA 484 HNBNIDJA
    79 BANK MNC INTERNASIONAL 485 BUMIIDJA
    80 BANK NEO COMMERCE 490 YUDBIDJ1
    81 BANK MITRA NIAGA 491 MGABIDJ1
    82 BANK AGRO NIAGA 494 AGTBIDJA
    83 BANK SBI INDONESIA 498 IDMOIDJ1
    84 BANK BCA DIGITAL 501 ROYBIDJ1
    85 BANK NATIONAL NOBU 503 LFIBIDJ1
    86 BANK SYARIAH MEGA 506 BUTGIDJ1
    87 BANK INA PERDANA 513 INPBIDJ1
    88 BANK PANIN DUBAI SYARIAH 517 PNBSIDJA
    89 BANK PRIMA MASTER 520 PMASIDJ1
    90 BANK BUKOPIN SYARIAH 521 SDOBIDJ1
    91 BANK SAHABAT SAMPOERNA 523 BDIPIDJ1
    92 BANK OK INDONESIA 526 LMANIDJ1
    93 BANK SEABANK INDONESIA 535 KSEBIDJ1
    94 BANK BCA SYARIAH 536 SYCAIDJ1
    95 BANK JAGO 542 ATOSIDJ1
    96 BANK BTPN SYARIAH 547 PUBAIDJ1
    97 BANK MULTI ARTA SENTOSA 548 MASBIDJ1
    98 BANK MAYORA 553 MAYOIDJA
    99 BANK INDEX SELINDO 555 BIDXIDJA
    100 BPD BANTEN 558 EKSTIDJ1
    101 BANK MANDIRI TASPEN POS 564 SIHBIDJ1
    102 BANK VICTORIA INTERNASIONAL 566 BVICIDJA
    103 BANK HARDA INTERNATIONAL 567 HRDAIDJ1
    104 BPR/LSB 600 -
    105 BPR KS 688 -
    106 BPR EKA 699 -
    107 LINKAJA 911 -
    108 BANK AGRIS 945 AGSSIDJA
    109 BANK CHINA TRUST INDONESIA 949 CTCBIDJA
    110 BANK COMMONWEALTH 950 BICNIDJA

    Version

    Document version 3.2