Skip to content

Enterprise overview ​

The enterprise API powers the RekberPay business dashboard. A company gets a workspace, invites its team with roles, and runs B2B deals as a series of funded milestones. Each milestone moves through funding, evidence, approval and release. Money only leaves escrow to a payout instruction that RekberPay has verified and signed. Everything the dashboard does is available here, so you can drive the same flow from your ERP or procurement system. Start with the Enterprise quickstart.

Base URL and answers ​

All paths are under https://api.rekberpay.com/v1/enterprise. Every JSON answer uses the same envelope:

json
{ "success": true, "data": {} }

Errors look like this (see Errors for the shared format):

json
{ "success": false, "error": { "code": "FORBIDDEN", "message": "Your workspace role does not allow this action" } }

Lists take page and limit (at most 50) and answer with pagination: { page, limit, total, total_pages }, unless the endpoint says otherwise. Every enterprise answer is sent with Cache-Control: private, no-store.

Authentication ​

MethodWhenHeader
Workspace API keyServer-to-server integrations (recommended)Authorization: Bearer rpe_...
Personal API keyScripts that act as one userAuthorization: Bearer <key>
Dashboard sessionThe dashboard in a browserSession cookie, plus X-CSRF-Token on writes

A personal key acts as the user who created it, with that user's role. API keys of both kinds are refused (403 KEY_NOT_ALLOWED) on /me, /invites/*, /notifications and /api-keys, and on any POST, PATCH or DELETE under /members, /settings and /webhooks. Those are dashboard actions.

Workspace API keys ​

A workspace key starts with rpe_, belongs to one workspace and is shown once when it is created. Admins and owners create and revoke keys in the dashboard (Enterprise API keys).

  • Workspace. The key names its workspace, so X-Enterprise-Account is not needed. Sending a different workspace ID answers 403 NO_WORKSPACE.
  • Scopes. A read key can call every GET and acts as a viewer. A read and write key acts with the role of the admin who created it. A read-only key gets 403 SCOPE_REQUIRED on any other method.
  • Where it works. Only under /v1/enterprise. Anywhere else it gets 401 WORKSPACE_KEY_ONLY.
  • Lifetime. The key works until it is revoked or its creator leaves the workspace (then 401 INVALID_TOKEN). Last use is recorded at most once a minute.
  • Limit. Up to 10 active keys per workspace (409 KEY_LIMIT).

Choosing the workspace ​

A user can belong to more than one workspace. With a session or personal key, send the workspace ID in X-Enterprise-Account:

http
X-Enterprise-Account: fffffff2-ffff-4fff-8fff-ffffffffffff

Without it, the API uses the workspace you joined first. A malformed ID answers 400 INVALID_ACCOUNT, and a workspace you are not an active member of answers 403 NO_WORKSPACE. GET /v1/enterprise/me lists every workspace you belong to.

Roles ​

Each endpoint names the lowest role that may call it. Higher roles can do everything below them.

RoleCan do
viewerRead everything in the workspace
operatorCreate and edit deals, counterparties, documents, notes and templates, submit evidence, open disputes
financeDecide approvals, release milestones, fund in the sandbox, manage payout instructions, export reports
adminInvite and manage members, change settings, manage API keys and webhooks
ownerEverything, including granting or removing the owner role

A role that is too low answers 403 FORBIDDEN.

Idempotency ​

Writes that move money or create records accept an Idempotency-Key header (a UUID v4). A retry with the same key and body returns the first answer with Idempotent-Replay: true; the same key with another body answers 422 IDEMPOTENCY_KEY_CONFLICT; a retry while the first call still runs answers 409 IDEMPOTENCY_KEY_IN_FLIGHT. Keys expire after 24 hours. Each endpoint page says whether the route honours the header. See Idempotency and retries.

Money and masking ​

Amounts are numbers in the deal currency (IDR by default), in whole rupiah. Bank account numbers are never returned in full: payout answers carry account_number_masked, for example 3320****43.

Sandbox and live workspaces ​

New workspaces start in the sandbox. There a finance member can mark a milestone funded with POST .../fund. In a live workspace RekberPay confirms funding when the money arrives, and that endpoint answers 403 LIVE_FUNDING_IS_PLATFORM_CONFIRMED. See Testing in a sandbox workspace.

Limits ​

Every call counts against the shared budget of 300 requests a minute per user. Some routes have their own budget per user per minute as well:

RoutesBudget
Fund, submit evidence, dispute, decide, release, payout instruction writes, member writes30 a minute
GET /v1/enterprise/overview60 a minute
Templates, notes, API keys and webhooks60 a minute
GET /v1/enterprise/reports/summary30 a minute
Audit export, deals export, payouts export5 a minute

Over budget you get 429 with RATE_LIMITED and a Retry-After header. See Errors and rate limits.

What RekberPay does on its side ​

RekberPay operations verifies counterparties and payout instructions, confirms funding on live workspaces, resolves disputes and settles payouts. Each of those actions appears in your event feed with actor_label: "RekberPay ops".

All enterprise endpoints ​

Workspace, members and counterparties ​

MethodPathEndpointAuth
GET/v1/enterprise/meGet the current workspaceAny signed-in user, dashboard only
POST/v1/enterprise/invites/:memberId/acceptAccept an inviteAny signed-in user, dashboard only
GET/v1/enterprise/membersList membersviewer
POST/v1/enterprise/membersInvite a memberadmin, dashboard only
PATCH/v1/enterprise/members/:idChange a member's roleadmin, dashboard only
DELETE/v1/enterprise/members/:idRemove a memberadmin, dashboard only
PATCH/v1/enterprise/members/me/preferencesUpdate your notification togglesviewer, dashboard only
GET/v1/enterprise/settingsGet workspace settingsviewer
PATCH/v1/enterprise/settingsChange workspace settingsadmin, dashboard only
GET/v1/enterprise/notificationsList workspace notificationsviewer, dashboard only
POST/v1/enterprise/notifications/readMark workspace notifications readviewer, dashboard only
GET/v1/enterprise/counterpartiesList counterpartiesviewer
POST/v1/enterprise/counterpartiesAdd a counterpartyoperator
PATCH/v1/enterprise/counterparties/:idUpdate a counterpartyoperator

Deals and milestones ​

MethodPathEndpointAuth
GET/v1/enterprise/dealsList dealsviewer
GET/v1/enterprise/deals/:idGet a dealviewer
POST/v1/enterprise/dealsCreate a dealoperator
PATCH/v1/enterprise/deals/:idUpdate a draft dealoperator
POST/v1/enterprise/deals/:id/milestonesAdd a milestoneoperator
PATCH/v1/enterprise/deals/:id/milestones/:midUpdate a draft milestoneoperator
POST/v1/enterprise/deals/:id/activateActivate a dealoperator
POST/v1/enterprise/deals/:id/cancelCancel a dealoperator
POST/v1/enterprise/deals/:id/milestones/:mid/fundFund a milestone (sandbox)finance
POST/v1/enterprise/deals/:id/milestones/:mid/submit-evidenceSubmit evidenceoperator
POST/v1/enterprise/deals/:id/milestones/:mid/disputeDispute a milestoneoperator

Platform fee ​

MethodPathEndpointAuth
GET/v1/enterprise/feesGet the fee termsviewer
POST/v1/enterprise/fees/previewPreview a deal feeviewer
PUT/v1/enterprise/fees/default-allocationSet the default splitowner, dashboard only

Approvals and payouts ​

MethodPathEndpointAuth
GET/v1/enterprise/approvalsList the approval queueviewer
GET/v1/enterprise/approvals/:milestoneIdGet an approvalviewer
POST/v1/enterprise/approvals/:milestoneId/decideDecide on evidencefinance
POST/v1/enterprise/deals/:id/milestones/:mid/releaseRelease a milestonefinance
GET/v1/enterprise/payoutsList payoutsviewer
GET/v1/enterprise/payout-instructionsList payout instructionsviewer
GET/v1/enterprise/payout-instructions/:idGet a payout instructionviewer
POST/v1/enterprise/payout-instructionsAdd a payout instructionfinance
PATCH/v1/enterprise/payout-instructions/:idUpdate a payout instructionfinance
DELETE/v1/enterprise/payout-instructions/:idDelete a payout instructionfinance

Documents and notes ​

MethodPathEndpointAuth
GET/v1/enterprise/documentsList documentsviewer
POST/v1/enterprise/documentsAdd a documentoperator
DELETE/v1/enterprise/documents/:idDelete a documentoperator
GET/v1/enterprise/deals/:id/notesList notesviewer
POST/v1/enterprise/deals/:id/notesAdd a noteoperator
DELETE/v1/enterprise/deals/:id/notes/:nidDelete a noteoperator

Deal templates ​

MethodPathEndpointAuth
GET/v1/enterprise/templatesList templatesviewer
POST/v1/enterprise/templatesCreate a templateoperator
PATCH/v1/enterprise/templates/:idUpdate a templateoperator
DELETE/v1/enterprise/templates/:idDelete a templateoperator

Events and audit ​

MethodPathEndpointAuth
GET/v1/enterprise/overviewGet the overviewviewer
GET/v1/enterprise/eventsList eventsviewer
GET/v1/enterprise/audit/export.csvExport the audit logfinance
GET/v1/enterprise/reconciliationCheck the booksviewer

Reports ​

MethodPathEndpointAuth
GET/v1/enterprise/reports/summaryGet the summary reportviewer
GET/v1/enterprise/reports/deals.csvExport dealsfinance
GET/v1/enterprise/reports/disbursements.csvExport payoutsfinance

API keys ​

MethodPathEndpointAuth
GET/v1/enterprise/api-keysList API keysadmin, dashboard only
POST/v1/enterprise/api-keysCreate an API keyadmin, dashboard only
DELETE/v1/enterprise/api-keys/:idRevoke an API keyadmin, dashboard only

Webhooks ​

MethodPathEndpointAuth
GET/v1/enterprise/webhooksList webhooksviewer
POST/v1/enterprise/webhooksAdd a webhookadmin, dashboard only
PATCH/v1/enterprise/webhooks/:idUpdate, pause or resume a webhookadmin, dashboard only
DELETE/v1/enterprise/webhooks/:idDelete a webhookadmin, dashboard only
POST/v1/enterprise/webhooks/:id/rotate-secretRotate the signing secretadmin, dashboard only
POST/v1/enterprise/webhooks/:id/testSend a test eventadmin, dashboard only
GET/v1/enterprise/webhooks/:id/deliveriesList deliveriesviewer
POST/v1/enterprise/webhooks/:id/deliveries/:did/redeliverSend a delivery againadmin, dashboard only

Escrow, payment services and B2B deals for Indonesian businesses.