canonical: https://jentic.com/apis/mybankstatementanalysis.com/mybankstatementanalysis

# My Bank Statement Analysis API

The My Bank Statement Analysis API reads bank statement files, PDFs or images, and returns a finished report of categorised transactions with insights and recurring-charge findings. One synchronous call takes up to 10 files in a request under 4MB and returns the report directly, including the detected institution, statement month and currency, income, expense, and net totals, and lists of subscriptions, duplicate charges, savings tips, and an action plan. Each transaction carries its date, description, merchant and merchantDomain, amount, direction, category, and flags for internal transfers and refunds, paged up to 500 at a time. API access requires a Business plan key, and usage is metered against a page allowance that the account endpoint reports.

## For AI agents

Upload bank statement PDFs or images and get back categorised transactions, income and expense totals, detected subscriptions, duplicate charges, savings tips, and an action plan.

## Scope

Does not connect to bank accounts, move money, or file taxes. Use for analyzing uploaded bank statement files into categorised transactions and spending findings only.

## Capabilities

- Analyze up to 10 statement PDFs or images in one synchronous POST `/api/v1/analyses` call and receive the finished report
- Page through categorised transactions for a report with GET `/api/v1/analyses/{id}/transactions`, up to 500 per page, each flagged for internalTransfer and refund
- Read detected recurring charges from the report's subscriptions list, with name, amount, frequency, and dayOfMonth
- Spot double billing from the duplicateCharges list, which gives merchant, amount, count, dates, confidence, and reason
- Get income, expenses, and net totals plus the statement month, currency, and institution from GET `/api/v1/analyses/{id}`
- Check the plan, pages remaining, and when the page allowance resets with GET `/api/v1/me` before uploading

## Use cases

### A personal finance agent that reads statements through Jentic

A finance assistant can turn a user's statement PDF into answers about their money. Through Jentic it finds the analysis operation by intent, checks pagesRemaining with GET `/api/v1/me`, uploads the file to POST `/api/v1/analyses`, and answers from the returned report: totals, subscriptions, duplicate charges, and savings tips. The Business plan key is injected at call time and never handed to the agent.

Example prompt: Call GET `/api/v1/me` to confirm pagesRemaining is above zero, then POST `/api/v1/analyses` with the file 'october-statement.pdf' and report totals.income, totals.expenses, and every entry in subscriptions

### Subscription and duplicate charge audit

Forgotten subscriptions and double billing hide in long statements. Each report lists subscriptions with name, amount, frequency, and dayOfMonth, and duplicateCharges with the merchant, amount, how many times it hit, the dates, a confidence, and a reason. An agent can turn those two lists into a cancellation checklist without reading every line.

Example prompt: Call GET `/api/v1/analyses/{id}` for the latest analysis and list each duplicateCharges entry with its merchant, amount, count, and dates, followed by every subscriptions entry sorted by amount

### Transaction export for bookkeeping

Bookkeeping needs line items, not a summary. GET `/api/v1/analyses/{id}/transactions` pages through categorised transactions with limit up to 500 and offset, each with date, description, merchant, amount, direction of credit or debit, balanceAfter, and category, plus flags for excluded rows, internal transfers, and refunds so they can be filtered before import.

Example prompt: Call GET `/api/v1/analyses/{id}/transactions` with limit 500 and offset 0, repeat with offset 500 until no rows remain, and drop rows where internalTransfer is true

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/api/v1/analyses` | Analyze one or more statement files |
| GET | `/api/v1/analyses/{id}` | Fetch one report |
| GET | `/api/v1/analyses/{id}/transactions` | Page through categorised transactions |
| GET | `/api/v1/analyses` | List analyses, newest first |
| GET | `/api/v1/me` | Get account, plan, and remaining page allowance |

## Key resources

- **Analyses** — Reports built from uploaded statements, with totals, institution, insights, subscriptions, duplicate charges, savings tips, and an action plan
- **Transactions** — Categorised line items per analysis with merchant, direction, balance, and transfer and refund flags
- **Account** — Plan, key prefix, page usage and allowance, and the daily analysis limit

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 63 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 100 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 41 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 68 / 100
- **View full report:** https://jentic.com/apis/mybankstatementanalysis.com/mybankstatementanalysis/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring My Bank Statement Analysis by hand means creating an mbsa_ bearer key on a Business plan, building multipart uploads under 4MB, and holding a client timeout long enough for the synchronous analysis. Through Jentic you install once, import the API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** The API puts the analysis id in the URL path (`/api/v1/analyses/{id}/...`), so a rule can pin your agent to reading one report and its transactions. You choose the operations it may call, so the upload operation, which spends your page allowance, is not included unless you add it.
- **Credential handling:** Your mbsa_ key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'analyze a bank statement' or 'find subscriptions in my statement', and Jentic returns the matching operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Plaid API** — Bank account and transaction data pulled from a linked account
- **TrueLayer API** — Open banking account and transaction data across UK and European banks
- **Veryfi API** — Document OCR for receipts, invoices, and financial documents
- **Xero Accounting API** — Small-business accounting ledgers and bank transactions

## FAQ

### Is there a My Bank Statement Analysis MCP server?

You don't need an MCP server to give your agent My Bank Statement Analysis. Jentic connects it directly from the API Directory: import it, store your mbsa_ key once, and your agent calls it. Operations are discovered on demand, so no extra tool definitions sit in the agent's context.

### What authentication does the My Bank Statement Analysis API use?

Per its OpenAPI spec, the API uses an API key created in account settings, prefixed mbsa_, sent as a bearer token in the Authorization header. The key's plan must include API access, which the spec says requires a Business plan; otherwise calls return 403. Through Jentic, the key is stored encrypted by your own Jentic One instance and injected at call time.

### Can I limit what my agent is allowed to do with the My Bank Statement Analysis API?

Yes. For example, write a rule that allows only GET `/api/v1/analyses/{id}` and GET `/api/v1/analyses/{id}/transactions` for one analysis id. Your agent can then read that one report and its transactions, but it cannot upload new statements that use up your page allowance or browse your other analyses, and every call it makes is logged.

### What are the rate limits for the My Bank Statement Analysis API?

The OpenAPI spec states that more than 200 analyses in one day returns 429, and that an exhausted plan page allowance returns 402. GET `/api/v1/me` reports pagesUsed, pageLimit, pagesRemaining, periodResetsAt, and analysesPerDay for your account.

### How do I analyze a bank statement through Jentic?

Search Jentic for 'analyze a bank statement', load the createAnalysis operation, and call POST `/api/v1/analyses` as multipart/form-data with one file part per PDF or image. The call runs synchronously and returns the finished report, so allow up to five minutes of client timeout. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Why would a statement fail to analyze?

The spec lists 422 for statements that cannot be read because they are password-protected, scanned beyond recovery, or mixed-currency, 413 when the request body is over the limit, and 415 for unsupported file types. Keep each request under 4MB with at most 10 files.
