# Escrow API for Marketplaces in Indonesia | RekberPay

> Marketplace escrow over one API: create buyer and seller accounts, take payment at a hosted checkout, release funds and pay sellers out. Start in sandbox.

URL: https://rekberpay.com/enterprise/platform-api

## 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.

[Start in the sandbox](https://rekberpay.com/enterprise/register)[Read the API docs](https://docs.rekberpay.com/guides/platform-overview)

- 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, used** Order ORD-55012 on your marketplace

- Camera body Rp 4.500.000
- RekberPay fee Rp 90.000
- Payment method fee Shown per method
- You pay Rp 4.590.000 + method fee

QRIS Virtual account Bank transfer

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

Seller balance seller-2001 Rp 4.500.000 **BCA ••7890**Budi Santoso Name matched

- milestone.paid
- milestone.shipped
- milestone.released
- withdrawal.settled

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

- 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](https://rekberpay.com/enterprise/b2b-escrow)

1. 01 Checkout Create a checkout link for the milestone and send the buyer there. The link works for 30 minutes. Buyer pays Amount, 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 RekberPay Not 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. Released To 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 balance At 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 bank Net 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

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

#### Users users

- POST /users Create a buyer or seller, or link someone who already has an account
- GET /users/:ref Link, claim and KYC status, and limits
- PATCH /users/:ref Change an unclaimed user's name, phone or email
- DEL /users/:ref Unlink a user
- POST /users/:ref/claim-link Let a user take over their account

#### Orders and checkout orders

- POST /deals Create an order with one or more milestones
- GET /deals/:id Check one order, for example to see it paid
- GET /deals List orders by user or status
- POST /deals/:id/cancel Cancel an order before payment
- POST /deals/:id/milestones/:mid/checkout Get the buyer's checkout link

#### Shipping, release and disputes orders

- POST /deals/:id/milestones/:mid/ship The seller shipped; the auto release clock starts
- POST /deals/:id/milestones/:mid/extend Give the buyer more time
- POST /deals/:id/milestones/:mid/confirm Confirm for the buyer; releases after 6 h. Needs orders:confirm , off by default
- POST /deals/:id/milestones/:mid/dispute Report a problem with an order
- POST /deals/:id/milestones/:mid/dispute/evidence Add evidence to a dispute

#### Balances and withdrawals balance:read, withdraw

- GET /users/:ref/balance Show a user's balance
- POST /users/:ref/bank-accounts Add a payout account; name check and 24 h cooling-off
- GET /users/:ref/bank-accounts List a user's payout accounts
- POST /users/:ref/withdrawals Pay a user out
- GET /users/:ref/withdrawals/:id Follow a withdrawal

#### KYC kyc

- POST /users/:ref/kyc Verify a seller's identity; lifts the non-KYC limits
- GET /users/:ref/kyc Read the KYC result

#### Ratings and settings ratings

- POST /deals/:id/ratings Rate a finished order for the buyer or the seller
- GET /users/:ref/reputation Read a user's reputation (scope users )
- GET /settings Read 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" }' Created response, trimmed { "status" : "awaiting_funding" , "platform_fee" : 90000 , "milestones" : [ { "status" : "awaiting_payment" , "funding_amount" : 4590000 , "payout_amount" : 4500000 } ] }

1. 01 Sandbox 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. 02 Sandbox 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. 03 In review Verify your business Send your KYB documents. Approval unlocks Live and turns Platform on there. Reviewed in 1 to 3 business days
4. 04 Live 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

#### 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](https://docs.rekberpay.com/guides/platform-overview) and the [Platform API reference](https://docs.rekberpay.com/reference/enterprise-platform). To compare both products, see the [RekberPay Enterprise overview](https://rekberpay.com/enterprise#products).

#### 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. **Redo** TemanQRIS

### 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.

[Start in the sandbox](https://rekberpay.com/enterprise/register)[Read the API docs](https://docs.rekberpay.com/guides/platform-overview)

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