# Xero — Accounting API: overview

> Canonical URL: https://developers.apideck.com/apis/accounting/xero/overview

Get paid sooner when you accept payments online straight from a Xero invoice. Give your customers different payment options, including PayPal and Stripe.
- Status: live
- Authentication: oauth2

- **account type required:** Any active Xero subscription
- **apideck credentials available:** true
- **apideck credentials note:** Apideck's certified Xero app, intended for testing: OAuth shows "Apideck" as the requesting application. Use your own Xero app in production.
- **authentication note:** Authorization Code flow.
- **consumer access level:** Standard or Adviser level user (Admin recommended for full data access)
- **costs:** Free Starter tier; Core ~$22, Plus ~$152, Advanced ~$895 USD/month by connection count; Enterprise custom; plus per-GB egress overage. Effective March 2, 2026.
- **difficulty:** moderate
- **difficulty reason:** Self-Service OAuth + App Partner Certification Required to Scale
- **environment notes:**   - **description:** Xero uses the same credential structure for sandbox and production — the connected Xero organisation determines which data is accessed. Testing options: the Xero Demo Company (included with every developer account, sample data) and a 30-day full-featured free trial via xero.com/signup.
  - **environment:** Sandbox & Production (shared credentials)
  - **description:** When a consumer authorises your app, they choose which Xero organisation to connect. Consumers with multiple organisations require a separate connection per organisation.
  - **environment:** Multi-Organisation
- **external guides:**   - **source:** Xero
  - **title:** Xero API Overview
  - **url:** https://developer.xero.com/documentation/api/accounting/overview
  - **source:** Xero
  - **title:** OAuth 2.0 Guide
  - **url:** https://developer.xero.com/documentation/guides/oauth2/overview/
  - **source:** Xero
  - **title:** OAuth 2.0 Limits
  - **url:** https://developer.xero.com/documentation/guides/oauth2/limits/
  - **source:** Xero
  - **title:** Token Types & Lifetimes
  - **url:** https://developer.xero.com/documentation/guides/oauth2/token-types
  - **source:** Xero
  - **title:** App Partner Steps
  - **url:** https://developer.xero.com/documentation/xero-app-store/app-partner-guides/app-partner-steps/
  - **source:** Xero
  - **title:** Certification Checkpoints
  - **url:** https://developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints/
  - **source:** Xero
  - **title:** Rate Limits & API Efficiency
  - **url:** https://developer.xero.com/documentation/best-practices/api-call-efficiencies/rate-limits
  - **source:** Xero
  - **title:** API Pricing (Effective March 2026)
  - **url:** https://developer.xero.com/pricing
- **important to know:** Connection caps are tier-based: 5 active connections on the free Starter tier, 50 on Core, and more only from Plus upward. Certification unlocks the higher tiers but itself requires at least 10 active customer connections, so start the process before you hit the cap.
Xero expires a refresh token after 60 days unused, but Apideck renews it before then, so an idle connection does not lapse. Re-authorising is needed if access is withdrawn in Xero, a renewal fails, or a new permission is requested.
Consumers can install a maximum of 2 uncertified apps — if at the limit they must remove another uncertified app first. This does not apply when connecting with Apideck credentials, which use a certified app.
Certification compliance requires hiding the Apideck callback — a custom Vault domain must be configured before certification.
From March 2, 2026 the Journals API is gated to the Advanced tier and new apps must use granular OAuth scopes; older apps must migrate by September 2027. General-ledger reads need accounting.journals.read, which Apideck no longer requests by default; manual journals still work.
- **partnership note:** App Partner Program certification is mandatory from the Plus tier and to list on the Xero App Store; Starter and Core tiers need no approval.
- **partnership portal name:** Xero App Partner Program
- **partnership required:** true
- **partnership url:** https://developer.xero.com/documentation/xero-app-store/app-partner-guides/pathways-to-grow
- **rate limits:** 60 calls/minute and 5 concurrent calls per organisation; daily cap of 1,000 calls on Starter and 5,000 on Core and above; 10,000 calls/minute app-wide.
- **responsibility matrix:**   - **area:** Create Xero Developer Account
  - **customer:** ✓
  - **apideck:** Docs provided
  - **area:** Register Xero App
  - **customer:** ✓
  - **area:** Add Credentials to Apideck
  - **customer:** ✓
  - **apideck:** Support available
  - **area:** Apply for App Partner Certification
  - **customer:** ✓ (if scaling to the Plus tier or above)
  - **apideck:** Configures on request
  - **area:** Set Up Custom Domain (Vault)
  - **customer:** ✓ (if certifying)
  - **apideck:** Webhook URL provided
  - **area:** Register Webhook (Optional)
  - **customer:** ✓
  - **apideck:** Handles OAuth flow
  - **area:** Authorize Connection (OAuth)
  - **consumer:** ✓
  - **apideck:** Maintains connector
  - **area:** Build via Unified API
  - **customer:** ✓
  - **apideck:** ✓ Automatic
  - **area:** Token Refresh
  - **apideck:** Logs and alerts
  - **area:** Monitor Connections
  - **consumer:** Can revoke anytime
  - **customer:** Via dashboard
- **sandbox available:** true
- **sandbox note:** Free via Xero Developer Portal (demo company included).
- **sandbox url:** https://developer.xero.com/
- **supported resource categories:**   - **name:** Core Financial
  - **resources:** ledger-accounts
tax-rates
journal-entries
general-ledger-transactions
company-info
companies
  - **name:** Reports
  - **resources:** balance-sheet
profit-and-loss
aged-debtors
aged-creditors
  - **name:** Accounts Receivable
  - **resources:** invoices
invoice-items
customers
payments
credit-notes
credit-allocations
  - **name:** Accounts Payable
  - **resources:** bills
bill-payments
bill-credit-notes
suppliers
purchase-orders
expenses
  - **name:** Banking
  - **resources:** bank-feed-accounts
bank-feed-statements
  - **name:** Organizational
  - **resources:** tracking-categories
attachments
linked-transactions
- **webhooks:** Native — invoice and bill events (created and updated).

## Supported resources

[Accounting data model](/guides/accounting-data-model.md)

- **custom field support:** false
- **downstream id:** organisations
- **downstream name:** Organisations
- **id:** company-info
- **name:** Company Info
- **status:** live
- **custom field support:** false
- **downstream id:** fiscal-periods
- **downstream name:** Fiscal Periods
- **id:** fiscal-periods
- **name:** Fiscal Periods
- **status:** beta
- **custom field support:** false
- **downstream id:** connections
- **downstream name:** Connections
- **id:** companies
- **name:** Companies
- **status:** beta
- **custom field support:** false
- **downstream id:** contacts
- **downstream name:** Contacts
- **id:** customers
- **name:** Customers
- **status:** live
- **custom field support:** false
- **downstream id:** tax-rates
- **downstream name:** Tax Rates
- **id:** tax-rates
- **name:** Tax Rates
- **status:** live
- **custom field support:** false
- **downstream id:** accounts
- **downstream name:** Accounts
- **id:** ledger-accounts
- **name:** Ledger Accounts
- **status:** live
- **custom field support:** false
- **downstream id:** items
- **downstream name:** Items
- **id:** invoice-items
- **name:** Invoice Items
- **status:** live
- **custom field support:** false
- **downstream id:** invoices
- **downstream name:** Invoices
- **id:** invoices
- **name:** Invoices
- **status:** live
- **custom field support:** false
- **downstream id:** payments
- **downstream name:** Payments
- **id:** payments
- **name:** Payments
- **status:** live
- **custom field support:** false
- **downstream id:** bill-payments
- **downstream name:** Bill Payments
- **id:** bill-payments
- **name:** Bill Payments
- **status:** live
- **custom field support:** false
- **downstream id:** suppliers
- **downstream name:** Suppliers
- **id:** suppliers
- **name:** Suppliers
- **status:** live
- **custom field support:** false
- **downstream id:** bills
- **downstream name:** Bills
- **id:** bills
- **name:** Bills
- **status:** live
- **custom field support:** false
- **downstream id:** credit-notes
- **downstream name:** Credit Notes
- **id:** credit-notes
- **name:** Credit Notes
- **status:** live
- **custom field support:** false
- **downstream id:** bill-credit-notes
- **downstream name:** Bill Credit Notes
- **id:** bill-credit-notes
- **name:** Bill Credit Notes
- **status:** beta
- **custom field support:** false
- **downstream id:** journals
- **downstream name:** Journals
- **id:** journal-entries
- **name:** Journal Entries
- **status:** live
- **custom field support:** false
- **downstream id:** general-ledger-transactions
- **downstream name:** General Ledger Transactions
- **id:** general-ledger-transactions
- **name:** General Ledger Transactions
- **status:** beta
- **custom field support:** false
- **downstream id:** purchase-orders
- **downstream name:** Purchase Orders
- **id:** purchase-orders
- **name:** Purchase Orders
- **status:** live
- **custom field support:** false
- **downstream id:** attachments
- **downstream name:** Attachments
- **id:** attachments
- **name:** Attachments
- **status:** live
- **custom field support:** false
- **downstream id:** balance-sheet
- **downstream name:** Balance Sheet
- **id:** balance-sheet
- **name:** BalanceSheet
- **status:** live
- **custom field support:** false
- **downstream id:** profit-and-loss
- **downstream name:** Profit And Loss
- **id:** profit-and-loss
- **name:** ProfitAndLoss
- **status:** live
- **custom field support:** false
- **downstream id:** trial-balance
- **downstream name:** Trial Balance
- **id:** trial-balance
- **name:** Trial Balance
- **status:** beta
- **custom field support:** false
- **downstream id:** tracking-categories
- **downstream name:** Tracking Categories
- **id:** tracking-categories
- **name:** Tracking Categories
- **status:** live
- **custom field support:** false
- **downstream id:** bank-transactions
- **downstream name:** Bank Transactions
- **id:** expenses
- **name:** Expenses
- **status:** live
- **custom field support:** false
- **downstream id:** aged-receivables-by-contact
- **downstream name:** Aged Receivables By Contact
- **id:** aged-debtors
- **name:** Aged Debtors
- **status:** beta
- **custom field support:** false
- **downstream id:** aged-payables-by-contact
- **downstream name:** Aged Payables By Contact
- **id:** aged-creditors
- **name:** Aged Creditors
- **status:** beta
- **custom field support:** false
- **downstream id:** bank-feed-connections
- **downstream name:** Bank Feed Connections
- **id:** bank-feed-accounts
- **name:** Bank Feed Accounts
- **status:** beta
- **custom field support:** false
- **downstream id:** statements
- **downstream name:** Statements
- **id:** bank-feed-statements
- **name:** Bank Feed Statements
- **status:** beta

An omitted operation list does not establish operation support. Verify the selected operation in the coverage matrix.

[API reference](https://developers.apideck.com/apis/accounting/reference.md) · [Coverage matrix](https://developers.apideck.com/apis/accounting/coverage)
