Escrow API for marketplaces

A payment API for marketplaces in Indonesia. Your buyers and sellers stay on your site while RekberPay holds the money, runs the checkout, decides disputes and pays sellers out.

  • Sandbox from day one

    Platform is on for every Enterprise workspace. Build with test money and a rpe_test_ key straight away. There is nothing to request.

  • Live after business verification

    Once your KYB is approved and RekberPay approves the IP allowlist on your live key, real orders flow. See the path

rekberpay.com/checkout/p/…
Fujifilm X-T30 body, usedOrder ORD-55012 on your marketplace
  • Camera bodyRp 4.500.000
  • RekberPay feeRp 90.000
  • Payment method feeShown per method
  • You payRp 4.590.000 + method fee

RekberPay holds the money until the order is released. This link works for 30 minutes.

Seller balanceseller-2001
Rp 4.500.000
BCA ••7890Budi Santoso
Name matched
  • milestone.paid
  • milestone.shipped
  • milestone.released
  • withdrawal.settled

Sample order from our sandbox walkthrough. Names and amounts are test data.

Marketplace escrow use cases

Wherever one of your users pays another for goods or services, and the money should wait until the buyer is happy.

  • Goods marketplaces

    The buyer pays at checkout, the seller ships, and you report the tracking number. The money releases when the buyer confirms, or on its own when the clock runs out.

    Auto release
    72 h after shipping with tracking, 36 h without
  • Services and staged work

    One order can hold several milestones. Each is paid, delivered and released on its own, so a long job does not tie up the whole amount.

    Milestones
    One or more per order
  • Platforms that keep users at home

    Your users never sign up with RekberPay first. Each one is still a real RekberPay user who can claim the account later, and ratings count on their public profile.

    Identity
    Your own partner_user_ref
  • Paying your own suppliers?

    That is not a marketplace order. Use B2B escrow for milestone deals with approvals, in the same workspace.

    See B2B milestone escrow

How money moves through marketplace escrow

From checkout to the seller's bank, each step is a call you make or a signed webhook you receive.

  1. 01

    Checkout

    Create a checkout link for the milestone and send the buyer there. The link works for 30 minutes.

    Buyer paysAmount, their fee share and the method fee
    POST …/checkout
  2. 02

    Escrow

    RekberPay confirms the payment and holds it. Ask the seller to ship only after this event.

    Held by RekberPayNot by you, not by the seller
    milestone.paid
  3. 03

    Release

    Report shipping. The buyer confirms, you confirm and it releases 6 hours later, or the clock runs out.

    ReleasedTo the seller's balance
    milestone.released
  4. 04

    Balance

    The seller's partner balance grows by the amount minus the seller's fee share. Show it in your app.

    Seller balanceAt RekberPay, per user
    GET /users/:ref/balance
  5. 05

    Withdrawal

    Pay out to a bank account whose holder name matches the seller, after a 24 hour cooling-off.

    Seller's bankNet of the withdrawal fee
    withdrawal.settled

Disputes

You or the buyer can stop an order any time after payment. RekberPay's mediation team then releases, refunds, splits or resumes it, and a large decision needs a second approver. dispute.opened

Ratings

Rate a finished order for the buyer or the seller. A rating stays private until both sides rate or 3 days pass, then counts on their RekberPay profile. rating.published

Escrow API endpoints

Every call needs read, plus write for changes and the scope shown on each group. Every write takes an Idempotency-Key.

Paths are under https://api.rekberpay.com/v1/enterprise/platform

Users users

  • POST/usersCreate a buyer or seller, or link someone who already has an account
  • GET/users/:refLink, claim and KYC status, and limits
  • PATCH/users/:refChange an unclaimed user's name, phone or email
  • DEL/users/:refUnlink a user
  • POST/users/:ref/claim-linkLet a user take over their account

Orders and checkout orders

  • POST/dealsCreate an order with one or more milestones
  • GET/deals/:idCheck one order, for example to see it paid
  • GET/dealsList orders by user or status
  • POST/deals/:id/cancelCancel an order before payment
  • POST/deals/:id/milestones/:mid/checkoutGet the buyer's checkout link

Shipping, release and disputes orders

  • POST/deals/:id/milestones/:mid/shipThe seller shipped; the auto release clock starts
  • POST/deals/:id/milestones/:mid/extendGive the buyer more time
  • POST/deals/:id/milestones/:mid/confirmConfirm for the buyer; releases after 6 h. Needs orders:confirm, off by default
  • POST/deals/:id/milestones/:mid/disputeReport a problem with an order
  • POST/deals/:id/milestones/:mid/dispute/evidenceAdd evidence to a dispute

Balances and withdrawals balance:read, withdraw

  • GET/users/:ref/balanceShow a user's balance
  • POST/users/:ref/bank-accountsAdd a payout account; name check and 24 h cooling-off
  • GET/users/:ref/bank-accountsList a user's payout accounts
  • POST/users/:ref/withdrawalsPay a user out
  • GET/users/:ref/withdrawals/:idFollow a withdrawal

KYC kyc

  • POST/users/:ref/kycVerify a seller's identity; lifts the non-KYC limits
  • GET/users/:ref/kycRead the KYC result

Ratings and settings ratings

  • POST/deals/:id/ratingsRate a finished order for the buyer or the seller
  • GET/users/:ref/reputationRead a user's reputation (scope users)
  • GET/settingsRead your fee, daily cap and allowed scopes
POST/deals
curl -s -X POST "$API/deals" "${auth[@]}" "${json[@]}" -H "$(idem)" -d '{
  "buyer_ref": "buyer-1001",
  "seller_ref": "seller-2001",
  "title": "Fujifilm X-T30 body, used",
  "partner_order_ref": "ORD-55012",
  "milestones": [
    { "title": "Camera body", "amount": 4500000 }
  ],
  "fee_bearer": "buyer"
}'
Createdresponse, trimmed
{
  "status": "awaiting_funding",
  "platform_fee": 90000,
  "milestones": [
    {
      "status": "awaiting_payment",
      "funding_amount": 4590000,
      "payout_amount": 4500000
    }
  ]
}

From sandbox to live

Build everything with test money first. Live needs two things: your business verified, and an IP allowlist on your live key that RekberPay approved.

  1. 01Sandbox

    Create a workspace

    It opens in Sandbox with Platform already on and the standard terms. There is nothing to request.

    About ten minutes, with your company's NIB
  2. 02Sandbox

    Build with a rpe_test_ key

    It works at once, from any IP. No email leaves RekberPay and no gateway is charged.

    Four shortcuts pay, release, settle KYC and skip the cooling-off
  3. 03In review

    Verify your business

    Send your KYB documents. Approval unlocks Live and turns Platform on there.

    Reviewed in 1 to 3 business days
  4. 04Live

    Go live with a rpe_live_ key

    Enter your server IPs on the key. Until RekberPay approves them, live calls answer 403 IP_ALLOWLIST_REQUIRED.

    Your sandbox stays, next to Live
rpe_test_…Any IP. Test data only. Webhooks arrive with livemode: false.
Sandbox
rpe_live_…Only from approved IPs, up to 20 addresses or CIDR ranges per key.
Live

Escrow API security

A Platform key can move your users' money, so RekberPay treats it like a bank password and enforces the rules for you.

Keys

  • Server side only. A request with a browser Origin is refused with 403 KEY_IN_BROWSER.
  • One key per job: an order service with users and orders, a payout service with withdraw.
  • Live Platform keys work only from IPs RekberPay approved.

Requests

  • Every write needs an Idempotency-Key, so a retry never opens a second order.
  • Another partner's users or orders answer 404, never 403.
  • You name users with your own refs. RekberPay never returns its internal ids.

Money

  • Seller money stays in that user's balance at RekberPay, never in yours.
  • Large live withdrawals pass fraud screening and wait for a second RekberPay approver.
  • Webhooks are signed with HMAC-SHA256, with separate endpoints for each mode.

Marketplace escrow FAQ

The full answer to each is in the Platform mode guide and the Platform API reference. To compare both products, see the RekberPay Enterprise overview.

Do my users have to sign up with RekberPay?

No. Your server creates their accounts with POST /users and they stay on your site. Someone who already has a RekberPay account is linked instead and confirms by email. Any user can claim their account later and use RekberPay directly.

What does it cost?

The standard terms are a 2% fee per order with a Rp 5.000 minimum, paid by the buyer. You can set fee_bearer to buyer, seller or split per order. The payment method fee is added at checkout and paid by the buyer. Your account manager can change your terms, and GET /settings always shows them.

Can my platform confirm receipt for the buyer?

Only with the orders:confirm scope, which is off by default and must be allowed by RekberPay. Your confirm releases the money after 6 hours, and the buyer is told so they can still dispute.

Who handles disputes?

RekberPay's mediation team. You or the buyer open the dispute and add evidence over the API. The team releases, refunds, splits or resumes the order, and you get a webhook with the outcome.

What do I need to go live?

Your business verification approved, which unlocks Live, and a rpe_live_ key whose IP allowlist RekberPay approved. Your sandbox, its keys and its test orders stay as they are.

Can I also run B2B deals?

Yes. Platform mode sits next to B2B milestone deals in the same workspace, with the same team, keys, webhooks and sandbox. Use B2B escrow to pay your own suppliers, and the Platform API for orders between your users.

  • We built the whole flow against the sandbox first, then switched to live without changing our code. The signed webhooks line up with our own ledger, so reconciliation is boring now. Boring is exactly what you want with money.
    RedoTemanQRIS

Run your first order in the sandbox today

Create a workspace, make a rpe_test_ key and take one order from checkout to withdrawal with test money. Go live when your business is verified.

  • Free sandbox with test money
  • Signed webhooks per mode
  • Custom integration support