Enterprise reports
All three endpoints take from and to as YYYY-MM-DD (UTC, both days included). The default is the last 90 days ending today, and the range may be at most 366 days. The CSV exports hold at most 10,000 rows and set X-Export-Truncated: true when there were more. Auth, roles, the workspace header and the shared limits are explained in Enterprise overview.
Endpoints
| 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 |
Get the summary report
- Auth: A workspace API key (
Authorization: Bearer rpe_...), a personal API key or a dashboard session. - Role: Any workspace member (
viewerand up). - Rate limit: 30 a minute per user for this route, plus the shared 300 a minute.
- Idempotency: Not needed. Reading has no side effects.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
from | string | No | First day, YYYY-MM-DD |
to | string | No | Last day, YYYY-MM-DD |
Example request
curl "https://api.rekberpay.com/v1/enterprise/reports/summary?from=2026-07-15&to=2026-10-13" \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY"const res = await fetch('https://api.rekberpay.com/v1/enterprise/reports/summary?from=2026-07-15&to=2026-10-13', {
headers: {
Authorization: `Bearer ${process.env.REKBERPAY_WORKSPACE_KEY}`,
},
});
const data = await res.json();import os
import requests
resp = requests.get(
"https://api.rekberpay.com/v1/enterprise/reports/summary?from=2026-07-15&to=2026-10-13",
headers={
"Authorization": f"Bearer {os.environ['REKBERPAY_WORKSPACE_KEY']}",
},
timeout=30,
)
print(resp.status_code, resp.json())<?php
$ch = curl_init('https://api.rekberpay.com/v1/enterprise/reports/summary?from=2026-07-15&to=2026-10-13');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('REKBERPAY_WORKSPACE_KEY'),
],
]);
$response = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);Example response
200 OK
{
"success": true,
"data": {
"range": {
"from": "2026-07-15",
"to": "2026-10-13"
},
"deals": {
"created": 11,
"by_status": {
"draft": 1,
"terms_review": 0,
"awaiting_funding": 1,
"funded": 1,
"in_progress": 2,
"disputed": 2,
"completed": 3,
"cancelled": 1
}
},
"money": {
"funded": 2215000000,
"released": 1614700000,
"queued": 283000000
},
"approvals": {
"median_hours": 4,
"decided": 13,
"revisions": 2
},
"disputes": {
"opened": 6,
"resolved": 0,
"rate_pct": 9.2
},
"top_counterparties": [
{
"id": "eeeeeee3-eeee-4eee-8eee-eeeeeeeeeeee",
"name": "Harbourline Components Pte Ltd",
"deals": 4,
"released": 255000000
},
{
"id": "33333338-3333-4333-8333-333333333333",
"name": "Selangor Precision Parts Sdn Bhd",
"deals": 2,
"released": 125000000
},
{
"id": "22222228-2222-4222-8222-222222222222",
"name": "PT Sinar Logistik Nusantara",
"deals": 2,
"released": 115500000
}
],
"monthly": [
{
"month": "2026-07",
"created": 0,
"funded": 0,
"released": 0,
"disputed": 0
},
{
"month": "2026-08",
"created": 0,
"funded": 0,
"released": 0,
"disputed": 0
},
{
"month": "2026-09",
"created": 1,
"funded": 5,
"released": 3,
"disputed": 0
}
]
}
}Lists are cut to the first 3 items and long text is shortened here.
| Field | Type | Description |
|---|---|---|
deals.created | integer | Deals created in the range; by_status splits them by current status |
money.funded | number | Amounts of milestone.funded events in the range |
money.released | number | Amounts of milestone.released events in the range |
money.queued | number | Payouts queued or processing now, whatever the range |
approvals.median_hours | number | null | Median time from evidence to approval |
disputes.rate_pct | number | Disputes opened per milestone funded, at most 100 |
top_counterparties | array | Up to 10, by released amount |
monthly | array | One bucket per calendar month in the range, oldest first |
Errors
| Status | Code | Cause |
|---|---|---|
400 | INVALID_QUERY | A bad date, from after to, or a range over 366 days |
401 | UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKEN | No session or key, the session expired, or the key is wrong or revoked |
400 | INVALID_ACCOUNT | X-Enterprise-Account is not a UUID |
403 | NO_WORKSPACE | You are not an active member of that workspace, or the key belongs to another one |
429 | RATE_LIMITED | Over the rate limit. Wait for Retry-After seconds |
A real INVALID_QUERY answer:
400 Bad Request
{
"success": false,
"error": {
"code": "INVALID_QUERY",
"message": "The range must not be longer than 366 days."
}
}Export deals
Deals created in the range, oldest first. Columns: reference, title, counterparty, status, currency, total_amount, funded_amount, released_amount, external_ref, created_at, updated_at.
- Auth: A workspace API key (
Authorization: Bearer rpe_...), a personal API key or a dashboard session. - Role:
finance,adminorowner. - Rate limit: 5 a minute per user for this route, plus the shared 300 a minute.
- Idempotency: Not needed. Reading has no side effects.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
from | string | No | First day, YYYY-MM-DD |
to | string | No | Last day, YYYY-MM-DD |
Example request
curl "https://api.rekberpay.com/v1/enterprise/reports/deals.csv?from=2026-10-13" \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-o deals.csvconst res = await fetch('https://api.rekberpay.com/v1/enterprise/reports/deals.csv?from=2026-10-13', {
headers: {
Authorization: `Bearer ${process.env.REKBERPAY_WORKSPACE_KEY}`,
},
});
const csv = await res.text();import os
import requests
resp = requests.get(
"https://api.rekberpay.com/v1/enterprise/reports/deals.csv?from=2026-10-13",
headers={
"Authorization": f"Bearer {os.environ['REKBERPAY_WORKSPACE_KEY']}",
},
timeout=30,
)
open("deals.csv", "wb").write(resp.content)<?php
$ch = curl_init('https://api.rekberpay.com/v1/enterprise/reports/deals.csv?from=2026-10-13');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('REKBERPAY_WORKSPACE_KEY'),
],
]);
file_put_contents('deals.csv', curl_exec($ch));
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);Example response
200 OK with Content-Disposition: attachment; filename="rekberpay-enterprise-deals-fffffff2-ffff-4fff-8fff-ffffffffffff-2026-10-13.csv"
reference,title,counterparty,status,currency,total_amount,funded_amount,released_amount,external_ref,created_at,updated_at,fee_rate_bp,platform_fee,fee_buyer_percent,buyer_fee,seller_fee
DEAL-2026-0009,Packaging run Q4,Harbourline Components Pte Ltd,disputed,IDR,60000000.00,50000000.00,30000000.00,PO-2026-1188,2026-10-13T14:33:16.361Z,2026-10-13T14:33:16.496Z,200,1200000.00,100,1200000.00,0.00
DEAL-2026-0010,Sample shipment,Harbourline Components Pte Ltd,cancelled,IDR,2500000.00,0.00,0.00,,2026-10-13T14:33:16.555Z,2026-10-13T14:33:16.563Z,200,50000.00,50,25000.00,25000.00
DEAL-2026-0011,"Precision moulds, batch 7",Harbourline Components Pte Ltd,completed,IDR,150000000.00,150000000.00,150000000.00,,2026-10-13T14:33:16.573Z,2026-10-13T14:33:16.634Z,,,,,The last five columns are the platform fee snapshot. They are empty for a deal created before platform fees existed.
Errors
| Status | Code | Cause |
|---|---|---|
400 | INVALID_QUERY | A bad date, from after to, or a range over 366 days |
401 | UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKEN | No session or key, the session expired, or the key is wrong or revoked |
400 | INVALID_ACCOUNT | X-Enterprise-Account is not a UUID |
403 | NO_WORKSPACE | You are not an active member of that workspace, or the key belongs to another one |
403 | FORBIDDEN | Your role is below finance |
429 | RATE_LIMITED | Over the rate limit. Wait for Retry-After seconds |
Export payouts
Payouts created in the range, oldest first. Columns: id, created_at, deal, milestone, instruction, bank, account, amount, currency, status, settled_at, failure_reason. The account column is always masked.
- Auth: A workspace API key (
Authorization: Bearer rpe_...), a personal API key or a dashboard session. - Role:
finance,adminorowner. - Rate limit: 5 a minute per user for this route, plus the shared 300 a minute.
- Idempotency: Not needed. Reading has no side effects.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
from | string | No | First day, YYYY-MM-DD |
to | string | No | Last day, YYYY-MM-DD |
Example request
curl "https://api.rekberpay.com/v1/enterprise/reports/disbursements.csv?from=2026-10-13" \
-H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
-o disbursements.csvconst res = await fetch('https://api.rekberpay.com/v1/enterprise/reports/disbursements.csv?from=2026-10-13', {
headers: {
Authorization: `Bearer ${process.env.REKBERPAY_WORKSPACE_KEY}`,
},
});
const csv = await res.text();import os
import requests
resp = requests.get(
"https://api.rekberpay.com/v1/enterprise/reports/disbursements.csv?from=2026-10-13",
headers={
"Authorization": f"Bearer {os.environ['REKBERPAY_WORKSPACE_KEY']}",
},
timeout=30,
)
open("disbursements.csv", "wb").write(resp.content)<?php
$ch = curl_init('https://api.rekberpay.com/v1/enterprise/reports/disbursements.csv?from=2026-10-13');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('REKBERPAY_WORKSPACE_KEY'),
],
]);
file_put_contents('disbursements.csv', curl_exec($ch));
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);Example response
200 OK with Content-Disposition: attachment; filename="rekberpay-enterprise-disbursements-fffffff2-ffff-4fff-8fff-ffffffffffff-2026-10-13.csv"
id,created_at,deal,milestone,instruction,bank,account,amount,currency,status,settled_at,failure_reason
5555555a-5555-4555-8555-555555555555,2026-10-13T12:33:07.362Z,DEAL-2026-0003,Pre-production samples approved,Harbourline IDR collection account,DBS Bank Indonesia,3320****43,75000000.00,IDR,processing,,
6666666a-6666-4666-8666-666666666666,2026-10-13T13:48:07.362Z,DEAL-2026-0004,Reefer trucks booked,Sinar Logistik operating account,Bank Central Asia,0213****89,28000000.00,IDR,queued,,
55555556-5555-4555-8555-555555555555,2026-10-13T14:33:16.480Z,DEAL-2026-0009,Tooling and proof approval,Harbourline freight and duties,Bank Central Asia,8730****55,5000000.00,IDR,queued,,The header row and the first 3 rows of the file.
Errors
| Status | Code | Cause |
|---|---|---|
400 | INVALID_QUERY | A bad date, from after to, or a range over 366 days |
401 | UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKEN | No session or key, the session expired, or the key is wrong or revoked |
400 | INVALID_ACCOUNT | X-Enterprise-Account is not a UUID |
403 | NO_WORKSPACE | You are not an active member of that workspace, or the key belongs to another one |
403 | FORBIDDEN | Your role is below finance |
429 | RATE_LIMITED | Over the rate limit. Wait for Retry-After seconds |