For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Log inGet Paid
DocumentationAPI ReferenceCLI
DocumentationAPI ReferenceCLI
  • Introduction
    • What is Paid?
    • Who should use Paid?
    • Why AI Billing is Different
    • How Paid Streamlines AI Billing
    • Understanding Products and Signals
  • Getting Started
    • First signals
    • Cost traces
    • Cost attributed signals
    • Delivered value
  • Value Receipts
    • Overview
    • Integration guide
    • Authentication and embedding
  • Billing
    • Checkout
    • User management
    • Webhooks
    • How credit balances work
    • Understanding the credit ledger
    • Examples of plans with included credits
    • Multi-entity customers
  • Integrations
    • Datadog
    • Xero
  • Concepts & Strategy
    • High-level billing flow overview
    • Subscription vs. usage-based vs. hybrid billing explained
    • Recommended use-cases and examples
    • How actions and outcomes translate to billing events
    • Pricing models and best practices
    • Product lifecycle and archival semantics
    • Backdated order activation
  • Additional Resources
    • Platform features
    • Resources
    • Appendices
    • Compliance legal
LogoLogo
Log inGet Paid
On this page
  • Prerequisites
  • 1. Connect your Xero organization
  • 2. Configure invoice mapping
  • Integration defaults
  • Per-product mapping
  • How invoice lines are resolved
  • Reconnecting or switching tenants
  • Troubleshooting
Integrations

Xero Integration

Was this page helpful?
Previous

High-level billing flow overview

Next
Built with

Connect Paid to your Xero organization so every invoice Paid issues lands in Xero with the right revenue account and tax code. The integration creates a Xero ACCREC invoice for each Paid invoice, upserts the corresponding Xero contact, attaches the Paid invoice PDF, and updates the Xero invoice status as the Paid invoice moves through draft, authorised, and voided states.

Prerequisites

Before you connect, make sure you have:

  • A Xero organization with at least one active revenue-class account in your chart of accounts (most tenants come with 200 - Sales by default).
  • An admin user on both Paid and Xero. The Xero side needs permission to authorize new third-party apps.

1. Connect your Xero organization

Navigate to Settings → Integrations and find the Xero card. Click Connect.

You will be redirected to Xero’s authorization screen. Pick the Xero organization you want to link, review the requested permissions, and approve. Paid asks for:

  • accounting.invoices and accounting.payments for invoice and payment sync
  • accounting.contacts for customer sync
  • accounting.settings.read to read your chart of accounts and active tax rates
  • accounting.attachments to upload the Paid PDF onto each Xero invoice

Once authorization completes you are redirected back to Paid. The Xero card will show a green Connected badge with the linked tenant name.

If you need to switch which Xero organization is linked, disconnect first and then reconnect. The disconnect flow revokes the prior grant on Xero’s side so the next authorize prompt lets you pick a different organization.

2. Configure invoice mapping

From the Xero card, click Configure Xero invoice mapping. This page is where you set the defaults Paid uses when pushing invoice lines, plus per-product overrides.

Integration defaults

These apply to every invoice line that does not have a product-specific mapping.

  • Default revenue account. The Xero account code Paid stamps on invoice lines. Leave it on “Use Xero default (200)” to fall back to the seed 200 - Sales account, or pick any active revenue-class account from your chart.
  • Default zero-tax code. The Xero tax type Paid uses on lines whose computed tax amount is zero. Leave it on “Use no tax (NONE)” to send Xero’s “No Tax” type, or pick a zero-rated alternative such as “Zero rated income” for UK and EU organizations.

Why is there no default for taxed lines? Paid sends the computed tax amount on every line. For taxed lines, Paid lets Xero apply the revenue account’s configured rate automatically, which lines up with the amount Paid already calculated upstream (for example via Avalara). You do not need to pick a taxed rate code by hand.

Per-product mapping

Below the defaults you can map individual Paid products to specific Xero revenue accounts. This is useful when different products should post to different general ledger accounts.

  • Use the Apply to all unmapped control to bulk-assign a Xero account to every product that does not yet have a mapping.
  • Use the per-row dropdown to override one product at a time. Selecting “Use integration default” clears the override and falls back to the integration-wide default.
  • Archived products are intentionally kept in the list. Renewal and amendment invoices for an archived product still post to whatever account that product was mapped to.

When you finish, click Save in the top right. Paid validates every code against your live Xero chart of accounts before saving, so an invalid code is rejected up front rather than failing later during invoice sync.

How invoice lines are resolved

When Paid pushes an invoice line to Xero, it walks the following resolution chain.

Account code. Per-product mapping → integration default → Xero’s seed account 200.

Tax type. If the line’s tax amount is zero, Paid uses the integration-wide default zero-tax code (or “NONE” if you have not chosen one). If the line’s tax amount is non-zero, Paid omits the tax type and lets Xero apply the revenue account’s configured rate. The tax amount Paid sends is preserved either way.

Reconnecting or switching tenants

To switch which Xero organization is linked, or to refresh the OAuth grant:

  1. Open the Xero card on Settings → Integrations.
  2. Click Disconnect and confirm. This revokes the authorization on Xero’s side and removes all Xero-specific mappings from Paid (customer contact links, invoice mappings, product overrides).
  3. Click Connect and authorize again. You will be asked to pick a Xero organization on each reconnect, so you can point Paid at a different tenant if needed.

Disconnecting wipes per-product account mappings for the disconnected tenant. If you reconnect to the same Xero organization later, you will need to re-create those mappings. Reconnecting to a different tenant is the expected case, since codes from the old chart of accounts would not match the new one anyway.

Troubleshooting

The dropdown shows “Loading accounts…” and never finishes. Paid caches your Xero chart of accounts and tax rates for ten minutes per tenant to stay inside Xero’s 5,000-call daily limit. If a fetch fails, the dropdown surfaces the error toast. Try again after a minute. If it keeps failing, disconnect and reconnect to refresh the OAuth token.

An invoice failed to sync with “Account code is not valid”. The mapped account is no longer active in Xero (it was archived or removed). Update the product or integration mapping to a current account and retry the sync.

I do not see my tax rate in the zero-tax dropdown. Paid only surfaces tax rates that are active in Xero, applicable to sales (ACCREC) lines, and zero-rated. If a rate is missing, confirm it is active in Xero and that its rate is exactly 0 percent.

The Xero invoice has a different number than the Paid invoice. That is intentional. Paid lets Xero auto-generate the InvoiceNumber to avoid collisions on retries, and stamps the Paid invoice number into the Reference field on the Xero invoice so you can still cross-reference them.