List bank statement imports
The bank_statements.imports.list operation: GET /api/v1/bank_statements/imports in the REST API and the bank_statements_imports_list tool in the MCP server.
GET
/api/v1/bank_statements/importsLists the legal entity's imported bank statements in the mode of the request, newest first, with their lines
counted by match status (matched, partial and unmatched waiting for review, ignored) and the
duplicates skipped.
Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).
At a glance
- REST:
GET /api/v1/bank_statements/imports - MCP tool:
bank_statements_imports_list - Operation ID:
bank_statements.imports.list - Scope: Legal entity
- Permission:
invoices:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Pagination:
limit(at most 100) andstarting_after - Authentication: API key with the
invoices:readscope - Since: M5
Request
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer (1 to 100) | No | |
starting_after | bsi_… ID | No |
Response
200 OK with a JSON object, a page of the list (newest first):
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of object | |
data[].id | bsi_… ID | |
data[].object | "bank_statement_import" | |
data[].entityId | ent_… ID | |
data[].livemode | boolean | |
data[].format | "csv" | |
data[].filename | string or null | |
data[].currency | string | |
data[].lineCount | integer | Transactions in the file. |
data[].counts | object | Lines by match status (kept current as lines are matched or ignored); duplicates were skipped. |
data[].counts.imported | integer | |
data[].counts.duplicates | integer | |
data[].counts.matched | integer | |
data[].counts.partial | integer | |
data[].counts.unmatched | integer | |
data[].counts.ignored | integer | |
data[].from | string or null | |
data[].to | string or null | |
data[].options | object | |
data[].options.delimiter | one of ,, ;, | |
data[].options.dateFormat | one of YYYY-MM-DD, DD.MM.YYYY, DD/MM/YYYY, MM/DD/YYYY or null | |
data[].options.decimalSeparator | one of ., , or null | |
data[].options.columns | object | |
data[].options.columns.bookingDate | string or null | |
data[].options.columns.amount | string or null | |
data[].options.columns.reference | string or null | |
data[].options.columns.counterparty | string or null | |
data[].options.columns.currency | string or null | |
data[].importedBy | object | |
data[].importedBy.type | string | |
data[].importedBy.id | string | |
data[].version | integer | |
data[].createdAt | date-time | |
data[].updatedAt | date-time | |
has_more | boolean | |
next_cursor | bsi_… ID or null |
Examples
The latest imports
HTTP
GET /api/v1/bank_statements/imports?limit=10
Authorization: Bearer or_test_…
Response (200):
JSON
{
"object": "list",
"data": [
{
"id": "bsi_01m4tx5nj8emwbyf7y9vcf48ba",
"object": "bank_statement_import",
"entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
"livemode": false,
"format": "csv",
"filename": "statement-2026-11-04.csv",
"currency": "EUR",
"lineCount": 3,
"counts": {
"imported": 3,
"duplicates": 0,
"matched": 1,
"partial": 0,
"unmatched": 2,
"ignored": 0
},
"from": "2026-11-04",
"to": "2026-11-04",
"options": {
"delimiter": ",",
"dateFormat": null,
"decimalSeparator": null,
"columns": {
"bookingDate": "Booking date",
"amount": "Amount",
"reference": "Reference",
"counterparty": "Counterparty",
"currency": null
}
},
"importedBy": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47zk"
},
"version": 2,
"createdAt": "2026-11-05T09:00:00.000Z",
"updatedAt": "2026-11-05T09:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | A field is malformed or out of range. | Fix the fields listed in details.issues and send the request again. |
resource_not_found | 404 | No bank statement import or line with this ID is visible to the request. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
permission_denied | 403 | The credentials can't read this entity's invoices (invoices:read). | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, scope_required, dry_run_not_supported, rate_limited, internal_error.