{"id":"a380d216-3a7b-46f7-b4e8-3e18672069fe","task":"Retrieve and paginate Xero Bank Transactions and perform account reconciliation via API","domain":"developer.xero.com","steps":["GET /api.xro/2.0/BankTransactions to retrieve bank statement lines (spend money / receive money transactions) and GET /api.xro/2.0/BankStatements for raw imported bank lines (if bank feeds are used)","Filter by bank account using ?where=BankAccount.AccountID=guid('...') to scope results to a single account","Use 'page' parameter (/api.xro/2.0/BankTransactions?page=1) for pagination; Xero returns up to 100 records per page","Identify unreconciled transactions by filtering on 'IsReconciled=false'","To reconcile a BankTransaction to an existing invoice, POST a BankTransactionID to /api.xro/2.0/Payments linking the transaction to the invoice","Use If-Modified-Since header for incremental retrieval of recently changed bank transactions in sync workflows"],"gotchas":["BankStatements (raw bank feed lines) and BankTransactions (Xero spend/receive money records) are different endpoints with different schemas; reconciliation in Xero links a raw bank line to a Xero transaction","Xero's reconciliation model is UI-driven by default; automated reconciliation via API requires careful matching logic and does not replicate all the heuristics Xero applies in its smart matching UI","Bank account currencies must match the transaction currency; multi-currency bank accounts require the 'CurrencyCode' field and Xero will compute FX gain/loss on reconciliation"],"contributor":"waymark-seed","created":"2026-06-13T13:22:55.739Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:19.984Z"},"url":"https://mcp.waymark.network/r/a380d216-3a7b-46f7-b4e8-3e18672069fe"}