> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ntropy.com/bank-statements/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ntropy.com/_mcp/server.
# Bank Statements
The Bank Statements API allows you to manage and extract information from bank statements. Bank statements must be in a PDF format.
The API provides two workflows. The main [extraction](#extraction) workflow, that extracts account holder information, account information and transaction records. The
[Fast Verification](./fast-verification) workflow that quickly identifies key details about the
institution and the account holder by looking at the beginning of the bank statement.
# Extraction
The extraction process of bank statement information is an asynchronous operation with the following stages that are
encoded in the `status` attribute:
| Status | Description |
|--------------|------------------------------------------------------------------------------------|
| `processing` | The upload was successful and extraction is in progress. |
| `completed` | The extraction was successful, you may fetch the results. |
| `error` | An error occurred during extraction. Check the field `error` for more information. |
## Submit a bank statement
When you submit a bank statement you will receive an identifier of the bank statement `id` that you can later use
to check its `status` or to fetch the extraction results once they're ready.
## Webhooks
In production environments, we strongly recommend
that you integrate with the bank statements API via [webhooks](./webhooks).
Whenever there's a `status` change (with the exception of the initial `processing` status) the webhook
will be called with the bank statement resource. Each event includes an event type, allowing you to easily categorize
and handle different status updates.
## Polling
If you're unable to integrate via webhooks, you can also *poll* for changes in the bank statements that you have
submitted.
# Enriching transactions
Once you have the transactions from your bank statement, you may want to submit them for enrichment.
Using the SDK, you can convert a bank statement transaction to an enrichment input transaction.
**`SDK`**
```python title="SDK"
from ntropy_sdk import SDK
sdk = SDK("cd1H...Wmhl")
results = sdk.bank_statements.results("7f8dceac-2848-472d-b5c3-55cdbaf35a9b")
txs = [
tx.to_transaction_input(account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad")
for tx in results.accounts[0].transactions
]
batch = sdk.batches.create(
operation="POST /v3/transactions",
data=[tx.dict() for tx in txs],
)
```
-----------------------------------------------------