Skip to content

List bank statement lines

The bank_statements.lines.list operation: GET /api/v1/bank_statements/lines in the REST API and the bank_statements_lines_list tool in the MCP server.

GET/api/v1/bank_statements/lines

Lists the legal entity's bank statement lines in the mode of the request, newest first. Filter by importId, by matchStatus (one or several: the review queue is partial and unmatched) and by invoiceId (the lines that paid or point to an invoice).

A line in review says why in review.reason: amount_mismatch or currency_mismatch (its reference names an invoice, the amount differs), ambiguous_reference (it names several), already_matched (another line of the import paid that invoice), amount_only (no reference, but open invoices with exactly this amount due), no_match or not_incoming (money going out). review.candidateInvoiceIds are the invoices it may pay. Resolve a line with bank_statements.lines.match or .ignore.

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/lines
  • MCP tool: bank_statements_lines_list
  • Operation ID: bank_statements.lines.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) and starting_after
  • Authentication: API key with the invoices:read scope
  • Since: M5

Request

Query parameters

FieldTypeRequiredDescription
importIdbsi_… IDNoOnly this import's lines.
matchStatusone of unmatched, matched, partial, ignored or array of one of unmatched, matched, partial, ignoredNoOne status or several; the review queue is partial and unmatched.
invoiceIdinv_… IDNoOnly the lines that paid or point to this invoice.
limitinteger (1 to 100)No
starting_afterbsl_… IDNo

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idbsl_… ID
data[].object"bank_statement_line"
data[].entityIdent_… ID
data[].livemodeboolean
data[].importIdbsi_… ID
data[].rowintegerThe line's row in its file (the header is row 1).
data[].bookingDatestring
data[].amountmoneySigned: incoming money is positive.
data[].referencestring
data[].counterpartystring
data[].matchStatusone of unmatched, matched, partial, ignoredmatched (paid an invoice), partial and unmatched (the review queue) or ignored.
data[].reviewobject or nullWhy the line wasn't matched automatically, and the invoices it may pay.
data[].invoiceIdinv_… ID or nullThe invoice the line paid (matched) or points to (partial).
data[].brandIdbrd_… ID or null
data[].ledgerTransactionIdtxn_… ID or null
data[].payoutItemIdstring or nullThe processor payout (a reconciliation item) a matched line confirms instead of paying an invoice.
data[].matchedByone of automatic, manual or null
data[].matchedAtdate-time or null
data[].ignoredReasonstring or null
data[].versioninteger
data[].createdAtdate-time
data[].updatedAtdate-time
has_moreboolean
next_cursorbsl_… ID or null

Examples

The review queue

HTTP
GET /api/v1/bank_statements/lines?matchStatus=partial&matchStatus=unmatched
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "bsl_01m4tx5nj8emwbyf7y9vcf48bc",
      "object": "bank_statement_line",
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
      "livemode": false,
      "importId": "bsi_01m4tx5nj8emwbyf7y9vcf48ba",
      "row": 3,
      "bookingDate": "2026-11-04",
      "amount": {
        "amount": "450000000",
        "currency": "EUR"
      },
      "reference": "Invoice 2026-000132",
      "counterparty": "Berg Software AG",
      "matchStatus": "unmatched",
      "review": {
        "reason": "amount_only",
        "candidateInvoiceIds": ["inv_01m4tx5nj8emwbyf7y9vcf48bd"],
        "candidates": [
          {
            "invoiceId": "inv_01m4tx5nj8emwbyf7y9vcf48bd",
            "number": "GEN-2026-000132",
            "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47z0"
          }
        ]
      },
      "invoiceId": null,
      "brandId": null,
      "ledgerTransactionId": null,
      "payoutItemId": null,
      "matchedBy": null,
      "matchedAt": null,
      "ignoredReason": null,
      "version": 1,
      "createdAt": "2026-11-05T09:00:00.000Z",
      "updatedAt": "2026-11-05T09:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A field is malformed or out of range.Fix the fields listed in details.issues and send the request again.
resource_not_found404No 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_denied403The 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.