Platform mode (PaaS)
Platform mode lets a marketplace run RekberPay escrow behind its own product. Your buyers and sellers meet on your site. RekberPay holds the money, runs the checkout, decides disputes and pays out. Your server talks to RekberPay through /v1/enterprise/platform and gets signed webhooks back.
Platform mode is part of Enterprise and is on for every Enterprise workspace, so the team, roles, API keys, webhooks, sandbox and event feed you know from Enterprise all apply. Business to business deals keep working next to it.
Which part do I use?
RekberPay has two API parts under Enterprise. Pick by who pays whom.
| Your job | Use | Start with |
|---|---|---|
| Pay your own suppliers or contractors, or run deals between two businesses, with approvals and milestone payouts | Enterprise deals (B2B) | Milestone deal |
| Run a marketplace where your users pay each other and stay on your site | Platform mode (this section) | Run a marketplace order |
| Give buyers and sellers accounts, or link ones who have one | Platform mode | Create and link users |
| Take the buyer's payment, ship, confirm and release | Platform mode | Checkout, Shipping and release |
| Handle a problem order | Platform mode | Disputes |
| Show balances and pay sellers out | Platform mode | Balances and withdrawals |
| Verify a seller, or rate a finished order | Platform mode | KYC, Ratings |
| Create a key that is safe to use | Both | Keep your keys safe |
Both parts share one workspace, one set of keys, webhooks and a sandbox, so you can use them side by side. The call-by-call list is further down.
Who it is for
- Marketplaces and platforms where one user pays another for goods or services, and you want the money held until the buyer is happy.
- You want your users to stay on your site. They never sign up with RekberPay first, yet each of them is a real RekberPay user who can claim the account later and use RekberPay directly.
It is not for paying your own suppliers. For that, use a normal Enterprise milestone deal.
Before you write code
- Call RekberPay only from your server, never from a browser or an app (
403 KEY_IN_BROWSER). - Send an
Idempotency-Keywith every write (400 IDEMPOTENCY_KEY_REQUIRED). - Use one key per job, with only the scopes it needs. The full rules are below and in Keep your keys safe.
How to get it
- Create an Enterprise workspace (Get started with Enterprise). It works in Sandbox from the first day, and Platform is already on with the standard terms: a 2% fee with a Rp5.000 minimum per order, paid by the buyer, a 6 hour confirm delay, no daily cap, and every scope but
orders:confirm. There is nothing to request. - Create a Sandbox workspace API key (
rpe_test_) with the Platform scopes you need (Keep your keys safe). It works at once, from any IP. - Build and test everything in Sandbox.
- To go live you need two things: your business verification (KYB) approved, which unlocks Live and turns Platform on there, and a Live key (
rpe_live_) with an IP allowlist that RekberPay approved. Enter your server IPs on the key in the dashboard (Developers) and send them; RekberPay reviews them. Until then a live call answers403 IP_ALLOWLIST_REQUIRED(going live).
Your account manager can change your terms (fee, daily cap, scopes). Read them at any time with
GET /v1/enterprise/platform/settings.
Which call do I use?
Paths are under https://api.rekberpay.com/v1/enterprise/platform. The scope is what your key needs besides read, plus write for any change. Each call links to its reference section.
| I want to | Call | Scope | Guide |
|---|---|---|---|
| Read your fee, cap and allowed scopes | GET /settings | none | |
| Give a buyer or seller a RekberPay account | POST /users | users | Create and link users |
| Link someone who already has an account (they confirm by email) | POST /users | users | Existing users |
| Read a user: link, claim and KYC status, limits | GET /users/:ref | users | |
| Change an unclaimed user's name, phone or email | PATCH /users/:ref | users | Change details |
| Unlink a user | DELETE /users/:ref | users | Unlink, and link again |
| Let a user take over their account | POST /users/:ref/claim-link | users | Claim |
| Verify a seller's identity | POST /users/:ref/kyc | kyc | KYC through the API |
| Read the KYC result | GET /users/:ref/kyc | kyc | Read the result |
| Sandbox: approve or reject a KYC yourself | POST /users/:ref/kyc/simulate | kyc | KYC in the sandbox |
| Create an order | POST /deals | orders | Run an order end to end |
Check one order, for example to see paid without webhooks | GET /deals/:id | orders | Statuses |
| List orders, by user or status | GET /deals | orders | |
| Cancel an order before payment | POST /deals/:id/cancel | orders | |
| Take the buyer's payment | POST /deals/:id/milestones/:mid/checkout | orders | Checkout for buyers |
| Sandbox: pay with test money | POST /v1/platform/checkout/:token/simulate | none, the checkout token is the key | Checkout in the sandbox |
| Tell RekberPay the seller shipped | POST /deals/:id/milestones/:mid/ship | orders | Shipping and auto release |
| Give the buyer more time | POST /deals/:id/milestones/:mid/extend | orders | Extend |
| Confirm receipt for the buyer (the release waits 6 h) | POST /deals/:id/milestones/:mid/confirm | orders:confirm | Your confirm |
| Sandbox: release a shipped or pending milestone now | POST /deals/:id/milestones/:mid/simulate/advance-time | orders | Release now |
| Report a problem with an order | POST /deals/:id/milestones/:mid/dispute | orders | Disputes |
| Add evidence to a dispute | POST /deals/:id/milestones/:mid/dispute/evidence | orders | Add evidence |
| Show a user's balance | GET /users/:ref/balance | balance:read | Balances and withdrawals |
| Add a payout bank account (24 h cooling-off) | POST /users/:ref/bank-accounts | withdraw | Bank accounts |
| List a user's payout bank accounts | GET /users/:ref/bank-accounts | withdraw | |
| Sandbox: end a bank account's cooling-off now | POST /users/:ref/bank-accounts/:id/simulate/skip-cooling-off | withdraw | Skip the cooling-off |
| Pay a user out | POST /users/:ref/withdrawals | withdraw | Withdrawals |
| Follow a withdrawal | GET /users/:ref/withdrawals/:id | withdraw | Statuses |
| Rate a finished order for the buyer or the seller | POST /deals/:id/ratings | ratings | Ratings |
| Read who rated an order | GET /deals/:id/ratings | ratings | Publication |
| Read a user's reputation | GET /users/:ref/reputation | users | Reputation |
| Show unclaimed accounts on public profiles | PUT /settings/profile-visibility | dashboard, admin | Unclaimed accounts |
| Hear about changes without polling | Webhooks | none | Receiving webhooks |
One order, from user to payout
Your server RekberPay Buyer / seller
----------- --------- --------------
1. POST /users (buyer) ---> account + link (active)
POST /users (seller) ---> account + link (active)
2. POST /deals ---> deal, milestones awaiting_payment
3. POST .../checkout ---> checkout URL (30 min) ---------> buyer pays on
rekberpay.com/checkout/p/...
<--- milestone.paid (webhook)
4. POST .../ship ---> shipped, auto release clock starts
<--- milestone.shipped
5. Buyer confirms on RekberPay, or you confirm (waits 6 h),
or nobody acts and the clock runs out
<--- milestone.released / milestone.auto_released
seller's partner balance += amount - seller fee
6. POST /users/:ref/bank-accounts (name check, 24 h cooling-off)
POST /users/:ref/withdrawals ---> payout to the seller's bank
<--- withdrawal.requested, withdrawal.settledA dispute can stop the order at any point after payment. RekberPay's mediation team then releases, refunds, splits or resumes it (Disputes on marketplace orders).
What RekberPay staff do
RekberPay runs the parts that need a human or a trusted clock, so you do not build them.
- Terms and switch-off. A superadmin sets your fee, daily cap, confirm delay and key scopes, can freeze or unfreeze you, and can switch Platform off for your workspace (every Platform call then answers
404 NOT_FOUND). - IP allowlists. A superadmin approves or rejects each IP list you send for a Platform key, with a reason when rejected. Your approved list keeps working while a newer request waits.
- Disputes. The mediation team decides release, refund, split or resume. A large decision needs a second approver.
- Withdrawals. A live withdrawal at or above the approval threshold waits for a second approver (
pending_review). Fraud screening comes first. - Frozen partners. While you are frozen every call answers
423 PLATFORM_FROZEN, and no automatic release, pending confirm or new withdrawal goes through. A buyer can still confirm or dispute on RekberPay, and a person can still withdraw their own balance (with two approvers). Unfreezing lets the held releases run on the next sweep. - Watching for abuse. Staff are alerted when a partner confirms many of its orders itself, hits its daily cap, or sees a jump in withdrawals. They may call you or freeze you.
When things happen
| What | When |
|---|---|
Automatic release at auto_release_at | RekberPay checks every 5 minutes, so it lands within about 5 minutes after the time |
Your confirm (orders:confirm) | After 6 hours by default (confirm_delay_hours), then within about 5 minutes |
| A webhook | Within about 30 seconds of the event |
| Overview numbers on your dashboard | Can be up to about 15 seconds behind after an automatic release |
| A bank account's cooling-off | 24 hours |
Rules that apply everywhere
- Your users are your refs. You name every user with your own
partner_user_ref(1 to 128 letters, digits or_ . : @ + = -). RekberPay never returns its internal user ids. - Server side only. Workspace keys work only from your server. A request with a browser
OriginorSec-Fetch-Siteheader is refused (403 KEY_IN_BROWSER). - Every write needs an
Idempotency-Key. A key write without one answers400 IDEMPOTENCY_KEY_REQUIRED. Reuse the same key when you retry. - Out of scope is 404. Another partner's users, deals or withdrawals, a RekberPay staff account, and a user who has not linked to you all answer
404 NOT_FOUND, never403. - Sandbox first. In Sandbox no email leaves RekberPay, no gateway is charged and every deal and balance is test data. The links an email would carry come back in the API answer instead.
- Money stays with the user. Seller money lands in the seller's partner balance at RekberPay. You see and move only the money that came from your own orders, unless the user allowed you to manage their whole balance.