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.
How the money moves
Section titled “How the money moves”- Your server → Pesepay Create the transaction beneficiary email in paymentMetadata
- Customer → Pesepay Pays once one reference number
- Pesepay Divides the amount on success
- Pesepay → Your server Result callback no split detail on it
- Pesepay → Your server Credits the master merchant share
- Pesepay → Beneficiary Credits the remainder their application, their payout account
-
The customer pays once. One transaction, one reference number, one result callback — the customer never sees the arrangement.
-
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.
-
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.
Before you start
Section titled “Before you start”Both sides need to be approved Pesepay merchants before an arrangement can exist:
| Requirement | Applies to | Why |
|---|---|---|
| An approved Pesepay merchant account | Beneficiary | The 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 in | Beneficiary | Credits 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 under | Master merchant | It is both the invitation address and the value you send on every transaction |
Setting up an arrangement
Section titled “Setting up an arrangement”Arrangements are configured per application, in the Merchant Control Panel under Applications → View Details → Manage Splits.
-
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.
-
The beneficiary gets an emailed invitation headed “<your application> split settlement invitation”, showing the agreement details and a link to review and accept it.
-
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. -
The arrangement becomes active. Deploy the
paymentMetadatachange 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.
Agreement status
Section titled “Agreement status”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.
| Status | Meaning | Payments |
|---|---|---|
INVITED | Sent, not yet answered | Not yet required, and not yet accepted |
ENABLED / ACCEPTED | Live | Accepted for this beneficiary |
DECLINED | The beneficiary refused the invitation | Never active |
DISABLED | Suspended because the beneficiary’s application was deactivated | Refused, and the metadata requirement stays in force |
REVOKED | Ended by the master merchant | Refused |
Configuration reference
Section titled “Configuration reference”| Setting | Values | Notes |
|---|---|---|
allocationModel | PERCENTAGE, FIXED_AMOUNT | Required |
percentage | Greater than 0, less than 100 | Required for PERCENTAGE. This is the master merchant’s share, not the beneficiary’s |
fixedAmount | Greater than 0 | Required for FIXED_AMOUNT. Also the master merchant’s share |
splitAmountMode | PRINCIPAL (default), ADD_ON | Set on the arrangement, not per transaction — see below |
effectiveDate | A date; defaults to the day the invitation is created | Shown on the invitation |
PRINCIPAL vs ADD_ON
Section titled “PRINCIPAL vs ADD_ON”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:
PRINCIPAL | ADD_ON | |
|---|---|---|
| Amount you submit | 100.00 | 100.00 |
| Amount the customer is charged | 100.00 | 130.00 |
| Master merchant receives | 30.00 | 30.00 |
| Beneficiary receives | 70.00 | 100.00 |
The same payment with a fixed share of 5.00:
PRINCIPAL | ADD_ON | |
|---|---|---|
| Amount you submit | 100.00 | 100.00 |
| Amount the customer is charged | 100.00 | 105.00 |
| Master merchant receives | 5.00 | 5.00 |
| Beneficiary receives | 95.00 | 100.00 |
What changes in your requests
Section titled “What changes in your requests”Add the beneficiary’s email to paymentMetadata on every
Initiate Transaction or
Make Payment request for the application:
{ "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.
Metadata Pesepay writes back
Section titled “Metadata Pesepay writes back”Pesepay adds two keys to the transaction’s metadata, and you get them back
as transactionMetadata on the callback and
from check payment status:
| Key | Value |
|---|---|
splitAmountMode | PRINCIPAL or ADD_ON, taken from the arrangement |
splitPrincipalAmount | The 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.
Errors
Section titled “Errors”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.
No beneficiary email on the request
Section titled “No beneficiary email on the request”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.
The email isn’t an accepted beneficiary
Section titled “The email isn’t an accepted beneficiary”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.
The beneficiary is disabled
Section titled “The beneficiary is disabled”PAYMENTS TO THE MERCHANT ARE CURRENTLY DISABLED, PLEASE CONTACT ADMINISTRATOR, OR TRY AGAIN LATERThe 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.
Current limits
Section titled “Current limits”- 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.
Changing or ending an arrangement
Section titled “Changing or ending an arrangement”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.