Sub Account
Learn more about how DOKU Sub Account can help you Power up your online payments here.
Integration steps
Here is the overview of how to integrate with DOKU Sub Account:
1. Create Account
To create the account, you will need to hit this API through your Backend:
API Request
HTTP Method
POST
API endpoint (Sandbox)
https://api-sandbox.doku.com/sac-merchant/v1/accounts
API endpoint (Production)
https://api.doku.com/sac-merchant/v1/accounts
Here is the sample of request header to create the payment:
Request Header Explanation
Client-Id
Client ID retrieved from DOKU Back Office
Request-Id
Unique random string (max 128 characters) generated from merchant side to protect duplicate request
Request-Timestamp
Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z
Signature
Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to this section to generate the signature
Here is the sample of request body to create the account:
Request Body Explanation
account.email
string
Mandatory
Email identifier for your partner account
Allowed chars: alphabetic, numeric, special chars
Max Length: 40
account.type
string
Mandatory
Type of account. Available Values: Default, Standard
Allowed chars: alphabetic
Max Length: 20
account.name
string
Mandatory
Your partner name
Allowed chars: alphabetic
Max Length: 100
API Response
After hitting the above API request, DOKU will give the response.
HTTP Status
201
Result
CREATED
Here is the sample response header:
Response Header Explanation
Client-Id
Same as the request
Request-Id
Same as the request
Response-Timestamp
Timestamp Response on UTC with format ISO8601 UTC+0 from DOKU
Signature
Signature generated by DOKU based on the response body
Here is the sample of response body:
Response Body Explanation
account.created_date
string
Mandatory
Timestamp when the account was created
account.updated_date
string
Mandatory
Timestamp when the account was updated
account.name
string
Mandatory
Same as the request
account.email
string
Mandatory
Same as the request
account.type
string
Mandatory
Same as the request
account.status
string
Mandatory
Sub Account status. In this state, it should be PENDING
account.id
string
Mandatory
ID of your Sub Account, use this id to create transactions on behalf of your Partner
2. Accept Payment
To accept payment add this additional_info.account object into your payment request.
Request Header Explanation
additional_info.account
string
Mandatory
Include this object for routing the payment
additional_info.account.id
string
Mandatory
ID of your Account, use this to create transactions on behalf of your Account
Allowed chars: alphabetic, numeric, special chars
Max Length: 40
Sample Usage
Let's assume you are using the DOKU Direct integration. You can simply add these parameters into your API Initiate Payment:
3. Send Payout
You can request to send money from your accounts balance account for any disbursement purpose e.g: withdrawal, refund, paying vendor/supplier, etc
API Request
HTTP Method
POST
API endpoint (Sandbox)
https://api-sandbox.doku.com/sac-merchant/v1/payouts
API endpoint (Production)
https://api.doku.com/sac-merchant/v1/payouts
Here is the sample of request header to create the payment:
Request Header Explanation
Client-Id
Client ID retrieved from DOKU Back Office
Request-Id
Unique random string (max 128 characters) generated from merchant side to protect duplicate request
Request-Timestamp
Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z
Signature
Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to this section to generate the signature
Here is the sample of request body for payouts:
Request Body Explanation
account.id
string
Mandatory
The source of the payout
Allowed chars: alphabetic, numeric, special chars
Max Length: 40
payout.amount
string
Mandatory
Payout amount
Allowed chars: numeric
Max Length: 12
payout.invoice_number
string
Mandatory
A unique reference for this Payout. Use this to reconcile your payout.
Allowed chars: alphabetic, numeric, special chars
Max Length: 100
beneficiary.bank_code
string
Mandatory
SWIFT CODE Bank Destination
Allowed chars: alphabetic
Max Length: 12
beneficiary.bank_account_number
string
Mandatory
Beneficiary Bank Account Number
Allowed chars: numeric
Max Length: 40
beneficiary.bank_account_name
string
Mandatory
Beneficiary Bank Account Name
Allowed chars: alphabetic
Max Length: 40
API Response
After hitting the above API request, DOKU will give the response.
HTTP Status
200
Result
SUCCESS
Here is the sample response header:
Response Header Explanation
Client-Id
Same as the request
Request-Id
Same as the request
Response-Timestamp
Timestamp Response on UTC with format ISO8601 UTC+0 from DOKU
Signature
Signature generated by DOKU based on the response body
Here is the sample of response body:
Request Body Explanation
account.id
string
Mandatory
Same as request
payout.amount
string
Mandatory
Same as request
payout.invoice_number
string
Mandatory
Same as request
payout.status
string
Mandatory
Payout status
payout.created
string
Mandatory
Timestamp when Payout was created
beneficiary.bank_code
string
Mandatory
Same as request
beneficiary.bank_account_number
string
Mandatory
Same as request
beneficiary.bank_account_name
string
Mandatory
Same as request
4. Transfer Intra Sub Account
The Transfers API allows you to transfer balances between your accounts.
API Request
HTTP Method
POST
API endpoint (Sandbox)
https://api-sandbox.doku.com/sac-merchant/v1/transfers
API endpoint (Production)
https://api.doku.com/sac-merchant/v1/transfers
Here is the sample of request header to create the payment:
Request Header Explanation
Client-Id
Client ID retrieved from DOKU Back Office
Request-Id
Unique random string (max 128 characters) generated from merchant side to protect duplicate request
Request-Timestamp
Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z
Signature
Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to this section to generate the signature
Here is the sample of request body for payouts:
Request Body Explanation
transfer.origin
string
Mandatory
The source of the Transfer
Allowed chars: alphabetic, numeric, special chars
Max Length: 40
transfer.destination
string
Mandatory
The destination of the Transfer
Allowed chars: alphabetic, numeric, special chars
Max Length: 40
transfer.amount
string
Mandatory
Transfer amount
Allowed chars: numeric
Max Length: 12
transfer.invoice_number
string
Mandatory
A unique reference for this Payout. Use this to reconcile your payout.
Allowed chars: alphabetic, numeric, special chars
Max Length: 100
API Response
After hitting the above API request, DOKU will give the response.
HTTP Status
200
Result
SUCCESS
Here is the sample response header:
Response Header Explanation
Client-Id
Same as the request
Request-Id
Same as the request
Response-Timestamp
Timestamp Response on UTC with format ISO8601 UTC+0 from DOKU
Signature
Signature generated by DOKU based on the response body
Here is the sample of response body:
Response Body Explanation
transfer.invoice_number
string
Mandatory
Same as request
transfer.origin
string
Mandatory
Same as request
transfer.destination
string
Mandatory
Same as request
transfer.amount
string
Mandatory
Same as request
transfer.created
string
Mandatory
Timestamp when Payout was created
5. Get Balances
Get Balance API allows you to retrieve the balance of your available and pending balance
API Request
HTTP Method
GET
API endpoint (Sandbox)
https://api-sandbox.doku.com/sac-merchant/v1/balances/{account_id}
API endpoint (Production)
https://api.doku.com/sac-merchant/v1/balances/{account_id}
Here is the sample of request header to get balance:
Request Header Explanation
Client-Id
Client ID retrieved from DOKU Back Office
Request-Id
Unique random string (max 128 characters) generated from merchant side to protect duplicate request
Request-Timestamp
Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z
Signature
Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to this section to generate the signature
API Response
After hitting the above API request, DOKU will give the response.
HTTP Status
200
Result
SUCCESS
Here is the sample response header:
Response Header Explanation
Client-Id
Same as the request
Request-Id
Same as the request
Response-Timestamp
Timestamp Response on UTC with format ISO8601 UTC+0 from DOKU
Signature
Signature generated by DOKU based on the response body
Here is the sample of response body:
Response Body Explanation
balance.pending
string
Mandatory
The balance remaining in your pending balance
balance.available
string
Mandatory
The balance remaining in your available balance
Last updated