Cash Flow
Overview
Cash Flow reports the money moving in and out of a customer's linked accounts over a period you choose. Point it at every account the customer has consented to share, or narrow it to specific accounts or a single bank.
Prerequisites
- Authentication: Obtain an access token using the Client Credentials flow (see Getting Started → Authentication). Use scope
cashflowwhen generating the token. - Open Banking Prerequisites: Create an Accounts Link for the target institution (see Getting Started → Open Banking Prerequisites). This endpoint resolves the consented accounts from
psu_id, so there is no link id to pass. - Subscription: Subscribe to Cash Flow in your chosen environment.
GetCashflowReport
GET
https://test.api.neotek.sa/open-banking/v1/reports/cashflowSandbox URL · in Production call https://api.neotek.sa
Query parameters:
| Parameter | Required | Description |
|---|---|---|
psu_id | Required | the Payment Service User id: the identifier you assign to the customer in your own system. Use the same id you sent when creating the accounts link, since that is how Neotek resolves which consented accounts to return |
from_date | Required | start of the reporting period |
to_date | Required | end of the reporting period |
account_id | Optional | restrict the report to specific accounts, using AccountId values from ListProfileAccounts. Repeat the parameter once per account — -d 'account_id=ACC-999' -d 'account_id=ACC-362'. Defaults to empty, meaning every consented account |
financial_institution_id | Optional | restrict the report to one bank, by BIC. One of BSFRSARI, INMASARI, ARNBSARI, SAIBCSARI, RIBLSARI, GULFSARI, BJAZSAJE, SABBSARI, RJHISARI, NCBKSAJE, ALBISARI or OBLAB |
Headers:
| Parameter | Required | Description |
|---|---|---|
authorization | Required | Bearer <ACCESS_TOKEN> |
x-request-id | Optional | — |
cURL
curl -G 'https://test.api.neotek.sa/open-banking/v1/reports/cashflow' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -d 'psu_id=PTP100' \ -d 'from_date=2022-01-01' \ -d 'to_date=2028-03-31'Response (trimmed to one entry per list)
JSON
{ "covered_period": { "from_date": "2023-08-05", "to_date": "2026-07-06" }, "currency": "SAR", "cashflow_summary": { "total_inflow_amount": 3363606.22, "total_outflow_amount": 313255.62, "cashflow_amount": 3050350.6 }, "cashflow_movements": { "daily_movements": [ { "date": "2025-11-17", "inflow": 11175.5, "outflow": 5085.24, "closing_balance": -871299.55 } ], "monthly_movements": [ { "month": "1", "year": "2026", "inflow": 105638.57, "outflow": 9719.52, "closing_balance": -620674.9 } ] }, "outflow_by_category": [ { "category_code": "POS", "category_name": { "ar": "نقاط البيع", "en": "POS" }, "amount": 71526.57 } ], "inflow_by_category": [ { "category_code": "SALARY", "category_name": { "ar": "راتب", "en": "Salary" }, "amount": 42000.0 } ]}Errors
| Code | Status | Cause and Action |
|---|---|---|
400 | Bad Request | Invalid or missing request fields. Check the error Code and Path. Common: NTSP.ERROR.400.349 = PSUId is mandatory. |
401 | Unauthorized | Token missing, expired, or invalid. Refresh the bearer token and retry. |
403 | Forbidden | No valid subscription or insufficient scope. Verify client credentials and that the correct scope is included for the service being called. |
405 | Method Not Allowed | Wrong HTTP verb for this endpoint. Check the endpoint specification. |
406 | Not Acceptable | Accept header mismatch. Use application/json. |
429 | Too Many Requests | Rate limit exceeded. Wait the number of seconds in the Retry-After response header before retrying. |
500 | Internal Server Error | Unexpected server error. Retry with exponential backoff. Include x-request-id when raising a support ticket. |
Ready to build with Cash Flow?
Create a sandbox app, grab your credentials, and make your first call in minutes.