Xero has the best-documented API of the three and it stopped being free in March.
Xero allows 60 calls a minute and 5,000 a day per organisation, with webhooks on six record types and 30-minute access tokens. Since 2 March 2026 the API is a paid, tiered product — free stops at five connected organisations. Everything on this page comes from Xero’s own documentation.
What Xero publishes about its API
Documentation
Yes — full reference public at developer.xero.com Xero developer centre, fetched 1 September 2026.
Authentication
OAuth 2.0 authorisation code flow, PKCE for native apps. Single-page apps are not supported. Custom Connections use client credentials and connect to one organisation only. Xero OAuth 2.0 FAQ, fetched 1 September 2026.
Token lifetimes
Access tokens expire after 30 minutes. Unused refresh tokens expire after 60 days. Refresh tokens rotate on every use, with a 30-minute grace period to retry the old one if you never received the response. Xero OAuth 2.0 FAQ, fetched 1 September 2026.
Rate limits
5 concurrent calls, 60 calls per minute and 5,000 calls per day per tenant on Core tier and above — 1,000 per day on the free Starter tier. 10,000 calls per minute across all tenants for the app. Xero API limits, fetched 1 September 2026.
When you exceed one
HTTP 429, with a Retry-After header on the minute and daily limits but not on the concurrent or app-wide limits, and an X-Rate-Limit-Problem header naming which limit you hit. Xero API limits, fetched 1 September 2026.
Pagination
Page size defaults to 100, maximum 1,000. Only nine endpoints paginate at all — invoices, contacts, credit notes, bank transactions, manual journals, payments, purchase orders, prepayments and overpayments. Journals come in fixed batches of 100. Xero requests and responses, fetched 1 September 2026.
Webhooks
Yes, for contacts, invoices, credit notes, overpayments, prepayments and subscriptions — create and update events only. Xero webhooks, fetched 1 September 2026.
Event verification
HMAC-SHA256 of the payload against your signing key, base64 encoded, compared to the x-xero-signature header. Your endpoint must return 401 for incorrectly signed payloads or Xero will not activate the subscription. Xero webhooks, fetched 1 September 2026.
Retry behaviour
Immediate retry, then every 15 minutes for 24 hours, after which the subscription is disabled and collaborators are emailed. Events during retry or disabled states are held for 31 days and replayed in order. Xero webhooks, fetched 1 September 2026.
Bulk operations
No hard cap, but Xero recommends about 50 nodes per request and 100 inventory items per request. Use summarizeErrors=false or one bad record fails the whole POST. Xero API limits, fetched 1 September 2026.
Test environment
Free — a Xero account plus a demo company, with no published expiry or record cap. Xero getting started, fetched 1 September 2026.
Data location
Xero does not publish where the data is stored.
Cost of API access
Paid and tiered since 2 March 2026: Starter free with 5 connections and 1,000 calls a day, Core $35 AUD a month, Plus $245, Advanced $1,445, Enterprise on application. Data egress is metered too, with overage at $2.40 AUD a gigabyte. Xero API pricing and policy updates, fetched 1 September 2026.
Every line above is Xero’s own documentation, fetched 1 September 2026, linked so you can check it yourself. One of the 13 fields is not published at all — it is marked, and absences like it are what cost you time. The full capability register puts this beside the other eight.
What the Xero API does and does not allow
The accounting ledger most Australian small businesses run on, and the system every other integration eventually has to agree with.
Everything in the strip above is Xero’s own published documentation, fetched 1 September 2026 and linked to the page it came from. We have not paraphrased it into something friendlier, because the exact wording is what you need when a limit bites at four in the afternoon.
What follows is what those facts mean for a build — the constraints that change a design decision rather than the ones that are merely true. If you want the same treatment for the other eight systems side by side, that is the capability register. If you want to know whether we have built against both sides of a particular pairing, the integration checker answers that specific question.
Bills in: from a supplier PDF to an approved bill
This is the most common thing anyone wants automated in Xero and the most misunderstood. The hard part is not the API call — creating a draft bill is a single POST. The hard part is everything before it: reading a supplier invoice that arrived as a photograph of a printout, deciding which supplier it is when the trading name on the paper does not match the contact record, and working out which job it belongs to.
What the API gives you is a clean boundary to stop at. A bill can be created as a draft, sit there for a human to glance at, and be approved by a person or by a rule. We build almost every accounts payable flow to stop at draft by default, because the failure mode of an over-eager automation in a ledger is not an error message — it is a number that is quietly wrong for a month.
Attachments matter here and have their own limits: ten per document, ten megabytes each, and filenames containing certain characters are rejected outright as a bad request. That last one has broken more supplier-invoice pipelines than any rate limit, because scanner software loves putting colons in filenames.
Stop at draftThe default. A human sees the bill before it hits the ledger, and the automation has done the typing rather than the deciding.
Approve on a ruleUnder an amount, from a known supplier, matched to an open purchase order. Three conditions, all auditable, all yours to change.
Never delete an approved billXero will not let you anyway — approved documents are voided, not deleted. Design the reversal path before you need it.
Invoices out: from a finished job to a paid one
The direction that actually moves money. A job marked complete in the field becomes a draft invoice in Xero with the right contact, the right line items and the right tracking categories, and it does so the same day rather than at the end of the month.
Two constraints shape the design. Any line item can carry a maximum of two tracking categories, so if your reporting depends on three dimensions the third has to live somewhere else. And discounts are supported on sales invoices and quotes but not on bills or credit notes, which is a small asymmetry that becomes a large one if you built the credit-note flow second and assumed symmetry.
The bigger point is the one we make on quote to invoice: late payment is the customer’s fault, late invoicing is yours, and it is usually the larger of the two. Xero’s own research puts Australian small businesses at an average of 6.6 days late on payment. A job finished on the third and invoiced on the thirtieth has lost twenty-seven days before anyone was late at all.
Rate limits and what breaks at scale
Xero publishes four limits and they interact in a way worth understanding before you design anything: five concurrent calls, sixty a minute, five thousand a day per organisation, and ten thousand a minute across every organisation your app touches. The concurrency limit is the one people hit first, because it is the one that does not care how patient you are.
The daily limit is the one that changed. Since March 2026, an app on the free Starter tier gets 1,000 calls a day, not 5,000 — and Xero’s own FAQ page still says 5,000 flat, so there are two official pages that disagree. We have linked the tiered one, because it is the newer and the more specific of the two.
What breaks at scale is almost never the limit itself. It is the initial sync. Pulling two years of history for a business with 8,000 invoices, at 100 per page and 60 requests a minute, is a job you schedule rather than a job you run — and it is exactly the shape of work that now also consumes a metered egress allowance.
What Xero’s documentation supports — and the caveat on each. Source: Xero developer documentation, fetched 1 September 2026.
Xero
Read records on demand
●Yes60 a minute, 5,000 a day per organisation on Core tier and above. Only nine endpoints paginate.
Write records in
●YesDrafts, approvals and voids. Approved documents cannot be deleted, by design.
Know the moment something changes
◐PartlyWebhooks on six record types, create and update only. Payloads carry identifiers, not data.
Verify an event came from them
●YesHMAC-SHA256 in x-xero-signature. You must return 401 on bad signatures or the subscription never activates.
Recover after an outage
●YesEvents held 31 days and replayed in order once the subscription is healthy.
Bulk load history
◐PartlyNo hard cap but 50 nodes per request recommended, and large pulls now consume a metered egress allowance.
Keep data in Australia
–Not assessedXero does not publish where the data is stored.
What Xero does not publish
One of the thirteen fields we track is simply absent from Xero’s documentation: where your client’s data physically sits.
This is the part of an integration page that competitors leave out, and it is the part that costs money. An undocumented rate limit is not an academic gap — it means the first time you find the ceiling is in production, on someone else’s business, usually on the busiest day of their month.
We are not going to fill these in with figures from a forum thread. Numbers circulate for most of them, and some are probably right, but we cannot show you where they came from and neither can the person who posted them. When we have measured Xero properly under load, those figures will appear here with the date we measured them and the conditions we measured them under. Not before.
What we have built, and what we have not measured
We have implemented against Xero in production. That is a real fact and it is also a limited one — it tells you we have solved this system's problems before, and it does not tell you how fast, how reliably, or at what volume.
The honest position is this. Everything on this page above the line is the vendor's published documentation, which we fetched, dated and linked rather than paraphrased. Nothing on this page is a Kindra measurement, because our measured register is not finished and publishing half of it dressed up as all of it would make this page less useful, not more.
What we would do on an engagement is measure the specific things that matter for your build — the endpoints you depend on, at your volume, with your data — and hand you those numbers whether or not they suit us. If they say the integration is harder than we quoted, you get told that too. Start with a Leak Check, or read how we work first if you would rather know the shape of it before talking to anyone.
Objections
Does the new Xero API pricing get passed on to me?
It depends entirely on shape, and we will tell you which before you commit. A single business connecting its own Xero organisation sits inside the free Starter tier and pays nothing extra. A build that connects many organisations, or that pulls large volumes of data regularly, crosses into a paid tier and a metered egress allowance — and that is a real running cost that belongs in the quote rather than turning up later. We would rather have that conversation at the Leak Check than in month three.
Isn’t Xero enough on its own?
Very often, yes — and if it is, we will say so and there is no engagement. Xero is a mature product that solves the problem it was built for. Integration work is only worth paying for when the cost sits between systems: the same information being typed into Xero and then into something else, or a decision waiting because two systems disagree. If everything you need lives inside Xero, buy the plan that fits and spend the money elsewhere.
What happens when they change their API?
They will. Three of the nine systems in our register shipped a breaking or cost-changing update in the last twelve months. What matters is not preventing that — nobody can — but whether the integration was built so the change is a contained fix rather than a rebuild, and whether anyone is watching for the deprecation notice. You own the code either way, so you are never stuck with us to get it fixed.
Book a free Leak Check
20 minutes. We find where the money's going. No pitch.