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.
-
Eugène van der Merwe
commented
You should remove the link from this page as the request is "declined":
https://developer.xero.com/documentation/api/bankstatements
I guess if I was Xero or their providers I would also decline the request.
Basically if you open up recon to API users the API users could exploit it to their own benefit bypassing Xero. Also I guess one could throw the "there is a security risk" at Xero and decline these requests too.
-
Matthew Bloch
commented
Hi! I'm also frustrated by the lack of a reconciliation API.
But when Xero say that "reconciling [via an API] requires fine grained access to bank statement data" - they're wrong!
Sure you can design the API to expose a BankTransactions endpoint, and you'd hit the contractual objection that has apparently blocked this idea for years. That'd be easy and nice and useful but OK - we can't have that.
Instead - add a new API end point for a "ReconcilationHint" - this could be an extension to the manual Bank Rules, or something new.
As developers with access to external data, we know that a particular bank transfer will have come in for a certain amount, within certain dates.
We could tell Xero via this new API "hey, when you see a transaction for £100.00 within a week of September 1st, go ahead and mark it off against Invoices 1, 2, 8 and 47".
Xero could say "thanks, I see 1, 2, 8 & 47 add up to £100, I'll bear that in mind!"
Then when it comes to the manual reconciliation, process Xero can take that as a firm instruction to mark those off automatically (or to auto-select them in the current manual process).
That would at least fulfil *my* reconcilation wishlist, where I need to mark off invoices and bills against a single bank transfer, which the current front-end makes particularly painful. I don't need access to the bank feeds, and I suspect with some more creative API design, they could pick off other use cases in the same way.
There would be some more design work to do, and would might need another reconciliation front-end - like what if a hinted reconciliation *hasn't* come in? That's a useful thing to know - but even if you could just query previous hints to see if they've been matched, that'd be everything a developer needs to build fully automated reconciliation.
-
Chris Macneill
commented
Hi Adam,
How about an update on the "Declined" post from last year? I haven't noticed any of the somewhat vague "really cool stuff" that was promised.
Automated reconciliation via APIs and/or access to actual bank feed data is an absolute must. Try working with KiwiBank, I'm sure they'd be more receptive to change and having a competitive advantage and maybe kick the "kangeroo" banks into action on this.
I don't understand what the issue is. Banks already allow manual download of formatted data for bank transactions and automated banks feeds, so how can they restrict Xero as a 3rd party from providing access to that information via API? It's the same information, just accessed in a different way.
Banks are merely the custodian of information, it is the customer's that own it and banks should not be putting artificial barriers in the way of improving productivity.
Regards
Chris Macneill
Network Engineer / Software Developer
Zelan Ltd. -
Alon
commented
+1 I would love to have this.
-
Anonymous
commented
We have developed zeevou.com, a hospitality management system seeking to automate as many processes as possible for hosts. Right now, the lack of this functionality is forcing hundreds of hosts who use Xero to have to reconcile their booking payments manually. We may need to start sending our customers to one of your competitors.
-
britton bercegeay
commented
For commercial reasons?
Okay, well tell your partners this:You guys just lost one potential customer to Plaid,
so better hop on board because you're getting left behind.Cheers!
-
Greg Yorke
commented
+1 for this … we issue about 2000 checks per month and while the reconciliation screen properly matches about 75% of them, it is still a lot of manual work to click 2000 "OK" buttons; plus, the other 25% are cases where the check number is supplied in the bank feed but the match is uncertain or not found. Was looking into automating w/ a script and disappointed that this isn't accessible.
-
Adrian
commented
We have automated bank feeds and our invoices pushed to the api contain the same reference as appears on each of our bank feeds for each transaction again we have hundreds of orders each day and to manually reconcile each against the various bank feeds is a nightmare. Surely the unique reference on each line of our bank statement which matches exactly the reference we provide on our invoices which are pushed via the api from our ecommerce platform can be automatically matched and reconciled via the api?
-
Anonymous
commented
Not pleased to see this has been declined.
What about just allowing access to the bank statement lines via the API (i.e. without the ability to reconcile)?
We currently pay £3 per month for our bank feed to be imported in to Xero, accessing it via the API would be very advantageous. -
Michael Kim
commented
Bankfeeds.io is a tool that will help import and reconcile Stripe payments into Xero.
-
Nate Clark
commented
We really need this! We're using Xero with Shopify and as our sales grow reconciling is taking longer and longer to do manually. Shopify Payments sends us a single payout daily that covers dozens or sometimes hundreds of transactions. We need to match the single bank statement deposit with the many transactions that were synced over from Shopify.
This should be EASY to do programmatically because every transaction has an ID and we know from the Shopify payout which transactions should be included. It takes a human many clicks and manual sorting to do this process.
Please allow reconciliation via API!!
-
Anonymous commented
At SMTAX (www.smtax.co.za). We have a workaround solution to this problem.
The process works similar to the below:
1. Provide us with accountant access to Xero (We are a Gold Xero Partner)
2. Send us the CSV file - you can automate this process.
3. We will reconcile all the payments
4. Notification is sent to you once allocation is completeRegards
SMTAX -
Vangelis Mihalopoulos
commented
Try out the Xero Reconcile Robot:
https://chrome.google.com/webstore/detail/xero-reconcile-robot/omchihoemeblabnbpbamimnopopfllfi
At https://www.yodeck.com we are using Stripe combined with SilverSiphon for automatically importing Stripe transactions into Xero. We get hundreds of transactions each day. With the Xero Reconcile Robot we have made it as easy as it can get to automatically reconcile matching transactions.
-
Webbb
commented
I think the xero designers may be confused on this request. From the comments, I don't see people wanting to reconcile the bank statment, I think it's the individual payments. Yes, the bank statement should always be done by a human.
I think this request more clearly defines what is needed: https://xero.uservoice.com/forums/5528-xero-accounting-api/suggestions/35787817-reconcile-individual-payments-not-bank-statement
-
Anonymous
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!
-
Anonymous
commented
We have a SAAS product line and Stripe sends a single payout through every day with dozens of payments attached to it. This is increasing for us every month.
Please *PLEASE* reconsider adding this to the API, or at least give me some way to programmatically do this. I cannot fathom paying a team of bookkeepers to sit and match hundreds of payments every single day.
-
Vangelis Mihalopoulos
commented
At https://www.yodeck.com we are using Stripe and Silversiphon for importing Stripe transactions to our Xero account, so we have tons of transactions that match perfectly. So, we created the "Xero Reconcile Robot" that automatically reconciles a) transactions matching bank rules and b) transactions that perfectly match reference codes with the payment/invoice.
It works perfectly. We will soon publish it on Chrome Web Store for others to use.
-
Anonymous
commented
+ 1
This was the main reason we were looking to move to Xero so we can reconcile the payments received from Stripe automatically... -
Anonymous
commented
Are you serious?!?!
Shopify integration means you get batch payments and the only way to do reconciliation is manually by hand look up what invoices were paid on a certain payout and then manually search for them plus the fees adjustment and perform reconciliation. Thats a ton of effort.Can you explain the "long time before we can openly share statement data via the API" ?
There are records within Xero of bank transactions, ie Shopify payout Sept 1 $2,004.31 and that is all that is needed (with an ID) to then match that to what Shopify states are the related invoices in that payout.For clarity:
- Banks are not permitting you to provide access to our bank records that you're able to import?
- Is this limited to certain banks? I'm with Bank of Melbourne, who do I need to change my bank to so my banking information is my banking information?
- Alternatively, can Xero create the ability to import the Shopify Payouts CSV and do the matching for us?
Regards,
Mark Terrill @ Smartfire BBQ -
Nick Artman
commented
Is there not a way to just give like FITID, Memo, and Description, and allow one to even add notes to the transaction?