Skip to content

Split payments

A split payment lets one application collect a payment and have Pesepay settle part of it to a different Pesepay merchant, automatically, with no transfer between you afterwards. The application that collects is the master merchant; the merchant that receives a share is the beneficiary.

Typical uses: a marketplace paying a vendor out of each sale, a booking platform paying a venue, a fees portal collecting on behalf of a school.

  1. Your server → Pesepay Create the transaction beneficiary email in paymentMetadata
  2. Customer → Pesepay Pays once one reference number
  3. Pesepay Divides the amount on success
  4. Pesepay → Your server Result callback no split detail on it
  5. Pesepay → Your server Credits the master merchant share
  6. Pesepay → Beneficiary Credits the remainder their application, their payout account
One payment, two settlement credits
  1. The customer pays once. One transaction, one reference number, one result callback — the customer never sees the arrangement.

  2. On success, Pesepay creates two settlement records against the parent transaction: a credit to the master merchant for their share, and a credit to the beneficiary for the rest. Both are booked in the currency of the parent payment.

  3. Each side is paid out on its own. The beneficiary’s credit lands against their Pesepay application and is settled to their payout account under the normal settlement schedule. You never hold or forward their money.

The split arithmetic runs on the transaction amount. Pesepay’s own transaction service fee is applied as usual for your application’s fee charge type — it is not part of the calculation below.

Both sides need to be approved Pesepay merchants before an arrangement can exist:

RequirementApplies toWhy
An approved Pesepay merchant accountBeneficiaryThe invitation is matched to an existing business by email. An unapproved account is rejected with Beneficiary merchant account has not yet been approved.
An approved payout account in the currency you charge inBeneficiaryCredits inherit the parent transaction’s currency and are never converted. A ZWG payment to a beneficiary who only holds a USD payout account produces a balance they cannot withdraw
The email address the beneficiary’s business is registered underMaster merchantIt is both the invitation address and the value you send on every transaction

Arrangements are configured per application, in the Merchant Control Panel under Applications → View Details → Manage Splits.

  1. The master merchant configures the split. Configure Split opens a form asking for the beneficiary merchant email, effective date, split amount mode, allocation model, and the fixed amount or percentage — the settings below. Submitting it sends the invitation.

  2. The beneficiary gets an emailed invitation headed “<your application> split settlement invitation”, showing the agreement details and a link to review and accept it.

  3. The beneficiary accepts. Pesepay creates a dedicated application on their account — named <your application> - <their business> Beneficiary — and their share of each payment is credited to it. They add a payout account to that application if they have not already.

  4. The arrangement becomes active. Deploy the paymentMetadata change described below at this point, not after.

An application can hold several arrangements — one per beneficiary you collect for. Each transaction names exactly one of them.

Manage Splits lists every arrangement on the application with its beneficiary, allocation model, split amount mode, share, effective date and status; expanding a row also shows the agreement reference and the beneficiary’s settlement account.

StatusMeaningPayments
INVITEDSent, not yet answeredNot yet required, and not yet accepted
ENABLED / ACCEPTEDLiveAccepted for this beneficiary
DECLINEDThe beneficiary refused the invitationNever active
DISABLEDSuspended because the beneficiary’s application was deactivatedRefused, and the metadata requirement stays in force
REVOKEDEnded by the master merchantRefused
SettingValuesNotes
allocationModelPERCENTAGE, FIXED_AMOUNTRequired
percentageGreater than 0, less than 100Required for PERCENTAGE. This is the master merchant’s share, not the beneficiary’s
fixedAmountGreater than 0Required for FIXED_AMOUNT. Also the master merchant’s share
splitAmountModePRINCIPAL (default), ADD_ONSet on the arrangement, not per transaction — see below
effectiveDateA date; defaults to the day the invitation is createdShown on the invitation

PRINCIPAL takes the master merchant’s share out of the amount you submit. ADD_ON adds it on top, so the customer is charged more than the amount you sent.

Submitting amount: 100.00 against a 30% arrangement:

PRINCIPALADD_ON
Amount you submit100.00100.00
Amount the customer is charged100.00130.00
Master merchant receives30.0030.00
Beneficiary receives70.00100.00

The same payment with a fixed share of 5.00:

PRINCIPALADD_ON
Amount you submit100.00100.00
Amount the customer is charged100.00105.00
Master merchant receives5.005.00
Beneficiary receives95.00100.00

Add the beneficiary’s email to paymentMetadata on every Initiate Transaction or Make Payment request for the application:

Plaintext request body (before encryption)
{
"amountDetails": {
"amount": 100.00,
"currencyCode": "USD"
},
"reasonForPayment": "Order #1042 — running shoes",
"paymentMetadata": {
"beneficiaryMerchantEmail": "vendor@example.com"
},
"resultUrl": "https://example.com/payments/result",
"returnUrl": "https://example.com/payments/return"
}

beneficiaryMerchantEmail is the canonical key. These aliases are also accepted, case-insensitively, for integrations that already use them: beneficiaryEmail, beneficiary_email, schoolEmail, school_email. Prefer the canonical key in new code.

Pesepay adds two keys to the transaction’s metadata, and you get them back as transactionMetadata on the callback and from check payment status:

KeyValue
splitAmountModePRINCIPAL or ADD_ON, taken from the arrangement
splitPrincipalAmountThe amount before the master merchant’s share was added. Under PRINCIPAL this equals the amount charged; under ADD_ON it is the amount you submitted

Under ADD_ON, splitPrincipalAmount is the figure to reconcile your own order total against — amountDetails.amount is the larger, charged amount.

Split payments add three failures, all raised when you create the transaction and all 400 responses in the standard error shape. The message text is reproduced exactly.

Transaction cannot be initiated without Beneficiary merchant email in paymentMetadata because this application has settlement split beneficiaries.

The application has at least one beneficiary in ENABLED, ACCEPTED or DISABLED, and this request carried no beneficiary email. Fix: send beneficiaryMerchantEmail on every transaction for this application, not only the ones you think of as split.

Transaction cannot be initiated because the supplied split beneficiary merchant email is not accepted.

There is no accepted arrangement on this application for that address — it was never invited, is still INVITED, was DECLINED, or has been REVOKED. Fix: check the spelling, and check the arrangement’s status in Manage Splits. This is also what you get in the gap while an arrangement is being replaced.

PAYMENTS TO THE MERCHANT ARE CURRENTLY DISABLED, PLEASE CONTACT ADMINISTRATOR, OR TRY AGAIN LATER

The arrangement is DISABLED because the beneficiary’s own application was deactivated. Fix: nothing in your code — the beneficiary’s account needs attention. Note this message is customer-facing in tone but arrives as an API error; don’t show it verbatim at checkout.

  • One beneficiary per transaction. A payment divides between the master merchant and exactly one beneficiary. There is no n-way split, and no way to name more than one beneficiary on a request.
  • One current arrangement per beneficiary, per application. Inviting a business that already has one is rejected — revoke the existing arrangement first.
  • No currency conversion. Both credits inherit the parent transaction’s currency.
  • Nothing about the split appears on the callback. The result callback describes the customer’s payment. The two credits are settlement records, visible in each merchant’s own dashboard.

Terms are fixed once accepted. To change a share, mode or model, revoke the arrangement and send a fresh invitation, which the beneficiary must accept again. Revoking is the ⋮ action on the arrangement’s row in Manage Splits; there is no edit, and no un-revoke.

Revoking your only beneficiary also lifts the metadata requirement, so transactions that omit the email start succeeding again while any request still sending the revoked address keeps failing. During a change-over, old and new code therefore fail in different ways — deploy the request change and the new acceptance close together.