Agree who pays the fee
Every enterprise deal pays one platform fee to RekberPay. The two companies decide who carries it. This guide explains the fee, the default your workspace owner sets, and how a payer and a linked partner agree the split deal by deal.
How the fee works
The fee is charged once per deal, on the deal total:
- Rate. 2 percent of the total, unless RekberPay agreed another rate with your workspace. Workspaces with volume pricing get a lower rate when they release enough in a rolling 30 days.
- Minimum. At least Rp 5.000 per deal on rupiah deals.
- Cap. The fee never takes more than the total minus one unit per milestone, so every milestone keeps a payout above zero.
- Pricing is yours to read, not to change. It belongs to the workspace that creates the deal. Read it in Settings, Platform fee, or with
GET /v1/enterprise/fees. RekberPay sets it per workspace. - Frozen on create. The rate, minimum and volume tier are fixed when the deal is created. Later pricing changes never reach that deal.
The split decides who pays. It is stored as the payer's percentage, a whole number from 0 to 100, and the partner pays the rest. There are no decimals, so 60 and 61 are possible and 60.5 is not:
| Choice in the dashboard | fee_allocation | Payer pays | Partner pays |
|---|---|---|---|
| Your workspace | buyer | 100% | 0% |
| Counterparty | seller | 0% | 100% |
| Split | split with fee_buyer_percent | 0 to 100% | the rest |
How the two shares are charged:
- The payer's share is added to what the payer funds. It is spread over the milestones in proportion to their amounts.
- The partner's share is held back from each payout, in the same proportion.
Example. A deal of Rp 100.000.000 in three milestones of Rp 30.000.000, Rp 40.000.000 and Rp 30.000.000 has a fee of Rp 2.000.000. With a 60 / 40 split the payer's share is Rp 1.200.000 and the partner's is Rp 800.000.
| Milestone | Payer funds | Partner receives |
|---|---|---|
| 1 (Rp 30.000.000) | Rp 30.360.000 | Rp 29.760.000 |
| 2 (Rp 40.000.000) | Rp 40.480.000 | Rp 39.680.000 |
| 3 (Rp 30.000.000) | Rp 30.360.000 | Rp 29.760.000 |
| Total | Rp 101.200.000 | Rp 99.200.000 |
The payment method fee for a live payment is separate and is always paid by the payer. See Fund a live deal.
1. Set the default split (owner)
The default only pre-fills the New deal form. Each deal still carries its own split. If nobody ever sets it, the default is that the payer pays the whole fee.
In the dashboard
- As the workspace owner, open Settings.
- In Platform fee, under Default split for new deals, choose Your workspace, Counterparty or Split. For a split, type your workspace's share as a whole percent from 0 to 100, for example 60. The Counterparty line beside it shows the rest, 40 in this example.
- Choose Save default split.
Other roles see the default but cannot change it.
With the API
Only an owner can change it, and only from a dashboard session. An API key is refused with 403 KEY_NOT_ALLOWED.
curl -X PUT https://api.rekberpay.com/v1/enterprise/fees/default-allocation \
-b cookies.txt \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-H "X-Enterprise-Account: $WORKSPACE_ID" \
-H "Idempotency-Key: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "Content-Type: application/json" \
-d '{ "fee_allocation": "split", "fee_buyer_percent": 60 }'2. Preview the fee
Before you create a deal, see what it will cost.
In the dashboard, the Platform fee card on New deal updates as you type the milestones. With the API:
curl -X POST https://api.rekberpay.com/v1/enterprise/fees/preview \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{
"milestones": [{ "amount": 30000000 }, { "amount": 40000000 }, { "amount": 30000000 }],
"fee_allocation": "split",
"fee_buyer_percent": 60
}'The answer has the platform fee, each side's share, what the payer funds in total and what the partner receives.
3. Propose the split on the deal (payer)
In the dashboard
- Open Deals, then New deal, or Edit deal on a draft.
- In the Platform fee card, under Who pays the fee, choose who pays. It starts from your default. For Split, type your workspace's share as a whole percent from 0 to 100. The field keeps you inside that range: it drops the digits after a decimal point (5.5 becomes 5) and anything above 100 becomes 100. A split of 100 is the same as Your workspace, and 0 is the same as Counterparty.
- Save the draft.
With the API, send the split when you create or edit the draft:
curl -X POST https://api.rekberpay.com/v1/enterprise/deals \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Packaging order, Q4",
"counterparty_id": "'"$COUNTERPARTY_ID"'",
"fee_allocation": "split",
"fee_buyer_percent": 60,
"milestones": [
{ "title": "Deposit", "amount": 30000000 },
{ "title": "Production", "amount": 40000000 },
{ "title": "Delivery", "amount": 30000000 }
]
}'Send fee_allocation as buyer or seller (with no percent, or 100 or 0), or as split with fee_buyer_percent. Sending only fee_buyer_percent works too. fee_buyer_percent must be a whole number from 0 to 100. A decimal such as 60.5, or a number outside the range, answers 400 INVALID_BODY. A mix that contradicts itself, such as buyer with 60, or split with no percent, answers 400 INVALID_FEE_ALLOCATION.
What happens next depends on the counterparty:
- No linked workspace. There is nobody to agree with. Your split stands and the deal can be activated.
- Linked partner workspace. Your split is a proposal. The deal shows "Waiting for CV Mitra Pangan to agree the fee split", and the partner is notified.
Editing the split or the counterparty on a draft is a new proposal from you and replaces any earlier one.
4. Answer the proposal (partner)
In the dashboard
- Open Shared deals. A deal that needs you shows Split to agree.
- Open it. The Platform fee card shows the fee and the split in words, for example "a 60 / 40 split (Sinar Laut / you)", and a line saying whose turn it is.
- Choose Accept split to agree. Or choose Counter, set the payer's share in Counter the fee split, and choose Send counter-offer.
You need the finance role. A sandbox partner cannot answer on a live deal.
With the API
# Accept
curl -X POST https://api.rekberpay.com/v1/enterprise/shared-deals/$DEAL_ID/fee-agreement \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{ "decision": "accept" }'
# Counter: the percent is the payer's share
curl -X POST https://api.rekberpay.com/v1/enterprise/shared-deals/$DEAL_ID/fee-agreement \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{ "decision": "counter", "fee_allocation": "split", "fee_buyer_percent": 50 }'| Status | Code | Cause |
|---|---|---|
409 | NOTHING_TO_ACCEPT | There is no proposal from the payer waiting for you |
409 | ALREADY_AGREED | The split is settled. Ask the payer to change the draft |
409 | NOT_DRAFT | The deal is active. The split is frozen |
5. Answer a counter-offer (payer)
When the partner counters, the draft shows "CV Mitra Pangan proposed a fee split" with the new numbers.
In the dashboard, choose Accept split, or edit the draft to propose something else.
With the API
# Accept the partner's counter
curl -X POST https://api.rekberpay.com/v1/enterprise/deals/$DEAL_ID/fee-agreement \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{ "decision": "accept" }'
# Or propose another split
curl -X PATCH https://api.rekberpay.com/v1/enterprise/deals/$DEAL_ID \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-H "Content-Type: application/json" \
-d '{ "fee_allocation": "split", "fee_buyer_percent": 55 }'Accepting needs the finance role. Only the side that did not make the latest proposal can accept it. The two sides can go back and forth as many times as needed while the deal is a draft.
What blocks funding
A deal with a linked partner cannot be activated, and so cannot be funded, while a proposal is open. These all answer 409 FEE_NOT_AGREED:
- activating the deal while the split is
proposed - recording sandbox funding, or starting a live payment, on a milestone of such a deal
- activating a draft whose link ended. It waits until a new link is accepted and the split is agreed again. See End a partner link
The deal's fee_agreement field tells you where things stand:
status | proposed_by | Meaning |
|---|---|---|
proposed | workspace | The payer proposed. The partner must answer |
proposed | counterparty | The partner countered. The payer must answer |
agreed | either | Settled. The deal can be activated |
not_required | none | The counterparty has no linked workspace |
blocks_funding is true while a proposal is open, and relink_required is true for a draft that lost its link.
Once the deal is activated, the split freezes with the other terms. The fee amounts change with milestone edits only while the deal is a draft.
RekberPay can override a split in exceptional cases. The override settles the agreement and shows in the history as "RekberPay set the fee split".
Webhooks
deal.fee_proposed and deal.fee_agreed are sent for deals with a linked partner. Both workspaces see the events in their own activity feed.