Xero.Finance (Xero v1.0.0)

Copy Markdown View Source

Xero Finance API – Financial data endpoints for lending and accounting activity analysis. Base URL: https://api.xero.com/finance.xro/1.0/

Scopes Required

EndpointScope
Bank Statements Plusfinance.statements.read
Cash Validationfinance.cashvalidation.read
Financial Statementsfinance.financialstatements.read
Accounting Activityfinance.accountingactivity.read

Sub-APIs

  • Bank Statements Plus — Raw bank statement lines with merchant enrichment and categorisation
  • Cash Validation — Validates cash position accuracy between bank statements and Xero
  • Financial Statements — Balance Sheet, P&L, Trial Balance, Cash Flow (snapshot views)
  • Accounting Activity — Lock history, report activity, and user activity statistics

Examples

# Check if cash balances match bank statements
{:ok, validation} = Xero.Finance.cash_validation(token, tenant_id,
  balance_date: "2024-01-31")

# Get enriched bank statement data for lending
{:ok, data} = Xero.Finance.bank_statements(token, tenant_id,
  bank_account_id: "account-uuid",
  from_date: "2024-01-01",
  to_date: "2024-12-31")

Summary

Functions

Returns ledger lock history (period-end lock dates). Scope: finance.accountingactivity.read

Returns an overview of the organisation's accounting activity. Scope: finance.accountingactivity.read

Returns a Balance Sheet snapshot. Scope: finance.financialstatements.read

Returns enriched bank statement data with merchant categorisation. Scope: finance.statements.read

Returns a Cash Flow Statement. Scope: finance.financialstatements.read

Validates cash position accuracy — identifies discrepancies between Xero account balances and the actual bank statement balances. Scope: finance.cashvalidation.read

Returns a Profit and Loss statement. Scope: finance.financialstatements.read

Returns report activity statistics (number of reports run, users, frequency). Scope: finance.accountingactivity.read

Returns a Trial Balance snapshot. Scope: finance.financialstatements.read

Returns user activity statistics (active users, activity levels). Scope: finance.accountingactivity.read

Functions

accounting_activity(t, tid, opts \\ [])

@spec accounting_activity(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns ledger lock history (period-end lock dates). Scope: finance.accountingactivity.read

Options

  • :start_month — Start month (YYYY-MM)
  • :end_month — End month (YYYY-MM)

accounting_activity_overview(t, tid, opts \\ [])

@spec accounting_activity_overview(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns an overview of the organisation's accounting activity. Scope: finance.accountingactivity.read

Options

  • :start_month — Start month (YYYY-MM)
  • :end_month — End month (YYYY-MM)

balance_sheet(t, tid, opts \\ [])

@spec balance_sheet(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns a Balance Sheet snapshot. Scope: finance.financialstatements.read

Options

  • :balance_date — Reporting date (YYYY-MM-DD)
  • :periods — Number of comparison periods
  • :timeframe"MONTH" | "QUARTER" | "YEAR"

  • :tracking_category_id / :tracking_option_id — Filter by tracking segment
  • :standard_layout — Use standard layout (boolean)
  • :payments_only — Cash-basis reporting (boolean)

bank_statements(t, tid, opts \\ [])

@spec bank_statements(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns enriched bank statement data with merchant categorisation. Scope: finance.statements.read

Options

  • :bank_account_id — UUID of the bank account (required)
  • :from_date — Start date (YYYY-MM-DD)
  • :to_date — End date (YYYY-MM-DD)
  • :summary_only — Return aggregated summary only (boolean)

cash_flow(t, tid, opts \\ [])

@spec cash_flow(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns a Cash Flow Statement. Scope: finance.financialstatements.read

Options

  • :start_month — Start month (YYYY-MM)
  • :end_month — End month (YYYY-MM)

cash_validation(t, tid, opts \\ [])

@spec cash_validation(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Validates cash position accuracy — identifies discrepancies between Xero account balances and the actual bank statement balances. Scope: finance.cashvalidation.read

Options

  • :balance_date — Date to validate cash position (YYYY-MM-DD)
  • :begin_date — Start of validation period
  • :include_credit_transactions — Include credit card accounts (boolean, default false)

profit_and_loss(t, tid, opts \\ [])

@spec profit_and_loss(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns a Profit and Loss statement. Scope: finance.financialstatements.read

Options

  • :start_month — Start month (YYYY-MM)
  • :end_month — End month (YYYY-MM)
  • :periods — Number of comparison periods
  • :timeframe"MONTH" | "QUARTER" | "YEAR"

  • :tracking_category_id / :tracking_category_id2 — Filter by tracking segment
  • :standard_layout — Use standard layout (boolean)
  • :payments_only — Cash-basis reporting (boolean)

report_activity(t, tid, opts \\ [])

@spec report_activity(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns report activity statistics (number of reports run, users, frequency). Scope: finance.accountingactivity.read

Options

  • :start_month — Start month (YYYY-MM)
  • :end_month — End month (YYYY-MM)

trial_balance(t, tid, opts \\ [])

@spec trial_balance(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns a Trial Balance snapshot. Scope: finance.financialstatements.read

Options

  • :end_month — Reporting month (YYYY-MM)
  • :start_month — Start of range for comparison

user_activities(t, tid, opts \\ [])

@spec user_activities(Xero.Auth.Token.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Xero.Error.t()}

Returns user activity statistics (active users, activity levels). Scope: finance.accountingactivity.read

Options

  • :data_month — Month to query (YYYY-MM)