Back to neotek ↗Get Sandbox Access

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 cashflow when 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

GEThttps://test.api.neotek.sa/open-banking/v1/reports/cashflow

Sandbox URL · in Production call https://api.neotek.sa

Query parameters:

ParameterRequiredDescription
psu_idRequiredthe 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_dateRequiredstart of the reporting period
to_dateRequiredend of the reporting period
account_idOptionalrestrict 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_idOptionalrestrict the report to one bank, by BIC. One of BSFRSARI, INMASARI, ARNBSARI, SAIBCSARI, RIBLSARI, GULFSARI, BJAZSAJE, SABBSARI, RJHISARI, NCBKSAJE, ALBISARI or OBLAB

Headers:

ParameterRequiredDescription
authorizationRequiredBearer <ACCESS_TOKEN>
x-request-idOptional
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

CodeStatusCause and Action
400Bad RequestInvalid or missing request fields. Check the error Code and Path. Common: NTSP.ERROR.400.349 = PSUId is mandatory.
401UnauthorizedToken missing, expired, or invalid. Refresh the bearer token and retry.
403ForbiddenNo valid subscription or insufficient scope. Verify client credentials and that the correct scope is included for the service being called.
405Method Not AllowedWrong HTTP verb for this endpoint. Check the endpoint specification.
406Not AcceptableAccept header mismatch. Use application/json.
429Too Many RequestsRate limit exceeded. Wait the number of seconds in the Retry-After response header before retrying.
500Internal Server ErrorUnexpected 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.