Splits & Subaccounts

Automatically divide a payment between your own account and one or more subaccounts — ideal for marketplaces, platforms, and revenue-sharing arrangements.

Subaccounts

A subaccount represents a payee with its own settlement bank details and balance. Manage subaccounts under /v1/merchant/subaccounts. KYC must be approved before creating subaccounts.

MethodPathPurpose
GET/v1/merchant/subaccountsList subaccounts with balances (paginated)
POST/v1/merchant/subaccountsCreate a subaccount
GET/v1/merchant/subaccounts/:idRetrieve a subaccount
GET/v1/merchant/subaccounts/:id/balancePending, available, and total balance
PATCH/v1/merchant/subaccounts/:idUpdate details or status
DELETE/v1/merchant/subaccounts/:idDeactivate a subaccount
http
POST /v1/merchant/subaccounts
Authorization: Bearer sk_test_...
Content-Type: application/json

{
  "business_name": "Acme Logistics",
  "market_iso2": "ZW",
  "bank_code": "NMB",
  "account_number": "1234567890",
  "settlement_bank": "NMB Bank",
  "currency": "USD",
  "percentage_charge": "2.5"
}
json
{
  "success": true,
  "data": {
    "subaccount": {
      "id": "sub_01HQXYZ",
      "business_name": "Acme Logistics",
      "market_iso2": "ZW",
      "currency": "USD",
      "percentage_charge": "2.5",
      "status": "active",
      "balance": { "pending": "0", "available": "0", "total": "0.0000" }
    }
  }
}

Split rules

A split rule defines how a payment is allocated to subaccounts. Manage splits under /v1/merchant/splits.

MethodPathPurpose
GET/v1/merchant/splitsList split rules with allocations
POST/v1/merchant/splitsCreate a split rule
GET/v1/merchant/splits/:idRetrieve a split rule
PATCH/v1/merchant/splits/:idUpdate name, status, or allocations
DELETE/v1/merchant/splits/:idDeactivate a split rule

Allocations

Each allocation references a subaccount_id and a share. For percentage splits, the shares of all allocations must sum to 100; the remainder stays with your main account. For flat splits, each share is a fixed amount. Set bearer_type to account or subaccount to choose who absorbs processing fees.

http
POST /v1/merchant/splits
Authorization: Bearer sk_test_...
Content-Type: application/json

{
  "name": "Marketplace 90/10",
  "type": "percentage",
  "currency": "USD",
  "bearer_type": "account",
  "allocations": [
    { "subaccount_id": "sub_01HQXYZ", "share": "10" }
  ]
}
json
{
  "success": true,
  "data": {
    "split": {
      "id": "spl_01HQ",
      "name": "Marketplace 90/10",
      "split_code": "SPL_A1B2C3D4E5F6",
      "type": "percentage",
      "currency": "USD",
      "bearer_type": "account",
      "status": "active",
      "allocations": [
        { "subaccount_id": "sub_01HQXYZ", "share": "10" }
      ]
    }
  }
}

Settlement webhook

When a split is settled, Watenga emits the split.settled event. Its data includes transaction_id, split_id, subaccount_id, amount, and currency.