B2B escrow for milestone deals

Milestone escrow for Indonesian companies. Fund a purchase order or a project milestone by milestone: RekberPay holds each payment until your approvers sign off on the evidence, then pays a verified account.

  • Start in Sandbox today

    Your workspace opens in Sandbox with test money. Live unlocks once we verify your business, which takes 1 to 3 business days.

  • Your supplier does not need an account

    A company without RekberPay is a plain counterparty. If it runs RekberPay Enterprise too, link the two workspaces and share the deal.

Sample deal

20 tonnes of rice

PT Sumber Pangan pays CV Tani Makmur
Rp 450.000.0003 milestones
  • Released Rp 135M
  • In review Rp 180M
  • Awaiting funding Rp 135M
  1. 1. DepositSigned purchase order
    Rp 135.000.000Released
  2. 2
    2. Goods shippedBill of lading and loading photos
    1 of 2 approvers. The finance director approved. A second approver decides next.
    Rp 180.000.000Waiting on you
  3. 3
    3. Goods receivedGoods received note and quality inspection
    Rp 135.000.000Awaiting funding
Fee Rp 9.000.000, paid by the distributorTwo approvers from Rp 100M

Sample deal with made-up names, from the supplier and distributor scenario in our docs.

Who uses B2B escrow

Any company in Indonesia that pays another in stages and wants the money held until the work is proven. Six setups from our B2B escrow use cases, each with its own guide.

  • Agency and client

    A website and brand refresh in three milestones. The client's approver can send design work back for revision.

    Fee
    Split 50 / 50
    Key feature
    Request revision
  • Supplier and distributor

    A purchase order paid as deposit, shipment and goods received. Short delivery goes to a dispute with the inspection report.

    Fee
    Payer pays
    Key feature
    Four-eyes, disputes
  • Marketplace partner payouts

    One milestone per weekly batch, released after finance reconciles the sales report, split to a main and a tax account.

    Fee
    Partner pays
    Key feature
    API, split payouts, webhooks
  • Construction progress payments

    Down payment through retention, each with a due date and a consultant's inspection as evidence.

    Fee
    Split 50 / 50
    Key feature
    Retention milestone
  • Software outsourcing

    Discovery, sprints and UAT as milestones. Blocking bugs go back as a revision with a note listing them.

    Fee
    Software house pays
    Key feature
    Sprint milestones
  • Event organizer and vendors

    A deal per vendor, due dates on the event days, and one release split between a vendor and its crew account.

    Fee
    Payer pays
    Key feature
    Split payout

Your users pay each other, not you? When shoppers pay sellers on your marketplace, the Platform API is the better fit. Both run in the same workspace.

See the escrow API for marketplaces

How a milestone escrow deal works

Each milestone is funded, proven, approved and released on its own. Every step is timestamped, tied to a person and sent as a signed webhook.

  1. 01

    Create the deal

    Add the counterparty, up to 20 milestones, their amounts and the evidence each one needs.

    Operatordeal.created
  2. 02

    Activate

    The draft becomes live and its milestones wait for funding.

    Operatordeal.activated
  3. 03

    Fund

    In Live the payer pays by bank transfer, QRIS or a gateway. RekberPay holds it.

    Financemilestone.funded
  4. 04

    Submit evidence

    Your operator, or a linked counterparty, uploads what the milestone asked for.

    Operator or partnermilestone.evidence_submitted
  5. 05

    Approve

    From Rp 100M two different approvers decide, never the person who submitted.

    Financemilestone.approved
  6. 06

    Release

    Finance releases to verified payout instructions, up to five per release.

    Financedisbursement.settled

Request revision

The approver sends the milestone back with a note. The counterparty delivers again and a new review round starts. milestone.revision_requested

Open a dispute

The money stays held while RekberPay decides: back to funded, released, or cancelled. You get an alert when it passes your SLA. dispute.opened

A whole deal, in order

Sample: a Rp 2.000.000.000 warehouse build, paid in five milestones
  1. 1. Down paymentRp 400.000.000Released
  2. 2. FoundationRp 500.000.000Released
  3. 3. StructureRp 500.000.0001 of 2 approved
  4. 4. FinishingRp 400.000.000Funded
  5. 5. RetentionRp 200.000.000Awaiting funding

Made-up names and amounts from the construction scenario in our docs. The retention milestone is due 30 days after handover.

B2B escrow features

The dashboard and the REST API do the same jobs, so your team can work by hand while your systems integrate.

  • Milestones and evidence

    Up to 20 milestones per deal, each naming the evidence it needs. Save plans your team reuses as templates.

  • Four-eyes approvals

    Two different approvers on milestones from Rp 100M by default. Set your own threshold in Settings.

  • Revisions and disputes

    Send work back with a note, or open a dispute that holds the money until RekberPay decides.

  • Verified payout instructions

    RekberPay verifies every payout account before money moves. Split one release across up to five.

  • Linked partner workspaces

    Link by Workspace ID. Your partner sees the deal under Shared deals and uploads evidence from its side.

  • Fee split you agree

    The payer pays, the partner pays, or you split it. A linked partner can accept or counter before funding.

  • Reports and CSV

    A summary report plus deals and payouts as CSV, up to 10,000 rows and 366 days per export.

  • Roles for every job

    Viewer, operator, finance, admin and owner. Each role includes everything the roles below it can do.

  • REST API and signed webhooks

    Workspace keys per mode, Idempotency-Key on writes, and HMAC-signed deliveries for every event.

Security and controls

Who can move money is decided by verification, by two people and by a log you can export. None of it depends on trusting one login.

KYB

  • Your business is verified before Live unlocks. We review in 1 to 3 business days.
  • RekberPay operations reviews every counterparty and payout account.
  • A live release after a dispute needs the counterparty's business verification done.

Four-eyes

  • Two different approvers on milestones from Rp 100M by default.
  • The person who submitted the evidence can never approve it.
  • A workspace API key acts as one person, so each approver needs their own login.

Audit

  • Actor, IP, before and after on every state change, exportable as CSV.
  • Bank numbers masked everywhere. Unmasking is superadmin-only and logged.
  • Idempotency keys on payouts and compare-and-swap guards against double release.
RoleCan do
viewerRead deals, approvals, payouts, documents and the activity feed. Change nothing.
operatorCreate and edit deals, milestones, counterparties and templates. Submit evidence. Open disputes.
financeFund or pay milestones, approve or reject evidence, release money, manage payout instructions, export reports.
adminInvite members, set the approval policy, submit business verification, manage API keys and webhooks, link partners.
ownerEverything an admin can, plus granting the owner role and setting the default fee split.

Escrow API and webhooks for B2B deals

Release an approved milestone to two payout accounts in one call, then hear about it on your webhook. Both samples come from a real sandbox run in our docs. Read the milestone deal guide.

POST/v1/enterprise/deals/:id/milestones/:mid/release
# BASE=https://api.rekberpay.com/v1/enterprise
curl -X POST "$BASE/deals/$DEAL_ID/milestones/$MILESTONE_ID/release" \
  -H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
  -H "Idempotency-Key: 33333336-3333-4333-8333-333333333333" \
  -H "Content-Type: application/json" \
  -d '{
    "splits": [
      { "payout_instruction_id": "fffffff3-…", "amount": 25000000 },
      { "payout_instruction_id": "22222224-…", "amount": 5000000 }
    ]
  }'
200 OKresponse
{
  "success": true,
  "data": {
    "status": "released",
    "deal_status": "in_progress",
    "disbursements": [
      { "amount": 25000000, "currency": "IDR", "status": "queued" },
      { "amount": 5000000, "currency": "IDR", "status": "queued" }
    ]
  }
}
Webhookmilestone.released
X-RekberPay-Event: milestone.released
X-RekberPay-Delivery: <delivery id>
X-RekberPay-Signature: t=<unix seconds>,v1=<hex>

{
  "event": "milestone.released",
  "amount": 30000000,
  "summary": "Released DEAL-2026-0009 / Tooling
    and proof approval in 2 payouts",
  "livemode": false,
  "data": { "next": { "status": "released" } }
}
verify.jsHMAC-SHA256 over t.body
const expected = createHmac('sha256', secret)
  .update(`${t}.${rawBody}`).digest();
return signatures.some((sig) =>
  timingSafeEqual(expected, Buffer.from(sig, 'hex')));

B2B escrow FAQ

More answers live in the Enterprise getting started guide. To compare both products, see the RekberPay Enterprise overview.

Does my counterparty need a RekberPay account?

No. A company that does not use RekberPay is a plain counterparty and your team records its deliveries. If it runs RekberPay Enterprise, link the workspaces so it can see the deal and upload evidence itself.

Who pays the fee?

The fee is a share of the deal total, set in your terms; the examples in our docs use the default of 2 percent. By default the payer pays all of it. You can let the partner pay or split it, and a linked partner can accept or counter before funding. The fee is shown before anything is charged.

When do two approvers kick in?

On milestones from Rp 100.000.000 by default. Admins can change the threshold in Settings. Below it, one finance approver decides. Whoever submitted the evidence can never approve it.

How does the payer fund a milestone in Live?

By bank transfer that RekberPay checks, by QRIS, or through a payment gateway. The milestone turns funded only when RekberPay has the money. The paying workspace bears the small payment method fee.

What happens in a dispute?

The money stays held. RekberPay looks at the evidence from both sides and decides: the milestone goes back to funded so the work carries on, it is released to the counterparty, or it is cancelled.

Can we try it without real money?

Yes. Every workspace starts in Sandbox, where you record funding yourself and releases settle as test data. Sandbox stays open after Live unlocks, with its own rpe_test_ keys and webhook endpoints.

  • Our projects get paid in stages, so we split each deal into milestones and two of us have to sign off before anything goes out. Finance finally stopped asking me for a spreadsheet every Friday.
    Brama DiwangkaraSolusiNegeri

Run your next purchase order through escrow

Create a workspace and rehearse the whole deal in Sandbox today. Send your business documents when you are ready, and Live unlocks next to your sandbox.

  • KYB-verified onboarding
  • Dedicated account manager
  • Custom integration support