Skip to main content

Bank Statement Analysis API

Objective

The Bank Statement Analysis API extracts transactions from bank statements using OCR (Optical Character Recognition) in JSON format. It can also analyze and produce insights from them in the form of a JSON.

InputOutput
The user's bank statement in PDF formatIt contains the following information:
  • Transactions
  • Transaction Threshold
  • Fraud Checks

API URL

https://ind-engine.thomas.hyperverge.co/v1/bank_statement_analysis

API Endpoint

bank_statement_analysis

Overview

The API is RESTful and uses standard HTTP verbs and status codes. The responses are in JSON format, and you should upload all images and files as form-data through a POST request.

Authentication

You need a unique pair of application ID (appId) and application key (appKey) from HyperVerge to verify your identity for accessing the API.

API Request Details

Method - POST

Headers

HeaderMandatory or OptionalDescriptionAllowed Values
content-type MandatoryThe media type for the request payload. multipart/form-data
appId MandatoryThe application identifier shared by HyperVerge. You can find the details in the dashboard's credentials tab.This should be a unique value.
appKey MandatoryThe application key shared by HyperVerge. You can find the details in the dashboard's credentials tab.This should be a unique value.
transactionIdMandatoryA unique identifier for tracking a user journey.This should be both unique and easily associated with the user's journey in your application(s).

Inputs

The following table provides the details of the fields required for the API's request body.

ParameterMandatory or OptionalDescriptionAllowed ValuesDefault Values
pdfMandatoryThe Bank Statement PDF file on which you want to perform the OCRNot ApplicableNot Applicable
passwordOptionalPassword for opening the bank statement (if it's password protected)stringNot Applicable
enableFraudChecksOptionalEnable checks for suspicious or fraudulent transactionsyes / nono
extractEntitiesOptionalExtract named entities like account holder, bank name, etc.yes / nono
countryOptionalCountry code of the bank statement (ISO 3166-1 alpha-3 format preferred)ind, usa, etc.ind
returnTransactionsOptionalReturn detailed transaction datayes / noyes
transactionThresholdOptionalMinimum transaction amount to include in resultsnumeric (e.g., 0)0
formatDateYearFirstOptionalIndicates if date format in statement is YYYY-MM-DDyes / nono
allowImagePDFOptionalAllow image-based (scanned) PDF processingyes / noyes
returnS3UrlOptionalReturn a downloadable S3 URL of the processed statementyes / nono
flagTransactionsOptionalFlag suspicious transactionsyes / nono
returnRecurringTransactionsOptionalReturn recurring (e.g., monthly) transactionsyes / nono
returnAverageMonthlyBalanceOptionalReturn average monthly balance across statement periodyes / nono
returnStatementSummaryOptionalReturn a summary section with key insights from the statementyes / nono
returnEODBalancesOptionalReturn end-of-day balances per statement pageyes / nono
returnSalaryInfoOptionalReturn salary credits and employer name if foundyes / nono

Request

The following code shows a standard curl request for the API:


curl --location --request POST 'https://ind-engine.thomas.hyperverge.co/v1/bank_statement_analysis' \
--header 'Content-Type: multipart/form-data' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--form 'pdf=@"<path_to_pdf_file>"' \
--form 'password=' \
--form 'enableFraudChecks="yes"' \
--form 'extractEntities="yes"' \
--form 'country="ind"' \
--form 'returnTransactions="yes"' \
--form 'transactionThreshold="0"' \
--form 'formatDateYearFirst="no"' \
--form 'allowImagePDF="yes"' \
--form 'returnS3Url="yes"' \
--form 'flagTransactions="yes"' \
--form 'returnRecurringTransactions="yes"' \
--form 'returnAverageMonthlyBalance="yes"' \
--form 'returnStatementSummary="yes"' \
--form 'returnEODBalances="yes"' \
--form 'returnSalaryInfo="yes"'

Success Response

The following is a success response from the API:

{
"status": "success",
"statusCode": "<Status_Code_Number>",
"result": [
{
"details": {
"documentType": "<Document_Type_String>",
"transactionThreshold": "<Transaction_Threshold_Number>",
"transactions": [
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
},
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
},
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
},
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
},
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
},
{
"date": "<Transaction_Date_in_DD/MM/YYYY_Format>",
"description": "<Transaction_Description_String>",
"mode": "<Transaction_Mode>",
"entityName": "<Entity_Name>",
"entityName2": "<Entity_Name_Alternative>",
"value": "<Transaction_Value_Number>",
"type": "<Transaction_Type>",
"isSalary": "<Is_Salary_Boolean>",
"balance": "<Balance_After_Transaction_Number>"
}
],
"transactions_count": "<Total_Transactions_Count_Number>",
"num_pages": "<Number_Of_Pages_In_Statement>",
"total_credit_transactions_count": "<Total_Credit_Transactions_Count>",
"total_credit_transactions_value": "<Total_Credit_Transactions_Value_Number>",
"total_debit_transactions_count": "<Total_Debit_Transactions_Count>",
"total_debit_transactions_value": "<Total_Debit_Transactions_Value_Number>",
"summary": {
"overall": {
"numberOfTransactions": "<Overall_Number_Of_Transactions>",
"openingBalance": "<Overall_Opening_Balance_Number>",
"closingBalance": "<Overall_Closing_Balance_Number>",
"minimumBalance": "<Overall_Minimum_Balance_Number>",
"maximumBalance": "<Overall_Maximum_Balance_Number>",
"averageBalance": "<Overall_Average_Balance_Number>",
"minimumDailyBalance": "<Overall_Minimum_Daily_Balance_Number>",
"maximumDailyBalance": "<Overall_Maximum_Daily_Balance_Number>",
"averageDailyBalance": "<Overall_Average_Daily_Balance_Number>",
"minimumWeeklyBalance": "<Overall_Minimum_Weekly_Balance_Number>",
"maximumWeeklyBalance": "<Overall_Maximum_Weekly_Balance_Number>",
"averageWeeklyBalance": "<Overall_Average_Weekly_Balance_Number>",
"minimumMonthlyBalance": "<Overall_Minimum_Monthly_Balance_Number>",
"maximumMonthlyBalance": "<Overall_Maximum_Monthly_Balance_Number>",
"averageMonthlyBalance": "<Overall_Average_Monthly_Balance_Number>",
"numberOfCreditTransactions": "<Overall_Number_Of_Credit_Transactions>",
"totalCreditAmount": "<Overall_Total_Credit_Amount_Number>",
"minimumCreditAmount": "<Overall_Minimum_Credit_Amount_Number>",
"maximumCreditAmount": "<Overall_Maximum_Credit_Amount_Number>",
"averageCreditAmount": "<Overall_Average_Credit_Amount_Number>",
"numberOfDebitTransactions": "<Overall_Number_Of_Debit_Transactions>",
"totalDebitAmount": "<Overall_Total_Debit_Amount_Number>",
"minimumDebitAmount": "<Overall_Minimum_Debit_Amount_Number>",
"maximumDebitAmount": "<Overall_Maximum_Debit_Amount_Number>",
"averageDebitAmount": "<Overall_Average_Debit_Amount_Number>",
"numberOfSalaryTransactions": "<Overall_Number_Of_Salary_Transactions>",
"totalSalaryAmount": "<Overall_Total_Salary_Amount_Number>",
"averageSalaryAmount": "<Overall_Average_Salary_Amount_Number>",
"creditDebitRatio": "<Overall_Credit_Debit_Ratio_Number>"
},
"monthly": [
{
"month": "<Month_Number>",
"year": "<Year_Number>",
"numberOfTransactions": "<Monthly_Number_Of_Transactions>",
"openingBalance": "<Monthly_Opening_Balance_Number>",
"closingBalance": "<Monthly_Closing_Balance_Number>",
"minimumBalance": "<Monthly_Minimum_Balance_Number>",
"maximumBalance": "<Monthly_Maximum_Balance_Number>",
"averageBalance": "<Monthly_Average_Balance_Number>",
"minimumDailyBalance": "<Monthly_Minimum_Daily_Balance_Number>",
"maximumDailyBalance": "<Monthly_Maximum_Daily_Balance_Number>",
"averageDailyBalance": "<Monthly_Average_Daily_Balance_Number>",
"minimumWeeklyBalance": "<Monthly_Minimum_Weekly_Balance_Number>",
"maximumWeeklyBalance": "<Monthly_Maximum_Weekly_Balance_Number>",
"averageWeeklyBalance": "<Monthly_Average_Weekly_Balance_Number>",
"numberOfCreditTransactions": "<Monthly_Number_Of_Credit_Transactions>",
"totalCreditAmount": "<Monthly_Total_Credit_Amount_Number>",
"minimumCreditAmount": "<Monthly_Minimum_Credit_Amount_Number>",
"maximumCreditAmount": "<Monthly_Maximum_Credit_Amount_Number>",
"averageCreditAmount": "<Monthly_Average_Credit_Amount_Number>",
"numberOfDebitTransactions": "<Monthly_Number_Of_Debit_Transactions>",
"totalDebitAmount": "<Monthly_Total_Debit_Amount_Number>",
"minimumDebitAmount": "<Monthly_Minimum_Debit_Amount_Number>",
"maximumDebitAmount": "<Monthly_Maximum_Debit_Amount_Number>",
"averageDebitAmount": "<Monthly_Average_Debit_Amount_Number>",
"numberOfSalaryTransactions": "<Monthly_Number_Of_Salary_Transactions>",
"totalSalaryAmount": "<Monthly_Total_Salary_Amount_Number>",
"averageSalaryAmount": "<Monthly_Average_Salary_Amount_Number>",
"eodBalances": "<Array_Of_End_Of_Day_Balance_Numbers>"
},
{
"month": "<Month_Number>",
"year": "<Year_Number>",
"numberOfTransactions": "<Monthly_Number_Of_Transactions>",
"openingBalance": "<Monthly_Opening_Balance_Number>",
"closingBalance": "<Monthly_Closing_Balance_Number>",
"minimumBalance": "<Monthly_Minimum_Balance_Number>",
"maximumBalance": "<Monthly_Maximum_Balance_Number>",
"averageBalance": "<Monthly_Average_Balance_Number>",
"minimumDailyBalance": "<Monthly_Minimum_Daily_Balance_Number>",
"maximumDailyBalance": "<Monthly_Maximum_Daily_Balance_Number>",
"averageDailyBalance": "<Monthly_Average_Daily_Balance_Number>",
"minimumWeeklyBalance": "<Monthly_Minimum_Weekly_Balance_Number>",
"maximumWeeklyBalance": "<Monthly_Maximum_Weekly_Balance_Number>",
"averageWeeklyBalance": "<Monthly_Average_Weekly_Balance_Number>",
"numberOfCreditTransactions": "<Monthly_Number_Of_Credit_Transactions>",
"totalCreditAmount": "<Monthly_Total_Credit_Amount_Number>",
"minimumCreditAmount": "<Monthly_Minimum_Credit_Amount_Number>",
"maximumCreditAmount": "<Monthly_Maximum_Credit_Amount_Number>",
"averageCreditAmount": "<Monthly_Average_Credit_Amount_Number>",
"numberOfDebitTransactions": "<Monthly_Number_Of_Debit_Transactions>",
"totalDebitAmount": "<Monthly_Total_Debit_Amount_Number>",
"minimumDebitAmount": "<Monthly_Minimum_Debit_Amount_Number>",
"maximumDebitAmount": "<Monthly_Maximum_Debit_Amount_Number>",
"averageDebitAmount": "<Monthly_Average_Debit_Amount_Number>",
"numberOfSalaryTransactions": "<Monthly_Number_Of_Salary_Transactions>",
"totalSalaryAmount": "<Monthly_Total_Salary_Amount_Number>",
"averageSalaryAmount": "<Monthly_Average_Salary_Amount_Number>",
"eodBalances": "<Array_Of_End_Of_Day_Balance_Numbers>"
}
]
}
},
"fraudChecks": {
"date": "<Fraud_Check_Date_Status>"
},
"s3url": "<S3_Bucket_URL_For_Statement_PDF>"
}
]
}

Success Response Details

ParameterTypeDescription
statusstringIndicates the overall status of the request (success or failure)
statusCodeintegerHTTP status code of the response (e.g., 200 for success)
resultlistList of result objects (generally a single object)
messagestringThe error message, only present in the case of an error
result.details.documentTypestringType of input document analyzed (e.g., TEXT_PDF)
result.details.transactionThresholdfloatConfigured threshold value for transaction analysis
result.details.transactionslistList of individual transaction entries extracted from the document
result.details.transactions_countintegerTotal number of transactions parsed
result.details.num_pagesintegerNumber of pages in the analyzed PDF document
result.details.total_credit_transactions_countintegerTotal count of credit transactions
result.details.total_credit_transactions_valuefloatSum of values of all credit transactions
result.details.total_debit_transactions_countintegerTotal count of debit transactions
result.details.total_debit_transactions_valuefloatSum of values of all debit transactions
result.details.transactions[].datestringDate of the transaction in DD/MM/YYYY format
result.details.transactions[].descriptionstringFull description of the transaction
result.details.transactions[].modestringMode of the transaction (e.g., UPI, NEFT, IMPS)
result.details.transactions[].entityNamestringName of the transacting party (extracted from narration)
result.details.transactions[].entityName2stringDuplicate of entityName (can be used for comparison/sanitization)
result.details.transactions[].valuefloatValue of the transaction
result.details.transactions[].typestringType of transaction (credit, debit)
result.details.transactions[].isSalarybooleanIndicates whether the transaction is a salary credit
result.details.transactions[].balancefloatBalance in the account after this transaction
result.details.summary.overall.numberOfTransactionsintegerTotal number of transactions in the report
result.details.summary.overall.openingBalancefloatBalance at the beginning of the analysis period
result.details.summary.overall.closingBalancefloatBalance at the end of the analysis period
result.details.summary.overall.minimumBalancefloatMinimum balance during the analysis period
result.details.summary.overall.maximumBalancefloatMaximum balance during the analysis period
result.details.summary.overall.averageBalancefloatAverage balance during the period
result.details.summary.overall.minimumDailyBalancefloatLowest end-of-day balance recorded
result.details.summary.overall.maximumDailyBalancefloatHighest end-of-day balance recorded
result.details.summary.overall.averageDailyBalancefloatAverage of all daily balances
result.details.summary.overall.minimumWeeklyBalancefloatLowest weekly balance
result.details.summary.overall.maximumWeeklyBalancefloatHighest weekly balance
result.details.summary.overall.averageWeeklyBalancefloatAverage of weekly balances
result.details.summary.overall.minimumMonthlyBalancefloatLowest monthly balance
result.details.summary.overall.maximumMonthlyBalancefloatHighest monthly balance
result.details.summary.overall.averageMonthlyBalancefloatAverage of monthly balances
result.details.summary.overall.numberOfCreditTransactionsintegerNumber of credit transactions
result.details.summary.overall.totalCreditAmountfloatTotal credit transaction amount
result.details.summary.overall.minimumCreditAmountfloatMinimum credit amount
result.details.summary.overall.maximumCreditAmountfloatMaximum credit amount
result.details.summary.overall.averageCreditAmountfloatAverage credit amount
result.details.summary.overall.numberOfDebitTransactionsintegerNumber of debit transactions
result.details.summary.overall.totalDebitAmountfloatTotal debit amount
result.details.summary.overall.minimumDebitAmountfloatMinimum debit amount
result.details.summary.overall.maximumDebitAmountfloatMaximum debit amount
result.details.summary.overall.averageDebitAmountfloatAverage debit amount
result.details.summary.overall.numberOfSalaryTransactionsintegerNumber of salary-related credit transactions
result.details.summary.overall.totalSalaryAmountfloatTotal salary amount credited
result.details.summary.overall.averageSalaryAmountfloatAverage of salary amounts credited
result.details.summary.overall.creditDebitRatiofloatRatio of total credit to total debit values
result.details.summary.monthly[].monthintegerMonth number (e.g., 1 = Jan, 12 = Dec)
result.details.summary.monthly[].yearintegerYear (e.g., 2023)
result.details.summary.monthly[].numberOfTransactionsintegerTransactions in that month
result.details.summary.monthly[].openingBalancefloatBalance at the start of the month
result.details.summary.monthly[].closingBalancefloatBalance at the end of the month
result.details.summary.monthly[].minimumBalancefloatLowest balance in the month
result.details.summary.monthly[].maximumBalancefloatHighest balance in the month
result.details.summary.monthly[].averageBalancefloatAverage balance for the month
result.details.summary.monthly[].minimumDailyBalancefloatMin EOD (End of Day) balance in the month
result.details.summary.monthly[].maximumDailyBalancefloatMax EOD balance in the month
result.details.summary.monthly[].averageDailyBalancefloatAverage of EOD balances
result.details.summary.monthly[].minimumWeeklyBalancefloatMin weekly balance
result.details.summary.monthly[].maximumWeeklyBalancefloatMax weekly balance
result.details.summary.monthly[].averageWeeklyBalancefloatAverage weekly balance
result.details.summary.monthly[].numberOfCreditTransactionsintegerCount of credit transactions
result.details.summary.monthly[].totalCreditAmountfloatTotal credited amount
result.details.summary.monthly[].minimumCreditAmountfloatMinimum single credit amount
result.details.summary.monthly[].maximumCreditAmountfloatMaximum single credit amount
result.details.summary.monthly[].averageCreditAmountfloatAverage of credit transactions
result.details.summary.monthly[].numberOfDebitTransactionsintegerCount of debit transactions
result.details.summary.monthly[].totalDebitAmountfloatTotal debited amount
result.details.summary.monthly[].minimumDebitAmountfloatMinimum single debit amount
result.details.summary.monthly[].maximumDebitAmountfloatMaximum single debit amount
result.details.summary.monthly[].averageDebitAmountfloatAverage of debit transactions
result.details.summary.monthly[].numberOfSalaryTransactionsintegerNumber of salary entries
result.details.summary.monthly[].totalSalaryAmountfloatTotal salary received in that month
result.details.summary.monthly[].averageSalaryAmountfloatAverage salary received in that month
result.details.summary.monthly[].eodBalanceslist[float]End-of-day balances for each day of the month
result.fraudChecks.datestringFraud check status related to date parsing (e.g., passed)
result.s3urlstringPre-signed AWS S3 URL to download the input PDF file used

Error Responses

The following are some sample error responses from the API.

{
"message": "Input Validation Error: requires property \"uploadPdf\"",
"statusCode": 400,
"status": "failure"
}

Error Response Details

A failure or error response from the module contains a failure status, with a relavant status code and error message.

The following table lists all error responses:

Status CodeError MessageError Description
400Input Validation Error: requires property "uploadPdf"The required parameter "uploadPdf" is missing from the request.
400Invalid file type for: uploadPdfThe file type provided for the "uploadPdf" parameter is invalid. Please ensure the file is in PDF format.
400Password provided was incorrectThe password provided for the PDF file is incorrect. Please check and try again.
500Internal Server ErrorAn internal server error occurred. Please check the request or contact support for assistance.
Was this helpful?
Ask AIBeta
Hi! How can I help?
Ask me anything about HyperVerge products, APIs, and SDKs.
Try asking: