Integrations

Xero

Connect Xero to manage invoices, bills, contacts, bank transactions, payments, reports, payroll, and projects.

OAuth authorizationApproval, Xero publishes no SLA for certif…Finance & BillingXero API docs

You paste the Client id and a freshly generated Client secret from a Xero Web app you create in the Xero Developer portal.

App review before this connector works

Xero issues OAuth 2.0 client credentials instantly and an uncertified app can read and write real organisation data on day one - but it is hard-capped at 25 connected tenants (5 on the free Starter tier), and Xero must formally certify the app against published checkpoints before it can pass that cap, list on the Xero App Store, or move to the paid Plus tier and above.

Typical wait
Xero publishes no SLA for certification. The gate is commercial as much as clerical: Xero's own 'Building and growing your app' guide says the review step checks you have built Sign Up with Xero and have ten active customer connections, then a Xero developer evangelist works through the certification checkpoints with you. Elapsed time is therefore driven mostly by how long you take to onboard those ten customers and clear rework. Xero states no review turnaround anywhere in its docs - treat any specific figure quoted elsewhere as unofficial. The security self-assessment is a separate step with no published turnaround either; Xero sends it to you at 800 connections or when you request Practice Manager access.
Cost
Applying for certification is free. Xero's published developer pricing (developer.xero.com/pricing, tiers taking effect 2 March 2026, prices AUD and tax exclusive): Starter free, max 5 connections, no payment method needed; Core $35 AUD/month, max 50 connections, no certification required; Plus $245 AUD/month, max 1,000 connections, certification required; Advanced $1,445 AUD/month, max 10,000 connections, certification plus an initial and annual security assessment; Enterprise price on application, no connection limit and App Store listing mandatory. Egress above the tier allotment (10/50/250 GB on Core/Plus/Advanced) is $2.40 AUD per GB; ingress is unlimited. Custom Connections are a separate paid per-connection subscription that the Xero customer buys for their own organisation.
Blocked until approved
Nothing on day one for a single-org or small deployment: an uncertified app authenticates and reads/writes live data immediately. What is blocked is scale and premium surface area. Connections: the free Starter tier caps at 5 connections, and Xero's connections guide caps uncertified apps at 25 unique tenants overall - beyond the cap, new tenant authorisations are refused. A second, sharper limit bites per customer: any one Xero organisation may connect to at most 2 uncertified apps, so a prospect who already has two uncertified integrations cannot connect yours at all until you are certified. Certification is also the prerequisite for the Plus tier and above, for a Xero App Store listing (checkpoint 2 requires Plus tier or higher), and for Rapid Sync (lifted API limits for the first 30 minutes of a new connection), which is Not Included on Starter and Core. The Journals endpoint, the Xero Practice Manager (XPM) API and Bulk Connections are Advanced-tier only and additionally require the security assessment plus use-case approval. Separately, until you pass the security self-assessment your connection count is capped at 999 and XPM/Xero HQ APIs stay closed. Rate limits are tier-based rather than certification-based: 1,000 API calls per day per org on Starter versus 5,000 on Core and above.
Works meanwhile
Everything for a single-org or small-scale integration. Create the app in My Apps, get client_id/client_secret immediately, run the full OAuth 2.0 authorization code or PKCE flow, and call the Accounting, Payroll and Files APIs against real organisations right away - or against the free Xero Demo Company for development. Custom Connections (client credentials, one organisation, no certification) are a supported production route for a machine-to-machine integration with a single customer.

Where to apply: Register at developer.xero.com and create the app under My Apps; credentials are issued on the spot. Certification is now requested from inside the developer portal rather than by a separate partner application: get onto the Core plan, then log into the Xero Developer Centre, select your app and click 'Manage Plan' to upgrade to Plus - certification is applied for as part of that upgrade. Work through developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints first, and expect to provision a test account for the reviewer; a Xero developer evangelist runs the review. Two categories need prior approval before you can even apply: apps using the Practice APIs including Xero Practice Manager (email api@xero.com) and financial-services apps such as banking, payments, lending and insurance (Section 11 form). Custom Connections are created in the same My Apps screen by choosing 'Custom connection' as the integration type.

  • The review step checks you already have ten active customer connections (and Sign Up with Xero built), so you cannot certify before you have real users - and the free tier only allows 5 connections, so you must be paying for the Core tier to reach ten.
  • Sign Up with Xero (and Sign In with Xero for returning users) is checkpoint 1 and a hard requirement - retrofitting it into an existing signup flow is the most common source of rework.
  • Connection-handling requirements are strict: you must display connected tenant names and connection status, provide working Connect/Disconnect/Reconnect buttons, handle disconnects initiated from Xero's Connected Apps screen, alert the user on connection errors, and have a process that deletes or revokes unused or expired connections. Xero's connections guide says failing these sends you back to make changes before certification proceeds.
  • Over-broad or unexplained scopes are rejected - request the minimum and expect to justify each one. offline_access is a stated certification requirement.
  • Granular scopes: apps created on or after 2 March 2026 use them by default; older apps have until September 2027 to migrate off broad scopes, and granular scopes only became requestable from April 2026.
  • The app name cannot contain the word 'Xero' and must match your go-to-market product name.
  • You cannot mix tenant types in one authorisation - accounting scopes and Practice Manager scopes need separate auth flows, or the user gets an error.
  • The security step is a self-assessment, not certification: you must pass it before reaching 1,000 connections or touching the Practice APIs. Until then your connections are capped at 999 and XPM/Xero HQ are closed. Xero only sends you the assessment at 800 connections or when you request XPM access, so it lands late in the ramp.
  • Custom Connections only work for Xero organisations in Australia, New Zealand, the UK and the US, only against one organisation each, cannot access Xero Practice Manager or Xero HQ, and require the customer to have bought a Custom Connection subscription before they can authorise.
  • Xero's developer terms now prohibit using data obtained from Xero APIs to train AI/ML models, and prohibit bots or browser extensions that simulate user actions (new developers from 4 December 2025, existing from 2 March 2026).
  • The 25-tenant uncertified cap in the connections guide and the 5-connection Starter tier in the pricing table are documented separately and do not read as one consistent number - confirm your app's actual limit on the usage tab of the developer dashboard rather than assuming.
Setup time
5 min
Auth
OAuth authorization
API base URL
https://api.xero.com/api.xro/2.0
Rate limits
Per connected organisation: 60 calls per minute, 5,000 calls per day, and 5 concurrent calls. App-wide across all organisations: 10,000 calls per minute. Exceeding any limit returns 429 with a Retry-After header.

Before you begin

  • Xero login with access to at least one organisation. The free Demo Company works for testing.
  • No developer programme signup or app review is needed. A private Web app can connect up to 25 organisations.
  • Adviser or Standard access on the organisation you want to authorise

Get your credentials

Open My Apps in the Xero Developer portal

Go to https://developer.xero.com/app/manage and sign in with your normal Xero login.

Open this screen →

developer.xero.com/app/manage
Acme Ops

My Apps

Apps you have created on the Xero Developer platform.

New app
App nameIntegration typeConnectionsCreated
PopMCPOAuth 2.0Web app0 of 25Mar 4, 2026

An empty list is normal on a first visit.

Create a Web app

Click New app, enter an App name, and choose Web app as the Integration type. Add your Company or application URL, paste PopMCP's callback into Redirect URI, tick the terms box and click Create app.

Open this screen →

developer.xero.com/app/manage/newapp
Acme Ops
My Apps / New app

Add a new app

Tell us about the app you are building.

App details
App name
PopMCP
Integration type
Web app
Company or application URL
https://example.com
Redirect URI
https://app.popmcp.com/oauth/xero/callback
I have read and agree to the Xero Developer Platform Terms & Conditions
Create appCancel

Mobile or desktop app and Machine to machine use different flows. Pick Web app.

Reveal the Client id

Open the app and click Configuration in the left pane. Click the eye icon beside Client id and copy the value into PopMCP's Client ID field.

Open this screen →

Generate a Client secret

On the same Configuration page click Generate a secret. Copy the value from the Client secret 1 box before you leave the page.

Open this screen →

developer.xero.com/app/manage/details
Acme Ops
My Apps / PopMCP / Configuration

Configuration

Credentials and redirect URIs for this app.

App credentials
Client id
7B4C****E12A
Client secret 1
Generated Mar 4, 2026
Redirect URI
https://app.popmcp.com/oauth/xero/callback
Client secret 1
Client secret
kQ8s****Zt5v
CopyDone

Xero shows the secret once. Leaving the page means generating a replacement.

Connect in PopMCP and choose the organisation

Paste both values into PopMCP and click connect. On Xero's consent screen pick the organisation and click Allow access.

Connect in PopMCP

Open your workspace, choose Xero in the marketplace, and fill in the connect dialog:

FieldWhat to enter
Auth typepresetCreate an app at developer.xero.com → "New app" → choose "Web app". The OAuth flow keeps your Xero login on Xero's side.
Client IDtextYour app's "Client id" from the Configuration tab on developer.xero.com.
Client secretsecretGenerate a "Client secret" on your app's Configuration tab. Stored encrypted; used server-side only and never shown again.Encrypted with AES-256-GCM on save and never shown again.
Redirect URI
https://app.popmcp.com/api/providers/xero/callback

Add this exact URL to your Xero app's "Redirect URIs" (Configuration tab on developer.xero.com / My Apps). It must match exactly, or Xero rejects the authorization.

PopMCP verifies the credential against Xero immediately. On success the connection flips to Verified and its MCP tools are provisioned.

Permissions PopMCP requests

These are the scopes sent to Xero at authorization time.

ScopeWhy PopMCP asks for it
openidRequired by the tools this connector exposes.
profileRequired by the tools this connector exposes.
emailRequired by the tools this connector exposes.
offline_accessIssues the refresh token. Without it the connection dies after 30 minutes and cannot renew itself.
accounting.transactionsInvoices, bills, credit notes, payments and bank transactions, read and write.
accounting.contactsCustomers and suppliers.
accounting.settingsChart of accounts, tax rates, tracking categories and organisation details.
accounting.journals.readRequired by the tools this connector exposes.
accounting.reports.readProfit and loss, balance sheet, aged receivables and the other standard reports.
accounting.reports.tenninetynine.readRequired by the tools this connector exposes.
accounting.budgets.readRequired by the tools this connector exposes.
accounting.attachmentsRequired by the tools this connector exposes.
payroll.employeesOnly granted if your Xero region has Payroll. On regions without it the payroll tools return errors.
payroll.payrunsRequired by the tools this connector exposes.
payroll.payslipRequired by the tools this connector exposes.
payroll.timesheetsRequired by the tools this connector exposes.
payroll.settingsRequired by the tools this connector exposes.
filesRequired by the tools this connector exposes.
assetsRequired by the tools this connector exposes.
projectsRequired by the tools this connector exposes.

Verify it worked

PopMCP shows the Xero connection as Connected and names the authorised organisation. A contacts or invoices call returns rows from that organisation.

Troubleshooting

unauthorized_client or redirect_uri mismatch on the consent screen

Why: The Redirect URI on the app's Configuration page does not exactly match PopMCP's callback.

Fix: Copy the callback from PopMCP, paste it into Configuration, then Redirect URIs, and click Save.

You lost the client secret

Why: Xero shows a secret once and never again.

Fix: Open the app's Configuration page, click Generate a secret, and paste the new value into PopMCP. Delete the old secret afterwards.

invalid_grant when the connection refreshes

Why: offline_access was not requested, or the refresh token went unused for 60 days.

Fix: Reconnect from PopMCP so a new refresh token is issued.

403 on payroll or projects endpoints

Why: That Xero product is not enabled on the organisation, or the scope was not consented.

Fix: Enable the product in Xero, then reconnect so consent is granted again.

429 Too Many Requests

Why: Over 60 calls in a minute or 5,000 in a day for that organisation.

Fix: Wait for the period named in the Retry-After header. The X-MinLimit-Remaining and X-DayLimit-Remaining headers show what is left.

Reference

On this page