Attach a splits array to any white-label payment. When the buyer's coins confirm, the settlement fans out — platform accounts are credited instantly, external addresses get automatic on-chain payouts. Basis-point precision, integer math, no dust lost.
10000 — the API rejects anything else at creation, not at settlement.VALIDATEDrecipient_merchant_id — the share lands as instant, zero-fee ledger credit, like an internal transfer. Recipient withdraws whenever they want.INSTANTrecipient_address — the share becomes an automatic on-chain payout in the payment coin. Address format is validated (and burn-address-checked) at creation.AUTOMATIC{
"amount": "500.00",
"currency": "USDT_TRC20",
"order_id": "order_5512",
"splits": [
{ "bps": 7000 , "recipient_merchant_id": "cmb4k1x9e0001ab8f" }, // seller — 70%, instant credit
{ "bps": 2000 , "recipient_merchant_id": "cmb4k1x9e0002cd3a" }, // referrer — 20%, instant credit
{ "bps": 1000 , "recipient_address": "TXm4…9fQ2" } // your treasury — 10%, on-chain payout
]
}
// On confirmation: 350.00 and 100.00 credited instantly,
// 50.00 (minus network fee) broadcast to TXm4…9fQ2 — automatically.
The payment is rejected at creation with splits_bps_sum_not_10000. There is no partial-split state — either the whole declaration is valid or nothing is created.
Each split entry is exactly one or the other — recipient_merchant_id XOR recipient_address. Mixing entry types across the array is fine.
Splits settle when the payment reaches PAID under the normal underpay tolerance. A payment that expires underpaid doesn't fan out.
Not on the same payment — splits distribute the deposit coin, Auto Settle converts it. Pick per payment; recipients can always convert their own credit afterwards.
They're standard payouts: the network fee comes out of that share, nothing else added. Platform-account shares have no fee at all.
Declare shares once at checkout. Every settlement splits itself — to 1 bps, forever.