Split Settlement
Split Settlement is a feature that enables to define your settlement rule for a payment. This is a good solution for a merchant that need customized settlement rule such as, marketplace, platforms, franchise, business with various branches, and many more. Split Settlement will help you to manage your complex payment flows.
Activation
This feature only works for Aggregator Merchant, meaning that your funds are settled from acquiring to DOKU, then DOKU will forward the funds to your account.
You have activated the split settlement service when onboarding to DOKU. If not activated, we will settle all settlement amounts to your default bank account. You can activate split settlement service through menu Setting > Service.

a. Click the “+ Add Service” button and select Financial Service > Others > Split Settlement. If this section is disabled, please contact your sales.

b. Once Split Settlement is activated, you can see Split Settlement on your service list.

c. Your split transaction will have a split Icon on the right of Invoice Number.

Create new bank account on DOKU Back Office from menu Setting > Bank Account and click the Add button, then fill the form and click Submit button.

We will verify your data and after the status is
Verifiedthen you can retrieve thesettlement_bank_account_idfrom Bank Settlement ID column to put into your Split Settlement RuleSplit settlement currently only works for integration with:
Checkout
Direct API
Then you are good to go!
Request Split Settlement on Accept Payment
Request split settlement can be done during payment success.To do split settlement, please add this additional_info.settlement object into your payment request:
additional.info.settlement
array
Mandatory
Include this object to do split settlement for the transaction
additional_info.settlement[].
bank_account_settlement_id
string
Mandatory
The bank_account_settlement_id that you retrieved from the DOKU Back Office
additional_info.settlement[].value
string
Mandatory
The value of the settlement can be in IDR or percentage based on the type defined. If you are using FIX type then the value should be the exact amount. If you are using PERCENTAGE type then the value should be the percentage
additional_info.settlement[].type
string
Mandatory
The type of the splitting funds
Possible value: FIX, PERCENTAGE
Sample Usage
Let's assume you are using the Checkout integration. You can simply add these parameters into your API Initiate Payment:
Update Split Settlement via Post Payment
The Update Split Settlement on Post Payment feature allows you to modify fund distributions for transactions that have pending settlement. You can easily update the split settlement through the dashboard or API.
Update Via Host-to-Host
Check Status Split Settlement (API) Check Status Split Settlement (POST v1/split-settlement/check-status): Show the value for a split settlement transaction such as settlement bank account information, split value, and split type.
Client ID retrieved from DOKU Back Office
MCH-0001-10791114622547Unique random string (max 128 characters), validated globally by the security filter (not at the controller level)
b6a465ea-bb65-48b2-a22b-3e8fb51cf22eTimestamp request UTC ISO8601, validated globally (out-of-range check)
2020-08-11T08:45:42ZHMAC signature, validated globally by RequestHeaderFilter
HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=Used by /check-status and /cancel. Only contains fields that are actually read by SplitSettlementService... split_transaction_bank_account is INTENTIONALLY omitted here: for /check-status this field is absolutely not used at all (dead field), and for /cancel this field is only passed raw (pass-through) to financial-core, not used by this service itself. See docs/api/compare-api.md for details.
transaction invoice number
INV-001transaction date in ISO-8601 format
10000Successful response
Fields that are actually set by getSplitSettlementResponseDto() (SplitSettlementService.java:219-229) for the /check-status endpoint.
SBS-1004-20211114082852516Banking Circle S.A99903331Edwin10PERCENTAGEAccount, transaction, or settlement bank account not found
Split settlement is not allowed for this country, or the split_settlement account flag is not true
POST /production.doku.com}.com/fc-h2h-api/v1/split-settlement/check-status HTTP/1.1
Host: {sandbox/production.doku.com}.com/fc-h2h-api
Client-Id: text
Request-Id: text
Request-Timestamp: text
Signature: text
Content-Type: application/json
Accept: */*
Content-Length: 89
{
"invoice_number": "INV-001",
"transaction_date": "2026-01-01T00:00:00.000Z",
"amount": 10000
}[
{
"bank_account_settlement_id": "SBS-1004-20211114082852516",
"bank_name": "Banking Circle S.A",
"bank_account_number": "99903331",
"bank_account_name": "Edwin",
"value": 10,
"type": "PERCENTAGE"
}
]Edit Split Settlement (API) Edit Split Settlement (POST /v1/split-settlement/edit): Updates destination bank accounts and split allocation rules (percentages or fixed amounts) for an unbatched transaction in pending status.
Client ID retrieved from DOKU Back Office
MCH-0001-10791114622547Unique random string (max 128 characters), validated globally by the security filter (not at the controller level)
b6a465ea-bb65-48b2-a22b-3e8fb51cf22eTimestamp request UTC ISO8601, validated globally (out-of-range check)
2020-08-11T08:45:42ZHMAC signature, validated globally by RequestHeaderFilter
HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=INV-00110000Successful response
Fields that are actually set by validateSplitTransaction() (SplitSettlementService.java:121-147) for endpoint /edit. bank_name, bank_account_number, bank_account_name are INTENTIONALLY omitted: the service never sets these fields, so they do not appear in the JSON response (DTO uses @JsonInclude NON_NULL).
SBA-0101023-1110PERCENTAGEAccount not found
Split transaction is empty, transaction not found, journey code is not eligible, split settlement configuration is inactive, settlement schedule has passed, split type is different, split value <= 0, or split amount is insufficient
POST /production.doku.com}.com/fc-h2h-api/v1/split-settlement/edit HTTP/1.1
Host: {sandbox/production.doku.com}.com/fc-h2h-api
Client-Id: text
Request-Id: text
Request-Timestamp: text
Signature: text
Content-Type: application/json
Accept: */*
Content-Length: 205
{
"invoice_number": "INV-001",
"transaction_date": "2026-01-01T00:00:00.000Z",
"amount": 10000,
"split_transaction_bank_account": [
{
"bank_account_settlement_id": "SBA-0101023-11",
"value": "10",
"type": "PERCENTAGE"
}
]
}[
{
"bank_account_settlement_id": "SBA-0101023-11",
"value": 10,
"type": "PERCENTAGE"
}
]Cancel Split Settlement (API) Cancel Split Settlement (POST /v1/split-settlement/cancel): Cancels the custom split settlement configuration for an unbatched transaction, restoring 100% fund settlement to the merchant's default bank account.
Client ID retrieved from DOKU Back Office
MCH-0001-10791114622547Unique random string (max 128 characters), validated globally by the security filter (not at the controller level)
b6a465ea-bb65-48b2-a22b-3e8fb51cf22eTimestamp request UTC ISO8601, validated globally (out-of-range check)
2020-08-11T08:45:42ZHMAC signature, validated globally by RequestHeaderFilter
HMACSHA256=vl9DBTX5KhEiXmnpOD0TSm8PYQknuHPdyHSTSc3W6Ps=Used by /check-status and /cancel. Only contains fields that are actually read by SplitSettlementService... split_transaction_bank_account is INTENTIONALLY omitted here: for /check-status this field is absolutely not used at all (dead field), and for /cancel this field is only passed raw (pass-through) to financial-core, not used by this service itself. See docs/api/compare-api.md for details.
transaction invoice number
INV-001transaction date in ISO-8601 format
10000Successful response
For the /cancel endpoint, data is taken from deserializing the financial-core response (BaseResponse.data pada cancel(), SplitSettlementService.java:255-277), then transaction_date is reformatted to yyyy-MM-dd by formatDate() (SplitSettlementService.java:280-287). invoice_number and amount are explicitly used/processed by this code; bank_* fields are NOT explicitly set by the service for this endpoint.
INV-001Reformatted to yyyy-MM-dd by formatDate()
2020-08-1110000Account not found
Split settlement is not allowed for this country, transaction not found, or financial-core returned a failure response
POST /production.doku.com}.com/fc-h2h-api/v1/split-settlement/cancel HTTP/1.1
Host: {sandbox/production.doku.com}.com/fc-h2h-api
Client-Id: text
Request-Id: text
Request-Timestamp: text
Signature: text
Content-Type: application/json
Accept: */*
Content-Length: 89
{
"invoice_number": "INV-001",
"transaction_date": "2026-01-01T00:00:00.000Z",
"amount": 10000
}{
"invoice_number": "INV-001",
"transaction_date": "2020-08-11",
"amount": 10000
}Update via Dashboard Setting
Cancel Split Settlement (Dashboard)
Cancel Split Settlement: Navigate to Reports > Reconciled Transactions, click the three-dot menu (⋮) on an unbatched pending transaction, select Cancel Split Settlement, click the red Cancel Split Settlement button, and select Yes on the confirmation prompt.

Edit Split Settlement (Dashboard)
Edit Split Settlement: Navigate to Reports > Reconciled Transactions, click the three-dot menu (⋮) in the Actions column, select Settlement Configuration, adjust your bank account allocations or split values, and click Save Configuration.




Rules and Limitation
NOTES
The split settlement is calculated based on the Net Settlement amount, not the order amount. This means you must deduct the Total Fee from the order amount to determine the Net Settlement value.
Here is the illustration:
Let's assume that the order.amount is Rp104,500 and the Total Fee that being charged by DOKU for this transaction is Rp4,500 and you want to split the amount into two bank accounts with percentage of 15% into the first bank account (SBA-0001-123123123) and 85% into the second bank account (SBA-0002-321321321).
order.amount
-
104,500
Total Fee by DOKU
-
4,500
Amount that will be splitted
100%
100,000
SBA-0001-123123123
15%
15,000
SBA-0002-321321321
85%
85,000
Therefore, the first bank account will receive Rp15,000 and second bank account will receive Rp85,000.
FAQs
What if the settlement amount defined incorrectly?
The transaction will still be processed, but the split settlement mechanism will not be executed. The funds will settled to the primary bank account that you set in the settlement configuration.
Can I use this feature with hold & release settlement or custom settlement report?
Of course, you can!
Last updated