Reconcile via the API
Be able to reconcile bank statement lines via the API.
Thank you for the continued feedback and for your patience on this long‑running request. We know that programmatic bank reconciliation and AI‑driven workflows are increasingly important to many of you, and we understand the frustration that this capability is not available via the Xero API.
After reviewing this again with our legal, risk and banking teams, we have confirmed that we will not be adding the ability to reconcile bank statement lines via the API or to expose unreconciled bank statement data via the public API.
There are a few key reasons for this decision:
- Regulatory and contractual obligations on raw bank data. Unreconciled bank statement lines are “raw” banking data – unmodified information that comes directly from banks. In markets such as Australia, this data is treated as banking data under consumer data rights regimes. Sharing it on to third parties (including via an open API) would require us to treat every consuming app as if it were a regulated data recipient, with substantial security, accreditation and liability obligations that sit on Xero as an intermediary as well as on those third parties. We have taken a policy decision not to operate as an intermediary for redistributing raw bank statement data.This ensures that the highest standards of banking security are maintained directly between the customer and their financial institution.
- Our data‑sharing boundary: unreconciled vs reconciled data. We draw a clear line between:
- Unreconciled statement data, which is banking data supplied to us by banks and subject to the obligations above; and
- Reconciled transaction data, which has been improved within Xero (for example, matched to contacts, invoices or accounts) and for which Xero is the custodian on behalf of the customer.
- We can expose certain reconciled/derived data through specific endpoints such as the Finance API’s Bank Statements Plus in limited, finance‑focused scenarios, but those endpoints are not designed or licensed for broad, high‑volume access to raw bank feeds or for third‑party replication of Xero’s bank reconciliation engine.
- Why “reconcile via the API” falls on the wrong side of that line. Supporting full reconciliation via the API would, in practice, require programmatic access to unreconciled statement lines and a way to push reconciliation decisions back into Xero. That would effectively recreate bank reconciliation workflows outside Xero while still relying on Xero to redistribute raw bank data, which is exactly the pattern our regulatory, security and contractual constraints are designed to avoid. For these reasons, this is not something we can safely or responsibly offer as an open API capability.
We recognise that a small number of existing partner applications continue to receive limited access to certain statement data under legacy, contract-specific arrangements that pre‑date this policy. These specific arrangements are strictly managed under heightened security and compliance terms. To ensure we meet our current regulatory and risk standards, we are not extending these legacy permissions to new partners or applying them to any new use cases.
We also hear the concern that “this is customer data and customers should be able to use it where they choose”. We agree that customers should have access to their own banking information, and open banking frameworks are designed to give customers direct access to that data from their bank or banking aggregator, without Xero sitting in the middle as a redistributor. For apps that need raw bank statements to power AI or other automation, the right pattern is to source that data directly from the bank or an accredited open‑banking provider, and then connect into Xero using the data structures we do expose.
Our strategy for bank reconciliation is to invest in automation inside Xero, where we can manage risk, performance and user experience end‑to‑end. That includes features such as bank rules, suggested matches, cash coding, and newer improvements like statement-period bank reconciliation, enhanced bank feeds, and our AI-powered automation features, rather than exposing the underlying feeds for external reconciliation logic.
We will continue to review our approach as regulation, banking connectivity and customer needs evolve, but we want to be clear and transparent that this specific request will remain declined under our current legal and risk framework. We genuinely appreciate the thought and passion that has gone into this thread, and we’ll keep focusing our efforts on making in‑product reconciliation as efficient and intelligent as we can, within those constraints.
-
Nick McGrath
commented
"commercial reasons".... i.e. force people to use GoCardless and Stripe for automatic reconcilling type functionality to get fees and commissions, rather than make free transactions via direct deposit/bank transfer too easy for the customer...
-
George
commented
+1
-
Anonymous
commented
I understand the decline for this type of feature but it could be done without sensitive data breached. Example: a feature in the api where you can only POST the data to xero. If a match with payment reference matching, invoice, reference, account name or account number is matched with a total
amount match found inside xero it will reconcile and just return a success with the invoice that was reconiled or no success message if failed to find anything. This way no bank data information is passed outside of xero. -
Pete Everett
commented
+1
-
Suryakant Patel commented
is there any aip, where we can get unreconcile list? I aware of api method "GetBankTransactionsAsync" but its not return all bank unreconcile items list, its returns only "Account Transactions" list
-
Stephanie Hope
commented
Yes please to this! We want to be able to auto-match transactions so a reconciliation endpoint is needed.
-
Anonymous
commented
+1!!
-
Matthew Bloch
commented
To Aaron, if you are only ever reconciling one payment for multiple receivables, you can do this via the API. If you submit a BatchPayment with all your invoices lined up against the payment, the reconciliation screen will show that payment in green and let you match it up with one click.
(the same applies for payables)
What doesn't work is where you receive a payment for multiple invoices, minus the amount of a bill. It's annoying because you can mark these off against the payment manually, so Xero clealy understands that it's possible. But you can't yet automate it.
-
Lauren
commented
Another +1 vote for this so we can auto-match transactions
-
Phil Dominick
commented
+ Vote for this as we need this data to auto match transactions
-
Anonymous
commented
We'd also love API access to reconciliation data! Consider this a +1
-
Anon Also
commented
We need a solution for this asap!!!! Please open this up and not decline.
-
Anon Also
commented
<reconciling requires fine grained access to bank statement data> This is 100% incorrect. All that is needed is the date, amount, and who it's from (contactID), plus the ability to match it with one or many charges. The charges are available in the API already.
Can you please expand your thinking on this? It doesn't make sense and is frustrating the executives in our company as they're continually having to monitor this frustrating manual process. I convinced them to switch to your software and now I look like a complete idiot since you closed this. Ugh!
-
Aaron
commented
Hi, this feature is a must for us. Would completely eliminate the need for a very time-consuming and error-prone manual reconciliation process. We often receive a single payment for 100+ invoices, and reconciling this manually in Xero is ridiculous.
-
Mason Chase
commented
Hi
We have made an app that assist an accounting firm and large team to import statement, manage tasks for transaction and reconcile them,
this feature is very important for us to automate since Xero design has limitation and we can't achieve this goal without API
Regards
Mason -
Wubz
commented
I would like an extract from xero of the actual bank statement lines as a way of quantifying any large un-reconciled items for cash flow purposes as opposed to actually reconciling outside of Xero
-
Adam
commented
This is a cluster****. Basically, we can import bank statement lines from a csv, and even if we know *exactly* which records they should be matched to, we're forced into a massively time-consuming and error prone process. We can't even match by custom fields in the statement lines, so even if the bank statement is imported with precise matching data, the system instead makes error-prone suggestions, that end up as accounting errors.
Completely crazy guys! You need to do better here. I'm currently hunting for an accounting solution that has the flexibility to do this job correctly.
-
Anonymous
commented
QUOTE: "We know that reconciling would be a valuable API feature, but reconciling requires fine grained access to bank statement data and unfortunately we’re not able to share that data via the API for commercial reasons."
Isn't this data that the bank freely shares via it's statement export? Data that I upload myself into XERO ( I have no automatic bank feeds ). Surely I'm allowed to access my own data, that I uploaded?
-
Craig Byren
commented
Hi, the Xero bank statement functionality is great but ideally I want to pull these bank statement lines into my system via an API as the matching to a Bill needs to get done on my side. I already have functionality that then allows me to Post the reconciled payment through, but in order to prevent duplications I would want to be able to delete the Bank Statement line using the API. Is this possible? Is there anyway I can at least read the unreconciled Bank Statement Lines?
-
Anonymous
commented
+1