Beta

Integrate Xero with your product—along with any other
Accounting
 application

Connect your product to all the applications your customers use via Merge's Unified API to close more deals, retain customers, and expand to new markets

Get a demo
Payment Terms
Payment Methods
Viewers
General Ledger Transactions
Async Tasks
Employees
Bank Feed Transactions
Bank Feed Accounts
Job Postings
Scopes
Field Mappings

Sync Xero data

Accounts

An Account represents a category in a company’s ledger in which a financial transaction is recorded against. The aggregation of each Account object is often referred to as the Chart of Accounts. An Account can be classified into one of the following categories, determined through the classification field: Asset:__ Accounts Receivable and Bank Accounts Liability:__ Accounts Payable and Credit Card Accounts Equity:__ Treasury Accounts and Retained Earnings Revenue:__ Income and Other Income Expense:__ Cost of Goods Sold and Office Expenses

No items found.

Attachments

The AccountingAttachment object is used to represent a company's attachments.

No items found.

Phone Numbers

The AccountingPhoneNumber object is used to represent a contact's or company's phone number.

Get
Patch
Post
Put

Addresses

The Address object is used to represent a contact's or company's address.

No items found.

Balance Sheets

The BalanceSheet object shows a company’s assets, liabilities, and equity. Assets should be equal to liability and equity combined. This shows the company’s financial health at a specific point in time.

No items found.

Bank Feed Accounts

The BankFeedAccount object represents a bank feed account, detailing various attributes including account identifiers, names, currency, and balance information. This object is central to managing and tracking bank feed accounts within the system.

No items found.

Bank Feed Transactions

The BankFeedTransaction object is used to represent transactions linked to a bank feed account. This includes details about the transaction such as the date, amount, description, and type.

No items found.

Company Info

The CompanyInfo object contains information about the company of the linked account. If the company has multiple entities (also known as subsidiaries), each entity may show up as a single CompanyInfo record.

No items found.

Contacts

A Contact is an individual or business entity to which products and services are sold to or purchased from. The Contact model contains both Customers, in which products and services are sold to, and Vendors (or Suppliers), in which products and services are purchased from. A Contact is a Vendor/Supplier if the is_supplier property is true. A Contact is a customer if the is_customer property is true.

No items found.

Credit Notes

A CreditNote is transaction issued to a customer, indicating a reduction or cancellation of the amount owed by the customer. It is most generally used as an adjustment note used to rectify errors, returns, or overpayments related to a sales transaction. A CreditNote can be applied to Accounts Receivable Invoices to decrease the overall amount of the Invoice.

No items found.

Employees

An Employee is an individual who works for the company of the linked account. The Employee model contains both contractors and full time employees. An Employee is a contractor if is_contractor property is True An Employee is a full time employee if is_contractor property is False

No items found.

Expenses

The Expense object is used to represent a direct purchase by a business, typically made with a check, credit card, or cash. Each Expense object is dedicated to a grouping of expenses, with each expense recorded in the lines object. The Expense object is used also used to represent refunds to direct purchases. Refunds can be distinguished from purchases by the amount sign of the records. Expense objects with a negative amount are purchases and Expense objects with a positive amount are refunds to those purchases.

No items found.

General Ledger Transactions

A General Ledger Entry is a record of a financial transaction that is posted to the general ledger, the central repository of a company’s financial data. The GeneralLedgerTransaction object is a singular endpoint to pull all transactions posted to a company’s general ledger. The transaction that generated the GeneralLedgerTransaction can be found by referencing the underlying_transaction_type and underlying_transaction_remote_id fields. The lines of a GeneralLedgerTransaction object will always have equal amounts of debits and credits.

No items found.

Income Statements

The IncomeStatement object is used to represent a company’s income, the cost of sales, operating expenses, and other non-operating expenses. The object also includes other important values like gross profit, gross operating profit, and net income. This represents a period of time (month, quarter, or year).

No items found.

Invoices

The Invoice object represents an itemized record of goods and/or services sold to a customer or bought from a vendor. Represents a Bill when the Invoice type is ACCOUNTS_PAYABLE. References an Invoice when the Invoice type is ACCOUNTS_RECEIVABLE.

No items found.

Items

The Item object refers to the goods involved in a transaction.

No items found.

Journal Entries

A JournalEntry is a record of a transaction or event that is entered into a company's accounting system. The JournalEntry common model contains records that are automatically created as a result of a certain type of transaction, like an Invoice, and records that are manually created against a company’s ledger. The lines of a given JournalEntry object should always sum to 0. A positive net_amount means the line represents a debit and a negative net_amount represents a credit.

No items found.

Payments

The Payment object represents general payments made towards a specific transaction.

No items found.

Purchase Orders

A PurchaseOrder represents a request to purchase goods or services from a vendor. It outlines the details of the purchase, such as the items or services requested, quantities, prices, and delivery details. A PurchaseOrder is a crucial component of the procurement process, but does not typically result in any impact on the company’s general ledger. The general ledger is typically only affected when the PurchaseOrder is fulfilled as an Accounts Payable Invoice object (also known as a Bill).

No items found.

Tax Rates

The TaxRate object is used to represent a tax rate.

No items found.

Tracking Categories

A TrackingCategory object represents a categorization method used to classify transactions within an accounting platform. They are often used to group records for reporting and analysis purposes. The most common types of TrackingCategories are Classes and Departments.

No items found.

Transactions

The Transaction common model includes records of all types of transactions that do not appear in other common models. The type of transaction can be identified through the type field. More specifically, it will contain all types of transactions outside of: Credit Notes__ Expenses__ Invoices__ Journal Entries__ Payments__ Purchase Orders__ Vendor Credits__

No items found.

Vendor Credits

A VendorCredit is transaction issued by a vendor to the accounting company, indicating a reduction or cancellation of the amount owed to the vendor. It is most generally used as an adjustment note used to rectify errors, returns, or overpayments related to a purchasing transaction. A VendorCredit can be applied to Accounts Payable Invoices to decrease the overall amount of the Invoice.

No items found.

FAQ on integrating with Xero API

What data can Merge sync between Xero and my platform?

You can sync data related to accounts, invoices, payments, contacts, credit notes, tax rates, and more. This data can be fetched, updated, and created within your platform using Xero's API endpoints. You can learn more about the endpoints Merge uses here.

How can I customize Xero data syncs?

With features like Field Mapping, you can map custom fields from Xero to Merge's data models. Additionally, Remote Data allows you to access raw Xero data in its original format, and Authenticated Passthrough lets you make direct API requests for more specific Xero data not covered by Merge’s Common Models.

What actions can I perform with the Xero integration?

You can fetch account balances, create invoices, record payments, and update contact information. You can also track financial transactions in real-time and access historical data for reporting purposes.

How does Merge handle rate limits and syncing for Xero?

Merge efficiently manages Xero’s rate limits by storing data in its own database. This approach reduces the need for constant API requests, and it ensures faster sync times and consistent data availability, even during Xero API outages.

How frequently does data sync between Xero and my platform?

By default, Merge syncs Xero data every 24 hours. However, depending on your plan, you can configure custom sync frequencies ranging from real-time updates (using webhooks) to less frequent intervals like daily, monthly, or quarterly.

Can I control how often data is synced from Xero?

Yes, Merge allows you to customize the sync frequency to meet your needs. You can choose between various options, including real-time syncs through webhooks or periodic syncs at intervals such as daily or quarterly.

What happens if a sync fails between Xero and Merge?

If a sync fails, Merge automatically retries it. You can monitor the status of your syncs and resolve any errors using the Merge Dashboard, which provides real-time observability and logs for better issue detection.

How long does it take developers to set up a Xero integration?

Setting up a Xero integration through Merge typically takes anywhere from a few hours to a few days. In addition, once the integration is implemented, you can access more than a dozen additional accounting integrations, including QuickBooks Online, NetSuite, and Sage Intacct​​.

How is your customer's Xero data encrypted and where is it stored?

Merge encrypts Xero data in-transit and at rest using AES-256 encryption. Data is also stored on AWS, with options for storing it in AWS’ regions within the EU, APAC, and U.S. Single-tenant environments are also available for additional security​​.

Are there any days you’ll be closed for the holidays in 2024?

Trusted to power integrations at

Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit

Make integrations your competitive advantage

More sales, less code, fewer headaches

Focus on your core product

Stop diverting your engineers to yet another integration and let them get back to work.

Give customer success a break

Manage your simplified integration issues in a single pane. No therapist required.

Stop losing sales due to integrations

Launch integrations in days, not quarters. Your sales team will thank you.

Seamless account linking

Integration authentication that feels like magic

Merge seamlessly manages authentication and authorization on behalf of your customers.
Offer account linking and permission controls to your users with Link for a customizable frontend or with Magic Link for URL-based authorization

View Docs
APIs made simple

The toolkit for all your integration needs

We make integrations painless with accessible API design, dead-simple SDKs, and beautiful documentation that we agonize over.

View Docs
Get Employee Data
1from merge import Merge
2
3client = Merge(
4    account_token="YOUR_ACCOUNT_TOKEN",
5    api_key="YOUR_API_KEY",
6)
7client.hris.employees.list()
import { MergeClient, Merge } from '@mergeapi/merge-node-client';
const merge = new MergeClient({
  apiKey: 'YOUR_API_KEY',
  accountToken: 'YOUR_ACCOUNT_TOKEN',
});
employee = await merge.hris.employees.list()
ApiClient.instance.authentications.tokenAuth = {
  type: 'bearer',
  accessToken: 'API_KEY',
};
new EmployeesApi().employeesList('ACCOUNT_TOKEN', {}, (data) => {
  console.log(data);
});
import (
  "context"
  "fmt"
  merge "github.com/fern-api/merge-go"
  mergeclient "github.com/fern-api/merge-go/client"
  "github.com/fern-api/merge-go/hris"
)

client := mergeclient.NewClient(
  mergeclient.ClientWithAuthApiKey("<YOUR_API_KEY>"),
1ApiClient client = Configuration.getDefaultApiClient();
2client.setBasePath('https://api.merge.dev/api/ats/v1');
3ApiKeyAuth tokenAuth = client.getAuthentication('tokenAuth');
4tokenAuth.setApiKey('API_KEY');
5CandidatesApi apiInstance = new CandidatesApi(client);
6apiInstance.candidatesList('ACCOUNT_TOKEN');
import com.merge.api.MergeApiClient;
import com.merge.api.resources.hris.employees.requests.EmployeesRetrieveRequest;
import com.merge.api.resources.hris.types.Employee;
MergeApiClient mergeClient = MergeApiClient.builder()
    .accountToken("ACCOUNT_TOKEN")
    .apiKey("API_KEY")
    .build();
Employee employee = mergeClient.hris().employees().list(
    EmployeesRetrieveRequest.builder()
        .includeRemoteData(true)

> {  

"id": "0958cbc6-6040-430a-848e-aafacbadf4ae",
"remote_id": "19202938",
"employee_number": "2",
"company": "8d9fd929-436c-4fd4-a48b-0c61f68d6178",
"first_name": "Dirna",
"last_name": "Emanuel",
"display_full_name": "Dirna Emanuel",
    "username": "dirnaemanuel",
    "groups": [

Meta endpoint

Programmatically access required schemas

Third-party providers require specific (and often different) fields to write data to their APIs, making your code a mess.

Dynamically fetch required data schemas from Merge’s /meta endpoint to make POST or PATCH requests that just work.

View Docs
Beyond building

Rely on the best integration observability system

Let our logs, issue detection, and automated alerts save your customer success team time, money, and headaches.

Forget maintenance - let your developers focus on building!

Start for free

Case study

How Drata increases customer value and spends 80% less time managing integrations

View case study

​​Working with Merge’s Unified API and beautiful React component took less than a sprint to integrate, test, and release.

Daniel Marashlian
Co-Founder & CTO, Drata

Read more about building and maintaining multiple integrations

A guide to maintaining your product integrations

Blog

A guide to integrating multiple APIs

Blog

The top challenges of normalizing multiple API integrations

Blog

Make integrations your competitive advantage

Stay in touch to learn how Merge can unlock hundreds of integrations in days, not years

Get a demo