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.
-
M. Dana
commented
714 is a lot of votes.
-
Ben
commented
714 votes, more than all except 3 other issues = no appetite??
-
Anonymous
commented
Useful feature?? That's the biggest understatement of the year! It's the last part of a fully automated invoicing, payment and reconciliation loop.
By not developing it you are giving every one of your customers at least one job to do per transaction you process for them.
How can you not want to immediately eliminate the probably hundreds of millions of jobs per year that you are leaving your customer to do?
Please produce this long asked for, much needed, and massively requested "feature", that is the biggest no brainer for anyone with an ounce of common sense. Please!!
-
Stephen C
commented
+1, less buttons to click in my life
-
Ernie Casilla
commented
Reconcile via the API.. Please!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Troy Dean
commented
This would be a huge time-saver. Please Xero. Please.
-
Steve
commented
I look after a non-profit sporting organisation and I have to manually reconcile about 20,000 paypal transactions every year and it's killing me. There are many transactions per day with the same amount so the suggested matches are not always much use. We automatically create invoices that include the paypalID so what we really need is some way to strictly enforce simple string matching on the Paypal ID when Xero makes matching suggestions or an automatic process controlled by user definable rules, perhaps via the cash coding console. I understand that there might be widely varying requirements here, so if this sort of automatic reconciliation is not possible, at least let us write our own using the API.
-
Andrew
commented
Would be a good feature to have. It'll also cover some of Xero's short comings.
-
Anonymous
commented
small feature but would be of benefit.
-
Anonymous
commented
+1 this would be a massive time saver and is clearly the case for plenty of other users.
-
Anonymous
commented
+1
-
Anonymous
commented
Yes a must have feature! Xero you shouldn't be taking all these comments lightly
-
Anonymous
commented
Oops I flagged as inappropriate by mistake...!!! undo undo
-
Anonymous
commented
Yes please
-
Deborah Reid
commented
Absolutely must have!
-
Anonymous
commented
Reconcile via the API, yes! WE MUST HAVE THIS.
-
Sina Bahrami commented
Is there a way of pulling all (including the unreconciled) transactions via an API? At the moment, I'm only able to pull the reconciled ones via the "banktransactions" API.
-
Mark
commented
I'll chime in with my specific use case, just in case it's helpful to Xero in the future. When my customer pays me via Stripe, I listen for the Stripe Webhook and fire off a Receive-type BankTransaction to Xero. I mark it as reconciled when I create it because I run a cron job every hour that compares the balance of the Stripe bank account in Xero against the balance of Stripe in Stripe itself. Therefore, I'm practicing continuous reconciliation rather than reconciling periodically. Unfortunately, sometimes when my customers pay me by ACH through Stripe, their payment bounces do to insufficient funds. In those cases, I'd like to delete that BankTransactionID in Stripe to keep the balances reconciled.
-
Talal
commented
Must have ASAP. Clients want this.
-
Roger
commented
must have