Xero is a New Zealand–based technology company that provides cloud-based accounting software for small and medium-sized businesses.

Changelog

18 versions
v2.0.1 Latest
  • Fixed "Connecting Account Failed: Unable to retrieve a name for the account" when connecting through Auth Hub with a different Xero connector version on the Auth Hub and on the tenant. The profile now carries both email and EmailAddress, and the account name falls back from one to the other.
v2.0.0
  • BREAKING: Migrated the invoice and manual journal components to Xero's granular OAuth scopes, which replace the broad accounting.transactions scope. Every existing Xero account must be reconnected (remove and re-authorize the connection) after upgrading. Until it is reconnected, the account no longer matches these components: it disappears from the account picker and flows using it fail to start with "Access token not found for component ...".
  • CreateInvoice, UpdateInvoice: accounting.transactions -> accounting.invoices.
  • GetInvoice, NewInvoice, UpdatedInvoice: accounting.transactions -> accounting.invoices.read. These components are read-only, so they no longer request a write scope (GetInvoice previously asked for accounting.transactions).
  • CreateManualJournal, UpdateManualJournal: accounting.transactions -> accounting.manualjournals.
  • FindManualJournals: accounting.transactions.read -> accounting.manualjournals.read.
  • Why: Xero apps created on or after 2 March 2026 are only granted the granular scopes, so these components could not be used at all with such an app. Apps created earlier keep the broad scopes until 13 September 2027.
  • Unchanged: the contact and settings components, AddAttachmentToInvoice (accounting.attachments), ListJournals (accounting.journals.read), ListTenants and MakeApiCall (accounting.settings.read).
  • Tenant ID (and UpdateContact's Contact ID) dropdowns are now typeahead inputs instead of plain selects, so a value can still be typed in when the dropdown source fails or returns no options.
  • Added output examples to every output port field of the invoice, contact, manual journal and attachment components, so the Designer variable picker previews real values instead of empty placeholders.
  • ListTenants, ListAccounts, ListContacts, ListJournals, ListTrackingCategories, FindManualJournals and GetOrganization now publish their output contract as an exported ITEM_SCHEMA and build the variable picker options from it through a shared commons helper. The two hand-maintained copies each component carried had already drifted (ListAccounts labelled its array "Tracking Categories").
  • AddAttachmentToInvoice, CreateContact, GetInvoice and UpdateContact now validate their required inputs with a clear error message instead of failing inside the API call.
  • CreateContact now returns the fields it accepts as input — ContactNumber, AccountNumber, FirstName, LastName, CompanyNumber, TaxNumber, AccountsReceivableTaxType, AccountsPayableTaxType, DefaultCurrency, SalesDefaultAccountCode, PurchasesDefaultAccountCode and PaymentTerms — which a flow could previously set but never read back.
  • GetOrganization now offers the Organisation ID in its output.
  • NewContact, UpdatedContact, NewInvoice and UpdatedInvoice fail their Flow Test Mode example with an explicit error when no record is available, instead of emitting an empty one.
  • CreateContact: the Payment Terms input is now sent on the contact itself (Xero ignored it on the request root, so it was never saved); an invalid JSON value is rejected with a clear error instead of being passed through.
v1.7.0
  • Added components: CreatePurchaseOrder, GetPurchaseOrder, UpdatePurchaseOrder, FindPurchaseOrders. They use Xero's granular scopes (accounting.invoices / accounting.invoices.read), so they work with Xero apps created on or after 2 March 2026; an existing Xero account must be reconnected to grant these scopes before it can be used with them.
  • Fixed the Contact ID dropdown (ListContacts source) returning an empty list in CreateInvoice, UpdateInvoice and UpdateContact.
v1.6.4
  • Fixed *META* lock exhaustion ("Exceeded 30 attempts to lock the resource ...:locks:xero:<hash>") on long-running jobs (>15 min) that repeatedly read the same account/query via the withCache list cache. Cache hits are now served without taking the lock, so warm-cache reads no longer contend; the lock is only used to dedupe the burst that populates a cold cache.
  • withCache: the lock is now released in every code path (cache hit, success and error), the release is awaited and guarded, and lock acquisition uses an explicit TTL (60s, documented) plus a longer retry budget. If the lock still cannot be acquired the call degrades to a direct fetch instead of failing the component, and lock acquisition/release failures are logged with the lock key.
v1.6.3
  • Fixed dynamic output port options of ListAccounts, ListContacts, ListJournals and GetOrganization: the designer's options call was rejected because the required tenantId input was not supplied, leaving downstream variable pickers empty (invalid-variable chips).
  • GetOrganization now outputs the organisation object directly (fields at the top level), matching the variable picker options; previously the output was wrapped in an items key that the picker did not offer.
  • Fixed swapped label/value pairs in output options (ListAccounts Account ID, GetOrganization External Links and Payment Terms).
  • ListJournals: pagination is now handled internally using the Journals endpoint's offset mechanism (the endpoint ignores page-based pagination); the manual Offset input was removed.
  • ListAccounts, ListContacts, ListJournals, GetOrganization: required Tenant ID input is validated with a clear error message.
v1.6.2
  • Cache inspector/list source calls (ListTenants, ListContacts, ListAccounts, ListTrackingCategories) with context.lock + staticCache and a configurable TTL (context.config.listCacheTTL, default 120s) to avoid Xero 429 rate-limit errors in the designer.
  • XeroClient: honor Retry-After on 429 responses so a single throttled page does not fail the whole paginated fetch.
v1.6.1
  • Fixed account identity resolution: profile info now comes from the OpenID Connect userinfo endpoint (the authenticated user) instead of the organisation's first user, so two users on the same Xero org no longer collapse to the same connected account.
  • Re-authentication required: existing Xero connections still carry the old (organisation's first user) identity. Remove and re-authorize each affected connection after upgrading for the correct user to resolve.
v1.6.0
  • Added MakeApiCall component for performing arbitrary authorized API calls to the Xero API.
v1.5.0
  • Added test() (Flow Test Mode) to the NewContact, UpdatedContact, NewInvoice and UpdatedInvoice triggers.
v1.4.0
  • Added component: CreateTrackingCategory.
  • CreateTrackingCategoryOption: validate required inputs (tenantId, trackingCategoryId, name).
  • ListTrackingCategories: tenantId is no longer a hard schema requirement so it can back a dependent dropdown; when used as a dropdown source (isSource) it degrades to an empty list on a missing/invalid tenant or API error instead of surfacing an inspector error.
v1.3.0
  • Added component: CreateTrackingCategoryOption.
v1.2.1
  • Added output examples to component schemas.
v1.2.0
  • Added components: FindManualJournals, CreateManualJournal, UpdateManualJournal.
v1.1.3
  • Fixed issue with all trigger components not working properly with the default configuration.
v1.1.2
  • Fixed currency enumerations in CreateInvoice and UpdateInvoice components.
v1.1.1
  • Added components: NewInvoice, UpdatedInvoice, NewContact, UpdatedContact.
v1.0.3
  • Fixed type of ExpectedPaymentDate and PlannedPaymentDate fields in inspector to be date instead of string for CreateInvoice and UpdateInvoice components.
v1.0.0
  • Initial version.

Authentication

TypeDetails
OAuth 2
Authentication Hub Verified

This connector is globally authenticated and verified by Appmixer and is ready to use without registering your own OAuth application with the provider. Appmixer's Authentication Hub acts as an authentication proxy, so all OAuth-based connectors work out of the box. You can still use your own OAuth credentials (clientId and clientSecret) for enhanced customization or compliance — see the Connector Configuration section of the documentation. The Authentication Hub is enabled for all hosted Appmixer tenants; on self-managed installations it has to be explicitly set.

Scopes:
openid profile email offline_access accounting.settings.read

Triggers

4
New Contact icon

New Contact

Triggered when a new contact is created.
Additional Scopes:
accounting.contacts.read
New Invoice icon

New Invoice

Triggered when a new invoice is created.
Additional Scopes:
accounting.invoices.read
Updated Contact icon

Updated Contact

Triggered when a contact is updated.
Additional Scopes:
accounting.contacts.read
Updated Invoice icon

Updated Invoice

Triggered when a invoice is updated.
Additional Scopes:
accounting.invoices.read

Actions

22
Create Contact icon

Create Contact

Create a contact.
Additional Scopes:
accounting.contacts
Create Invoice icon

Create Invoice

Create an invoice or purchase bill.
Additional Scopes:
accounting.invoices
Create Manual Journal icon

Create Manual Journal

Create a manual journal.
Additional Scopes:
accounting.manualjournals
Add Attachment To Invoice icon

Add Attachment To Invoice

Attach files to a sales invoice or purchase bill.
Additional Scopes:
accounting.attachments
Create Tracking Category Option icon

Create Tracking Category Option

Create a new option on an existing Xero tracking category.
Additional Scopes:
accounting.settings
Find Purchase Orders icon

Find Purchase Orders

Find purchase orders. Optionally filter by status or date range.
Additional Scopes:
accounting.invoices.read
Find Manual Journals icon

Find Manual Journals

Find manual journals. Optionally filter by status.
Additional Scopes:
accounting.manualjournals.read
Get Invoice icon

Get Invoice

Retrieve an invoice or purchase bill.
Additional Scopes:
accounting.invoices.read
Get Organization icon

Get Organization

Returns information about a Xero organisation. The organisation will be the one specified by the Tenant ID field.
Get Purchase Order icon

Get Purchase Order

Retrieve a single purchase order by ID.
Additional Scopes:
accounting.invoices.read
List Accounts icon

List Accounts

Allows you to retrieve the full chart of accounts.
List Contacts icon

List Contacts

Allows you to retrieve contacts in a Xero organisation.
Additional Scopes:
accounting.contacts.read
List Journals icon

List Journals

Use this method to retrieve either one or many journals. A maximum of 100 journals will be returned in any response. Journals are ordered oldest to newest.
Additional Scopes:
accounting.journals.read
List Tenants icon

List Tenants

List tenants/organizations.
List Tracking Categories icon

List Tracking Categories

Retrieve tracking categories and options for a Xero organisation.
Update Contact icon

Update Contact

Udpate status of a single contact.
Additional Scopes:
accounting.contacts
Update Invoice icon

Update Invoice

Use this method to create or update an invoice.
Additional Scopes:
accounting.invoices
Update Manual Journal icon

Update Manual Journal

Update a manual journal.
Additional Scopes:
accounting.manualjournals
Update Purchase Order icon

Update Purchase Order

Update an existing purchase order.
Additional Scopes:
accounting.invoices
Make Api Call icon

Make Api Call

Performs an arbitrary authorized API call to the Xero API.
Create Tracking Category icon

Create Tracking Category

Create a new tracking category in Xero.
Additional Scopes:
accounting.settings
Create Purchase Order icon

Create Purchase Order

Create a purchase order.
Additional Scopes:
accounting.invoices