APIs & Integrations
Xero
Overview
Pre-built tooling
Pre-built integrations
Not seeing the integration you need? Build your own independently.
Access requirements
Pre-Requisites | Status | Comment |
---|---|---|
Paid dev account | ✅ Not required | Free, self-signup for a Xero Developer account. |
Paid test account | ✅ Not required | Developer account includes a demo company for testing. |
Partnership | ✅ Not required | |
App review | ✅ Not required | Only required for apps published to the Xero App Store. |
Security audit | ✅ Not required |
Setup guide
1
Create a Xero Developer account
Go to Xero Developer signup page and create a free account.
2
Create a new app
- Log in to your Xero My Apps developer console.
- Click New app in the top right corner.
- A new app form will appear. Enter a unique App name.
- Select Mobile or desktop app as the integration type.
- Fill in the Company or application URL and Redirect URI fields. For the Redirect URI, use:
https://api.nango.dev/oauth/callback
. - Check the developer’s terms checkbox and click Create App.
- Your app will be generated, and you will be redirected to your App details page.
3
Obtain API credentials
- Navigate to the Configuration tab to retrieve your Client ID and Client Secret.
- Click Generate a Secret to create a new Client Secret.
- You will need these credentials when configuring your integration in Nango.
4
Next
Follow the Quickstart.
Need help getting started? Get help in the community.
Contribute improvements to the setup guide by editing this page
Useful links
Contribute useful links by editing this page
API gotchas
- When a user authorizes your app, they select which Xero organization to connect. Your app can only access data for the selected organization.
- If you need to work with multiple Xero organizations, you’ll need to handle the tenant context in your API calls. After a connection is created, Nango will automatically fetch and store the
tenant_id
in the connection config, which you can then use in your API calls. - Make sure you add the
offline_access
scope to ensure the token refreshes as expected
Contribute API gotchas by editing this page