Transfer Report
GET /api/v1/reports/transfer
Returns transfer transaction data grouped by category over time periods. This endpoint provides the same data as the Transfer Report in the web UI, which helps reconcile transfers between accounts.
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| date_from | string | Yes | - | Start date (YYYY-MM-DD) |
| date_to | string | Yes | - | End date (YYYY-MM-DD) |
| group_by | string | No | month | Grouping period (day/week/month/year) |
| accounts | string | No | all | Comma-separated account IDs to filter |
| particulars | string | No | - | Filter by particulars (partial match) |
| entity | string | No | - | Filter by entity (partial match, use 'empty' for null/empty) |
| category | string | No | - | Filter by category (partial match, use 'empty' for null/empty) |
Example Request
curl -X GET "https://statements.finopsbricks.com/api/v1/reports/transfer?date_from=2024-01-01&date_to=2024-12-31&group_by=month&accounts=acc123,acc456" \
-H "api-key: fob_stm_xxxxxxxxxxxx" \
-H "api-secret: xxxxxxxxxxxxxxxx"
Response
{
"data": {
"period": {
"date_from": "2024-01-01",
"date_to": "2024-12-31",
"group_by": "month"
},
"accounts": [
{
"id": "acc123",
"name": "Business Checking",
"category": "bank"
},
{
"id": "acc456",
"name": "Savings Account",
"category": "bank"
}
],
"data": [
{
"category": "transfers",
"2024-01": {
"inflow": 5000.00,
"outflow": 3000.00,
"net": 2000.00,
"transaction_count": 12
},
"2024-02": {
"inflow": 7000.00,
"outflow": 4000.00,
"net": 3000.00,
"transaction_count": 15
}
}
]
}
}
Response Fields
period
| Field | Type | Description |
|---|---|---|
| date_from | string | Start date of the report |
| date_to | string | End date of the report |
| group_by | string | Grouping period used (day/week/month/year) |
accounts
Array of account objects included in the report (non-archived accounts).
| Field | Type | Description |
|---|---|---|
| id | string | Account ID |
| name | string | Account name |
| category | string | Account category (bank or credit_card) |
data
Array of transfer data objects grouped by category.
| Field | Type | Description |
|---|---|---|
| category | string | Transaction category name |
{period} | object | Period key (format depends on group_by): YYYY-MM-DD (day), YYYY-Www (week), YYYY-MM (month), YYYY (year) |
Each period object contains:
| Field | Type | Description |
|---|---|---|
| inflow | number | Total inflows for the period (in base currency units) |
| outflow | number | Total outflows for the period (in base currency units) |
| net | number | Net amount (inflow - outflow) |
| transaction_count | number | Total number of transactions (inflows + outflows) |
Understanding Transfer Reports
Transfer reports show transactions categorized as "transfer" type, which represent money movement between your own accounts. Key use cases:
- Reconciliation: Verify that transfers between accounts are properly recorded
- Cash Movement: Track how money flows between different accounts
- Balance Verification: Ensure transfer inflows match transfer outflows across accounts
For proper reconciliation, transfer inflows should equal transfer outflows across all accounts (net should approach zero when summed).
Filtering Options
Special Values
- entity='empty': Filters for transactions with null or empty entity field
- category='empty': Filters for transactions with null or empty category field
Partial Matching
The particulars, entity, and category filters use case-insensitive partial matching:
particulars=paymentmatches "Monthly Payment", "PAYMENT RECEIVED", "Prepayment"entity=acmematches "Acme Corp", "ACME Inc", "Acme Holdings"
Account Filtering
Pass comma-separated account IDs to filter transactions:
accounts=acc123- Single accountaccounts=acc123,acc456,acc789- Multiple accounts
Errors
| Code | Description |
|---|---|
| 400 | Missing date_from or date_to parameter |
| 400 | Invalid date format (must be YYYY-MM-DD) |
| 400 | date_from is after date_to |
| 400 | Invalid group_by value (must be day, week, month, or year) |
| 401 | Invalid or missing API credentials |
| 403 | API key lacks reports:read permission |