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:
{ "success": true, "data": {} }Errors look like this (see Errors for the shared format):
{ "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
| Method | When | Header |
|---|---|---|
| Workspace API key | Server-to-server integrations (recommended) | Authorization: Bearer rpe_... |
| Personal API key | Scripts that act as one user | Authorization: Bearer <key> |
| Dashboard session | The dashboard in a browser | Session 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-Accountis not needed. Sending a different workspace ID answers403 NO_WORKSPACE. - Scopes. A
readkey can call everyGETand acts as a viewer. Areadandwritekey acts with the role of the admin who created it. A read-only key gets403 SCOPE_REQUIREDon any other method. - Where it works. Only under
/v1/enterprise. Anywhere else it gets401 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:
X-Enterprise-Account: fffffff2-ffff-4fff-8fff-ffffffffffffWithout 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.
| Role | Can do |
|---|---|
viewer | Read everything in the workspace |
operator | Create and edit deals, counterparties, documents, notes and templates, submit evidence, open disputes |
finance | Decide approvals, release milestones, fund in the sandbox, manage payout instructions, export reports |
admin | Invite and manage members, change settings, manage API keys and webhooks |
owner | Everything, 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:
| Routes | Budget |
|---|---|
| Fund, submit evidence, dispute, decide, release, payout instruction writes, member writes | 30 a minute |
GET /v1/enterprise/overview | 60 a minute |
| Templates, notes, API keys and webhooks | 60 a minute |
GET /v1/enterprise/reports/summary | 30 a minute |
| Audit export, deals export, payouts export | 5 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
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/me | Get the current workspace | Any signed-in user, dashboard only |
POST | /v1/enterprise/invites/:memberId/accept | Accept an invite | Any signed-in user, dashboard only |
GET | /v1/enterprise/members | List members | viewer |
POST | /v1/enterprise/members | Invite a member | admin, dashboard only |
PATCH | /v1/enterprise/members/:id | Change a member's role | admin, dashboard only |
DELETE | /v1/enterprise/members/:id | Remove a member | admin, dashboard only |
PATCH | /v1/enterprise/members/me/preferences | Update your notification toggles | viewer, dashboard only |
GET | /v1/enterprise/settings | Get workspace settings | viewer |
PATCH | /v1/enterprise/settings | Change workspace settings | admin, dashboard only |
GET | /v1/enterprise/notifications | List workspace notifications | viewer, dashboard only |
POST | /v1/enterprise/notifications/read | Mark workspace notifications read | viewer, dashboard only |
GET | /v1/enterprise/counterparties | List counterparties | viewer |
POST | /v1/enterprise/counterparties | Add a counterparty | operator |
PATCH | /v1/enterprise/counterparties/:id | Update a counterparty | operator |
Deals and milestones
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/deals | List deals | viewer |
GET | /v1/enterprise/deals/:id | Get a deal | viewer |
POST | /v1/enterprise/deals | Create a deal | operator |
PATCH | /v1/enterprise/deals/:id | Update a draft deal | operator |
POST | /v1/enterprise/deals/:id/milestones | Add a milestone | operator |
PATCH | /v1/enterprise/deals/:id/milestones/:mid | Update a draft milestone | operator |
POST | /v1/enterprise/deals/:id/activate | Activate a deal | operator |
POST | /v1/enterprise/deals/:id/cancel | Cancel a deal | operator |
POST | /v1/enterprise/deals/:id/milestones/:mid/fund | Fund a milestone (sandbox) | finance |
POST | /v1/enterprise/deals/:id/milestones/:mid/submit-evidence | Submit evidence | operator |
POST | /v1/enterprise/deals/:id/milestones/:mid/dispute | Dispute a milestone | operator |
Platform fee
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/fees | Get the fee terms | viewer |
POST | /v1/enterprise/fees/preview | Preview a deal fee | viewer |
PUT | /v1/enterprise/fees/default-allocation | Set the default split | owner, dashboard only |
Approvals and payouts
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/approvals | List the approval queue | viewer |
GET | /v1/enterprise/approvals/:milestoneId | Get an approval | viewer |
POST | /v1/enterprise/approvals/:milestoneId/decide | Decide on evidence | finance |
POST | /v1/enterprise/deals/:id/milestones/:mid/release | Release a milestone | finance |
GET | /v1/enterprise/payouts | List payouts | viewer |
GET | /v1/enterprise/payout-instructions | List payout instructions | viewer |
GET | /v1/enterprise/payout-instructions/:id | Get a payout instruction | viewer |
POST | /v1/enterprise/payout-instructions | Add a payout instruction | finance |
PATCH | /v1/enterprise/payout-instructions/:id | Update a payout instruction | finance |
DELETE | /v1/enterprise/payout-instructions/:id | Delete a payout instruction | finance |
Documents and notes
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/documents | List documents | viewer |
POST | /v1/enterprise/documents | Add a document | operator |
DELETE | /v1/enterprise/documents/:id | Delete a document | operator |
GET | /v1/enterprise/deals/:id/notes | List notes | viewer |
POST | /v1/enterprise/deals/:id/notes | Add a note | operator |
DELETE | /v1/enterprise/deals/:id/notes/:nid | Delete a note | operator |
Deal templates
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/templates | List templates | viewer |
POST | /v1/enterprise/templates | Create a template | operator |
PATCH | /v1/enterprise/templates/:id | Update a template | operator |
DELETE | /v1/enterprise/templates/:id | Delete a template | operator |
Events and audit
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/overview | Get the overview | viewer |
GET | /v1/enterprise/events | List events | viewer |
GET | /v1/enterprise/audit/export.csv | Export the audit log | finance |
GET | /v1/enterprise/reconciliation | Check the books | viewer |
Reports
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/reports/summary | Get the summary report | viewer |
GET | /v1/enterprise/reports/deals.csv | Export deals | finance |
GET | /v1/enterprise/reports/disbursements.csv | Export payouts | finance |
API keys
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/api-keys | List API keys | admin, dashboard only |
POST | /v1/enterprise/api-keys | Create an API key | admin, dashboard only |
DELETE | /v1/enterprise/api-keys/:id | Revoke an API key | admin, dashboard only |
Webhooks
| Method | Path | Endpoint | Auth |
|---|---|---|---|
GET | /v1/enterprise/webhooks | List webhooks | viewer |
POST | /v1/enterprise/webhooks | Add a webhook | admin, dashboard only |
PATCH | /v1/enterprise/webhooks/:id | Update, pause or resume a webhook | admin, dashboard only |
DELETE | /v1/enterprise/webhooks/:id | Delete a webhook | admin, dashboard only |
POST | /v1/enterprise/webhooks/:id/rotate-secret | Rotate the signing secret | admin, dashboard only |
POST | /v1/enterprise/webhooks/:id/test | Send a test event | admin, dashboard only |
GET | /v1/enterprise/webhooks/:id/deliveries | List deliveries | viewer |
POST | /v1/enterprise/webhooks/:id/deliveries/:did/redeliver | Send a delivery again | admin, dashboard only |