Skip to content

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 ​

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

Get the summary report ​

GET/v1/enterprise/reports/summary
  • Auth: A workspace API key (Authorization: Bearer rpe_...), a personal API key or a dashboard session.
  • Role: Any workspace member (viewer and 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 ​

NameTypeRequiredDescription
fromstringNoFirst day, YYYY-MM-DD
tostringNoLast day, YYYY-MM-DD

Example request ​

bash
curl "https://api.rekberpay.com/v1/enterprise/reports/summary?from=2026-07-15&to=2026-10-13" \
  -H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY"
js
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();
python
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
<?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

json
{
    "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.

FieldTypeDescription
deals.createdintegerDeals created in the range; by_status splits them by current status
money.fundednumberAmounts of milestone.funded events in the range
money.releasednumberAmounts of milestone.released events in the range
money.queuednumberPayouts queued or processing now, whatever the range
approvals.median_hoursnumber | nullMedian time from evidence to approval
disputes.rate_pctnumberDisputes opened per milestone funded, at most 100
top_counterpartiesarrayUp to 10, by released amount
monthlyarrayOne bucket per calendar month in the range, oldest first

Errors ​

StatusCodeCause
400INVALID_QUERYA bad date, from after to, or a range over 366 days
401UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKENNo session or key, the session expired, or the key is wrong or revoked
400INVALID_ACCOUNTX-Enterprise-Account is not a UUID
403NO_WORKSPACEYou are not an active member of that workspace, or the key belongs to another one
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

A real INVALID_QUERY answer:

400 Bad Request

json
{
    "success": false,
    "error": {
        "code": "INVALID_QUERY",
        "message": "The range must not be longer than 366 days."
    }
}

Export deals ​

GET/v1/enterprise/reports/deals.csv

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, admin or owner.
  • 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 ​

NameTypeRequiredDescription
fromstringNoFirst day, YYYY-MM-DD
tostringNoLast day, YYYY-MM-DD

Example request ​

bash
curl "https://api.rekberpay.com/v1/enterprise/reports/deals.csv?from=2026-10-13" \
  -H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
  -o deals.csv
js
const 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();
python
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
<?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"

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 ​

StatusCodeCause
400INVALID_QUERYA bad date, from after to, or a range over 366 days
401UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKENNo session or key, the session expired, or the key is wrong or revoked
400INVALID_ACCOUNTX-Enterprise-Account is not a UUID
403NO_WORKSPACEYou are not an active member of that workspace, or the key belongs to another one
403FORBIDDENYour role is below finance
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

Export payouts ​

GET/v1/enterprise/reports/disbursements.csv

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, admin or owner.
  • 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 ​

NameTypeRequiredDescription
fromstringNoFirst day, YYYY-MM-DD
tostringNoLast day, YYYY-MM-DD

Example request ​

bash
curl "https://api.rekberpay.com/v1/enterprise/reports/disbursements.csv?from=2026-10-13" \
  -H "Authorization: Bearer $REKBERPAY_WORKSPACE_KEY" \
  -o disbursements.csv
js
const 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();
python
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
<?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"

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 ​

StatusCodeCause
400INVALID_QUERYA bad date, from after to, or a range over 366 days
401UNAUTHORIZED, SESSION_EXPIRED, INVALID_TOKENNo session or key, the session expired, or the key is wrong or revoked
400INVALID_ACCOUNTX-Enterprise-Account is not a UUID
403NO_WORKSPACEYou are not an active member of that workspace, or the key belongs to another one
403FORBIDDENYour role is below finance
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

Escrow, payment services and B2B deals for Indonesian businesses.