> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Xero

Connect to Xero to manage invoices, contacts, payments, accounts, and financial reports via OAuth 2.0.

**Authentication:** OAuth 2.0
**Categories:** Accounting, Finance, Invoicing
## What you can do

Connect this agent connector to let your agent:

- **Manage the chart of accounts** — list, create, update, and archive accounts
- **Work with contacts** — create and update customers and suppliers, manage contact groups
- **Create and manage invoices** — draft, authorise, update, and void invoices and bills
- **Handle payments and credit notes** — list payments, overpayments, prepayments, batch payments, and credit notes
- **Manage inventory** — create, update, and delete inventory items
- **Process purchase orders and quotes** — create, update, and track purchase orders and quotes
- **Record manual journals** — create and post manual journal entries
- **Manage employees** — create and update employee records
- **Run financial reports** — generate Balance Sheet, Profit & Loss, Trial Balance, Aged Payables/Receivables, Bank Summary, and Executive Summary reports
- **Access organisation settings** — list currencies, tax rates, tracking categories, and users

## Authentication

This connector uses **OAuth 2.0**. Scalekit acts as the OAuth client: it redirects your user to Xero, obtains an access token, and automatically refreshes it before it expires. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

You supply your Xero **app credentials** (Client ID + Secret) once per environment in the Scalekit dashboard.

## Set up the connector

Register your Scalekit environment with the Xero connector so Scalekit handles the OAuth 2.0 flow and token lifecycle for you. The connection name you create is used to identify and invoke the connection in your code.

1. ## Set up auth redirects

   - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **Xero** and click **Create**. Copy the redirect URI — it looks like `https:///sso/v1/oauth//callback`.

   - Log in to [developer.xero.com](https://developer.xero.com), open your app (or create one under **My Apps → New app**), and go to **Configuration**.

   - Paste the redirect URI into the **Redirect URIs** field and click **Save**.

     > Image: Screenshot

2. ## Get client credentials

   - In your Xero app, open the **Configuration** tab.

   - Copy your **Client ID** and generate a **Client Secret**.

3. ## Add credentials in Scalekit

   - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and open the connection you created.

   - Enter your Xero **Client ID** and **Client Secret**, then click **Save**.

     > Image: Screenshot

4. ## Connect a user account

   Your users must authorize access to their Xero organisation. Generate an authorization link and direct them through the OAuth flow.

   **Via dashboard (for testing)**

   - Open the connection and click the **Connected Accounts** tab → **Add Account**.
   - Fill in **Your User's ID** (e.g., `user_123`) and follow the Xero OAuth prompt.

     > Image: Screenshot

   **Via API (for production)**

   
     ### Node.js

```typescript
const { link } = await scalekit.actions.getAuthorizationLink({
  connectionName: 'xero',
  identifier: 'user_123',
});
// Redirect your user to `link` — they complete OAuth on Xero's side
console.log('Authorize Xero:', link);
```

     ### Python

```python
link_response = scalekit_client.actions.get_authorization_link(
    connection_name="xero",
    identifier="user_123"
)
# Redirect your user to link_response.link
print("Authorize Xero:", link_response.link)
```

   

   > tip: Production usage tip
>
> In production, generate the authorization link when a user wants to connect their Xero account. After they complete the OAuth flow, Scalekit stores and automatically refreshes their tokens.

> tip: Tenant ID is handled automatically
>
> You do not need to fetch or pass a `xero_tenant_id` when using Scalekit tools. On the first tool call, Scalekit automatically fetches the tenant ID from `https://api.xero.com/connections` and caches it for all subsequent calls.

## Code examples

Once a connected account is set up, call the Xero API through the Scalekit proxy. Scalekit injects the OAuth token automatically — you never handle tokens in your application code.

When you call any Xero tool via `execute_tool`, Scalekit automatically fetches the tenant ID from `https://api.xero.com/connections` on the first call and caches it. **You never need to pass `xero_tenant_id` in your tool inputs.**

For raw proxy requests, you must supply the `Xero-Tenant-Id` header yourself. Trigger any tool call first (e.g. `xero_accounts_list`) so Scalekit caches the tenant ID, then retrieve it from the connected account's `api_config.path_variables`.

## Proxy API calls

  ### Node.js

```typescript

const connectionName = 'xero';   // connection name from your Scalekit dashboard
const identifier = 'user_123';   // your user's unique identifier

const scalekit = new ScalekitClient(
  process.env.SCALEKIT_ENV_URL,
  process.env.SCALEKIT_CLIENT_ID,
  process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;

// Fetch the connected account to read the cached tenant ID
const { connectedAccount } = await actions.getConnectedAccount({ connectionName, identifier });
const xeroTenantId = connectedAccount.apiConfig?.pathVariables?.xero_tenant_id;

// List invoices via proxy
const result = await actions.request({
  connectionName,
  identifier,
  path: '/Invoices',
  method: 'GET',
  headers: { 'Xero-Tenant-Id': xeroTenantId },
});
console.log(result);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

connection_name = "xero"   # connection name from your Scalekit dashboard
identifier = "user_123"    # your user's unique identifier

scalekit_client = scalekit.client.ScalekitClient(
    client_id=os.getenv("SCALEKIT_CLIENT_ID"),
    client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
    env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions

# Fetch the connected account to read the cached tenant ID
connected_account = actions.get_connected_account(
    connection_name=connection_name, identifier=identifier
).connected_account
xero_tenant_id = connected_account.api_config["path_variables"]["xero_tenant_id"]

# List invoices via proxy
result = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/Invoices",
    method="GET",
    headers={"Xero-Tenant-Id": xero_tenant_id},
)
print(result)
```

## Scalekit tools

Use `execute_tool` to call Xero tools directly. Scalekit resolves the connected account, injects the OAuth token, and returns a structured response.

### Create and authorise an invoice

The `Contact` field must be a **JSON string** and `LineItems` must be a **JSON array**. Include `AccountCode` in each line item — Xero requires it when authorising or voiding the invoice.

  ### Node.js

```typescript
// Get contact ID
const contacts = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_contacts_list',
  parameters: {},
});
const contactId = contacts.Contacts[0].ContactID;

// Create a DRAFT invoice
const invoice = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_invoice_create',
  parameters: {
    Type: 'ACCREC',
    Contact: JSON.stringify({ ContactID: contactId }),
    LineItems: [
      { Description: 'Consulting services', Quantity: 1, UnitAmount: 500, AccountCode: '200' },
    ],
  },
});
const invoiceId = invoice.Invoices[0].InvoiceID;

// Authorise it
await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_invoice_update',
  parameters: {
    invoice_id: invoiceId,
    Status: 'AUTHORISED',
    DueDate: '2026-06-30',
  },
});
```

  ### Python

```python

# Get contact ID
contacts = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_contacts_list",
    parameters={},
)
contact_id = contacts["Contacts"][0]["ContactID"]

# Create a DRAFT invoice
invoice = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_invoice_create",
    parameters={
        "Type": "ACCREC",
        "Contact": json.dumps({"ContactID": contact_id}),
        "LineItems": [
            {"Description": "Consulting services", "Quantity": 1, "UnitAmount": 500, "AccountCode": "200"},
        ],
    },
)
invoice_id = invoice["Invoices"][0]["InvoiceID"]

# Authorise it
actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_invoice_update",
    parameters={
        "invoice_id": invoice_id,
        "Status": "AUTHORISED",
        "DueDate": "2026-06-30",
    },
)
```

### Void an invoice

`xero_invoice_delete` voids an invoice by setting its status to `VOIDED`. Xero only permits voiding `AUTHORISED` invoices — calling it on a `DRAFT` invoice returns a validation error. Authorise the invoice first (see above), then call delete.

  ### Node.js

```typescript
await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_invoice_delete',
  parameters: { invoice_id: invoiceId },
});
```

  ### Python

```python
actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_invoice_delete",
    parameters={"invoice_id": invoice_id},
)
```

### Create a quote

`xero_quote_create` requires `Contact` (JSON string), `LineItems` (array), and `Date` (ISO 8601). Without `Date`, Xero returns `"Date cannot be empty"`.

  ### Node.js

```typescript
const quote = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_quote_create',
  parameters: {
    Contact: JSON.stringify({ ContactID: contactId }),
    LineItems: [{ Description: 'Project estimate', Quantity: 1, UnitAmount: 2000 }],
    Date: '2026-04-29',
  },
});
const quoteId = quote.Quotes[0].QuoteID;
```

  ### Python

```python

quote = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_quote_create",
    parameters={
        "Contact": json.dumps({"ContactID": contact_id}),
        "LineItems": [{"Description": "Project estimate", "Quantity": 1, "UnitAmount": 2000}],
        "Date": "2026-04-29",
    },
)
quote_id = quote["Quotes"][0]["QuoteID"]
```

### Run aged payables or receivables report

The aged report tools require a `contactID` parameter. The other reports (Balance Sheet, Profit & Loss, Trial Balance, Bank Summary, Executive Summary) need no inputs beyond the auto-injected tenant ID.

  ### Node.js

```typescript
const report = await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_report_aged_receivables',
  parameters: { contactID: contactId },
});
```

  ### Python

```python
report = actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_report_aged_receivables",
    parameters={"contactID": contact_id},
)
```

> tip: Tenant ID is injected automatically
>
> When using `execute_tool`, you do not need to pass `xero_tenant_id`. Scalekit fetches the tenant ID automatically on the first tool call and caches it for subsequent calls. For raw proxy requests, you still need to supply the `Xero-Tenant-Id` header manually.

> caution: Contact field must be a JSON string
>
> The `Contact` parameter in `xero_invoice_create`, `xero_credit_note_create`, `xero_purchase_order_create`, and `xero_quote_create` must be passed as a JSON **string**, not an object: `'{"ContactID": "abc123..."}'`. Pass the result of `JSON.stringify({ContactID: id})` in Node.js or `json.dumps({"ContactID": id})` in Python.

## Getting resource IDs

Scalekit automatically fetches and injects `xero_tenant_id` on the first tool call — you do not need to supply it. All other IDs must be fetched from the API — never guess or hard-code them.

| Resource | Tool to get ID | Field in response |
|----------|---------------|-------------------|
| Account ID | `xero_accounts_list` | `Accounts[].AccountID` |
| Contact ID | `xero_contacts_list` | `Contacts[].ContactID` |
| Contact Group ID | `xero_contact_groups_list` | `ContactGroups[].ContactGroupID` |
| Invoice ID | `xero_invoices_list` | `Invoices[].InvoiceID` |
| Credit Note ID | `xero_credit_notes_list` | `CreditNotes[].CreditNoteID` |
| Purchase Order ID | `xero_purchase_orders_list` | `PurchaseOrders[].PurchaseOrderID` |
| Quote ID | `xero_quotes_list` | `Quotes[].QuoteID` |
| Item ID | `xero_items_list` | `Items[].ItemID` |
| Manual Journal ID | `xero_manual_journals_list` | `ManualJournals[].ManualJournalID` |
| Employee ID | `xero_employees_list` | `Employees[].EmployeeID` |
| Tracking Category ID | `xero_tracking_categories_list` | `TrackingCategories[].TrackingCategoryID` |
| Tax Type | `xero_tax_rates_list` | `TaxRates[].TaxType` |
| User ID | `xero_users_list` | `Users[].UserID` |

## Common patterns

### Void (delete) an invoice

`xero_invoice_delete` voids an invoice by setting its status to `VOIDED`. Xero only allows voiding invoices that are in `AUTHORISED` status — calling it on a `DRAFT` invoice returns a validation error.

The correct sequence is:

1. Authorise the invoice with `xero_invoice_update`, passing `Status: "AUTHORISED"` and a `DueDate`.
2. Call `xero_invoice_delete` with the same `invoice_id`.

## Node.js example

```typescript
// Step 1 — authorise the invoice
await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_invoice_update',
  parameters: {
    invoice_id: invoiceId,
    Status: 'AUTHORISED',
    DueDate: '2026-06-30',
  },
});

// Step 2 — void it
await actions.executeTool({
  connectionName,
  identifier,
  toolName: 'xero_invoice_delete',
  parameters: { invoice_id: invoiceId },
});
```

## Python example

```python
# Step 1 — authorise the invoice
actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_invoice_update",
    parameters={
        "invoice_id": invoice_id,
        "Status": "AUTHORISED",
        "DueDate": "2026-06-30",
    },
)

# Step 2 — void it
actions.execute_tool(
    connection_name=connection_name,
    identifier=identifier,
    tool_name="xero_invoice_delete",
    parameters={"invoice_id": invoice_id},
)
```

### Pass Contact and LineItems correctly

Several tools (`xero_invoice_create`, `xero_credit_note_create`, `xero_purchase_order_create`, `xero_quote_create`) take a `Contact` field and a `LineItems` field.

- `Contact` — pass as a **JSON string**: `'{"ContactID": "abc123..."}'`
- `LineItems` — pass as a **JSON array** (not a string): `[{"Description": "...", "Quantity": 1, "UnitAmount": 100, "AccountCode": "200"}]`

Include `AccountCode` in each line item whenever the invoice may later be authorised or voided.

### Quotes require a Date

`xero_quote_create` and `xero_quote_update` both require a `Date` field (ISO 8601, e.g. `"2026-04-29"`). Xero returns a validation error `"Date cannot be empty"` without it.

`xero_quote_update` also requires `Contact` (JSON string) in addition to `Date`.

### Aged reports require a contactID

`xero_report_aged_payables` and `xero_report_aged_receivables` require a `contactID` parameter. The other five report tools (`xero_report_balance_sheet`, `xero_report_profit_and_loss`, `xero_report_trial_balance`, `xero_report_bank_summary`, `xero_report_executive_summary`) require no inputs beyond the auto-injected tenant ID.

### Update an item

`xero_item_update` requires `Code` in the request body (in addition to `item_id` in the path). Pass the item's existing code or a new one — Xero uses it to identify the item being updated.

## Tool list

## Tool list

### `xero_accounts_list`

Retrieve the full chart of accounts for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601). e.g. 2024-01-01T00:00:00
- `order` (`string`, optional): Order results. e.g. Name ASC
- `where` (`string`, optional): Filter expression. e.g. Type=="BANK"

### `xero_account_get`

Retrieve a single account by its AccountID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `account_id` (`string`, required): AccountID GUID. Get it from xero_accounts_list.

### `xero_account_create`

Create a new account in the Xero chart of accounts.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Code` (`string`, required): Unique account code. e.g. 200
- `Name` (`string`, required): Account name. e.g. My Savings Account
- `Type` (`string`, required): Account type. e.g. BANK
- `BankAccountNumber` (`string`, optional): Bank account number. e.g. 01-0123-0123456-00
- `CurrencyCode` (`string`, optional): Currency code. e.g. NZD
- `Description` (`string`, optional): Account description.
- `EnablePaymentsToAccount` (`boolean`, optional): Allow payments to this account.
- `TaxType` (`string`, optional): Tax type. e.g. NONE

### `xero_account_update`

Update an existing account in the Xero chart of accounts.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `account_id` (`string`, required): AccountID GUID. Get it from xero_accounts_list.
- `Code` (`string`, optional): Account code.
- `Description` (`string`, optional): Account description.
- `EnablePaymentsToAccount` (`boolean`, optional): Allow payments to this account.
- `Name` (`string`, optional): Account name.
- `TaxType` (`string`, optional): Tax type.

### `xero_account_delete`

Archive (soft-delete) an account from the Xero chart of accounts by setting its status to ARCHIVED.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `account_id` (`string`, required): AccountID GUID. Get it from xero_accounts_list.

### `xero_contacts_list`

Retrieve contacts (customers and suppliers) from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Name ASC
- `page` (`integer`, optional): Page number. e.g. 1
- `pageSize` (`integer`, optional): Records per page. e.g. 100
- `searchTerm` (`string`, optional): Search term. e.g. Acme
- `where` (`string`, optional): Filter expression. e.g. IsSupplier==true

### `xero_contact_get`

Retrieve a single contact by its ContactID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contact_id` (`string`, required): ContactID GUID. Get it from xero_contacts_list.

### `xero_contact_create`

Create a new contact (customer or supplier) in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Name` (`string`, required): Contact name. e.g. Acme Corp
- `AccountNumber` (`string`, optional): Account number. e.g. CUST-001
- `Addresses` (`array`, optional): Array of address objects.
- `DefaultCurrency` (`string`, optional): Default currency code. e.g. NZD
- `EmailAddress` (`string`, optional): Email address. e.g. john@acme.com
- `FirstName` (`string`, optional): First name. e.g. John
- `IsCustomer` (`boolean`, optional): Mark as a customer.
- `IsSupplier` (`boolean`, optional): Mark as a supplier.
- `LastName` (`string`, optional): Last name. e.g. Smith
- `Phones` (`array`, optional): Array of phone objects.

### `xero_contact_update`

Update an existing contact in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contact_id` (`string`, required): ContactID GUID. Get it from xero_contacts_list.
- `DefaultCurrency` (`string`, optional): Default currency code.
- `EmailAddress` (`string`, optional): Email address.
- `FirstName` (`string`, optional): First name.
- `IsCustomer` (`boolean`, optional): Mark as a customer.
- `IsSupplier` (`boolean`, optional): Mark as a supplier.
- `LastName` (`string`, optional): Last name.
- `Name` (`string`, optional): Contact name.

### `xero_contact_groups_list`

Retrieve all contact groups in a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `order` (`string`, optional): Order results. e.g. Name ASC
- `where` (`string`, optional): Filter expression. e.g. Status=="ACTIVE"

### `xero_contact_group_get`

Retrieve a single contact group by its ContactGroupID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contact_group_id` (`string`, required): ContactGroupID GUID. Get it from xero_contact_groups_list.

### `xero_contact_group_create`

Create a new contact group in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Name` (`string`, required): Group name. e.g. VIP Customers

### `xero_contact_group_update`

Update a contact group name in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contact_group_id` (`string`, required): ContactGroupID GUID. Get it from xero_contact_groups_list.
- `Name` (`string`, required): New group name.

### `xero_contact_group_delete`

Delete (soft-delete) a contact group in Xero by setting its status to DELETED.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contact_group_id` (`string`, required): ContactGroupID GUID. Get it from xero_contact_groups_list.

### `xero_invoices_list`

Retrieve sales invoices and bills from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `ContactIDs` (`string`, optional): Comma-separated ContactID GUIDs to filter by.
- `Statuses` (`string`, optional): Comma-separated statuses. e.g. AUTHORISED,SUBMITTED
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. DueDate ASC
- `page` (`integer`, optional): Page number. e.g. 1
- `pageSize` (`integer`, optional): Records per page. e.g. 100
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_invoice_get`

Retrieve a single invoice or bill by its InvoiceID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `invoice_id` (`string`, required): InvoiceID GUID. Get it from xero_invoices_list.

### `xero_invoice_create`

Create a new invoice (ACCREC) or bill (ACCPAY) in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Contact` (`string`, required): Contact object as JSON string with ContactID.
- `LineItems` (`array`, required): Array of line item objects.
- `Type` (`string`, required): ACCREC (invoice) or ACCPAY (bill).
- `CurrencyCode` (`string`, optional): Currency code. e.g. NZD
- `DueDate` (`string`, optional): Due date (YYYY-MM-DD). Required when authorising.
- `InvoiceNumber` (`string`, optional): Invoice number. e.g. INV-001
- `Reference` (`string`, optional): Reference. e.g. PO-123
- `Status` (`string`, optional): Status. e.g. AUTHORISED

### `xero_invoice_update`

Update an existing invoice or bill in Xero. DueDate is required when setting Status to AUTHORISED.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `invoice_id` (`string`, required): InvoiceID GUID. Get it from xero_invoices_list.
- `DueDate` (`string`, optional): Due date (YYYY-MM-DD). Required when setting Status to AUTHORISED.
- `LineItems` (`array`, optional): Array of line item objects.
- `Reference` (`string`, optional): Reference.
- `Status` (`string`, optional): Status. e.g. AUTHORISED

### `xero_invoice_delete`

Void (soft-delete) an invoice or bill in Xero by setting its status to VOIDED. Only works on AUTHORISED or SUBMITTED invoices.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `invoice_id` (`string`, required): InvoiceID GUID. Get it from xero_invoices_list.

### `xero_credit_notes_list`

Retrieve credit notes from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_credit_note_get`

Retrieve a single credit note by its CreditNoteID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `credit_note_id` (`string`, required): CreditNoteID GUID. Get it from xero_credit_notes_list.

### `xero_credit_note_create`

Create a new credit note in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Contact` (`string`, required): Contact object as JSON string with ContactID.
- `LineItems` (`array`, required): Array of line item objects.
- `Type` (`string`, required): ACCRECCREDIT or ACCPAYCREDIT.
- `CurrencyCode` (`string`, optional): Currency code. e.g. NZD
- `Date` (`string`, optional): Credit note date (YYYY-MM-DD).
- `Reference` (`string`, optional): Reference. e.g. CN-001
- `Status` (`string`, optional): Status. e.g. AUTHORISED

### `xero_credit_note_update`

Update an existing credit note in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `credit_note_id` (`string`, required): CreditNoteID GUID. Get it from xero_credit_notes_list.
- `Reference` (`string`, optional): Reference. e.g. CN-002
- `Status` (`string`, optional): Status. e.g. AUTHORISED

### `xero_payments_list`

Retrieve payments applied to invoices, credit notes, or prepayments in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_overpayments_list`

Retrieve overpayments from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_prepayments_list`

Retrieve prepayments from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_batch_payments_list`

Retrieve batch payments from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_bank_transactions_list`

Retrieve spend or receive money bank transactions from Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Type=="SPEND"

### `xero_bank_transfers_list`

Retrieve bank transfers between accounts in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `where` (`string`, optional): Filter expression. e.g. Amount>100

### `xero_items_list`

Retrieve inventory items from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Name ASC
- `where` (`string`, optional): Filter expression. e.g. IsTrackedAsInventory==true

### `xero_item_get`

Retrieve a single item by its ItemID or Code.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `item_id` (`string`, required): ItemID GUID or item Code. Get it from xero_items_list.

### `xero_item_create`

Create a new inventory item in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Code` (`string`, required): Unique item code. e.g. ITEM-001
- `Description` (`string`, optional): Item description. e.g. Blue widget
- `InventoryAssetAccountCode` (`string`, optional): Inventory asset account code. e.g. 630
- `IsTrackedAsInventory` (`boolean`, optional): Track as inventory.
- `Name` (`string`, optional): Item name. e.g. Widget A
- `PurchaseDescription` (`string`, optional): Purchase description.
- `PurchaseDetails` (`string`, optional): Purchase details JSON. e.g. {"UnitPrice":5.00,"AccountCode":"300"}
- `SalesDetails` (`string`, optional): Sales details JSON. e.g. {"UnitPrice":9.99,"AccountCode":"200"}

### `xero_item_update`

Update an existing inventory item in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `item_id` (`string`, required): ItemID GUID. Get it from xero_items_list.
- `Code` (`string`, required): Item code. e.g. ITEM-001
- `Description` (`string`, optional): Item description.
- `Name` (`string`, optional): Item name.
- `PurchaseDescription` (`string`, optional): Purchase description.
- `PurchaseDetails` (`string`, optional): Purchase details JSON.
- `SalesDetails` (`string`, optional): Sales details JSON.

### `xero_item_delete`

Delete an inventory item from Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `item_id` (`string`, required): ItemID GUID. Get it from xero_items_list.

### `xero_purchase_orders_list`

Retrieve purchase orders from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `DateFrom` (`string`, optional): Start date (YYYY-MM-DD).
- `DateTo` (`string`, optional): End date (YYYY-MM-DD).
- `Status` (`string`, optional): Status filter. e.g. AUTHORISED
- `order` (`string`, optional): Order results. e.g. PurchaseOrderNumber ASC
- `page` (`integer`, optional): Page number. e.g. 1

### `xero_purchase_order_get`

Retrieve a single purchase order by its PurchaseOrderID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `purchase_order_id` (`string`, required): PurchaseOrderID GUID. Get it from xero_purchase_orders_list.

### `xero_purchase_order_create`

Create a new purchase order in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Contact` (`string`, required): Contact object as JSON string with ContactID.
- `LineItems` (`array`, required): Array of line item objects.
- `CurrencyCode` (`string`, optional): Currency code. e.g. NZD
- `Date` (`string`, optional): Order date (YYYY-MM-DD).
- `DeliveryDate` (`string`, optional): Delivery date (YYYY-MM-DD).
- `PurchaseOrderNumber` (`string`, optional): PO number. e.g. PO-001
- `Reference` (`string`, optional): Reference. e.g. Ref-001
- `Status` (`string`, optional): Status. e.g. DRAFT

### `xero_purchase_order_update`

Update an existing purchase order in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `purchase_order_id` (`string`, required): PurchaseOrderID GUID. Get it from xero_purchase_orders_list.
- `DeliveryDate` (`string`, optional): Delivery date (YYYY-MM-DD).
- `LineItems` (`array`, optional): Array of line item objects.
- `Reference` (`string`, optional): Reference.
- `Status` (`string`, optional): Status. e.g. AUTHORISED

### `xero_quotes_list`

Retrieve quotes from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `ContactID` (`string`, optional): Filter by ContactID GUID.
- `DateFrom` (`string`, optional): Start date (YYYY-MM-DD).
- `DateTo` (`string`, optional): End date (YYYY-MM-DD).
- `Status` (`string`, optional): Status filter. e.g. SENT
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1

### `xero_quote_get`

Retrieve a single quote by its QuoteID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `quote_id` (`string`, required): QuoteID GUID. Get it from xero_quotes_list.

### `xero_quote_create`

Create a new quote in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Contact` (`string`, required): Contact object as JSON string with ContactID.
- `Date` (`string`, required): Quote date (YYYY-MM-DD).
- `LineItems` (`array`, required): Array of line item objects.
- `CurrencyCode` (`string`, optional): Currency code. e.g. NZD
- `ExpiryDate` (`string`, optional): Expiry date (YYYY-MM-DD).
- `QuoteNumber` (`string`, optional): Quote number. e.g. QU-001
- `Reference` (`string`, optional): Reference.
- `Status` (`string`, optional): Status. e.g. DRAFT
- `Summary` (`string`, optional): Summary of services.
- `Title` (`string`, optional): Quote title. e.g. Service Proposal

### `xero_quote_update`

Update an existing quote in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `quote_id` (`string`, required): QuoteID GUID. Get it from xero_quotes_list.
- `Contact` (`string`, required): Contact object as JSON string with ContactID.
- `Date` (`string`, required): Quote date (YYYY-MM-DD).
- `ExpiryDate` (`string`, optional): Expiry date (YYYY-MM-DD).
- `LineItems` (`array`, optional): Array of line item objects.
- `Reference` (`string`, optional): Reference.
- `Status` (`string`, optional): Status. e.g. SENT

### `xero_repeating_invoices_list`

Retrieve repeating invoice templates from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `order` (`string`, optional): Order results. e.g. Type ASC
- `where` (`string`, optional): Filter expression. e.g. Status=="AUTHORISED"

### `xero_manual_journals_list`

Retrieve manual journals from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. Date DESC
- `page` (`integer`, optional): Page number. e.g. 1
- `where` (`string`, optional): Filter expression. e.g. Status=="POSTED"

### `xero_manual_journal_get`

Retrieve a single manual journal by its ManualJournalID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `manual_journal_id` (`string`, required): ManualJournalID GUID. Get it from xero_manual_journals_list.

### `xero_manual_journal_create`

Create a new manual journal entry in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `JournalLines` (`array`, required): Array of journal line objects.
- `Narration` (`string`, required): Journal narration. e.g. Year-end adjustment
- `Date` (`string`, optional): Journal date (YYYY-MM-DD).
- `Status` (`string`, optional): Status. e.g. DRAFT

### `xero_manual_journal_update`

Update an existing manual journal in Xero. JournalLines are required when setting Status to POSTED.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `manual_journal_id` (`string`, required): ManualJournalID GUID. Get it from xero_manual_journals_list.
- `Date` (`string`, optional): Journal date (YYYY-MM-DD).
- `JournalLines` (`array`, optional): Array of journal line objects. Required when setting Status to POSTED.
- `Narration` (`string`, optional): Journal narration.
- `Status` (`string`, optional): Status. e.g. POSTED

### `xero_employees_list`

Retrieve employees from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. LastName ASC
- `where` (`string`, optional): Filter expression. e.g. Status=="ACTIVE"

### `xero_employee_get`

Retrieve a single employee by their EmployeeID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `employee_id` (`string`, required): EmployeeID GUID. Get it from xero_employees_list.

### `xero_employee_create`

Create a new employee record in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `FirstName` (`string`, required): First name. e.g. Jane
- `LastName` (`string`, required): Last name. e.g. Doe
- `ExternalLink` (`string`, optional): External link URL.
- `Status` (`string`, optional): Status. e.g. ACTIVE

### `xero_employee_update`

Update an existing employee in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `employee_id` (`string`, required): EmployeeID GUID. Get it from xero_employees_list.
- `FirstName` (`string`, optional): First name.
- `LastName` (`string`, optional): Last name.
- `Status` (`string`, optional): Status. e.g. TERMINATED

### `xero_currencies_list`

Retrieve enabled currencies for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `order` (`string`, optional): Order results. e.g. Code ASC
- `where` (`string`, optional): Filter expression. e.g. Code=="USD"

### `xero_tax_rates_list`

Retrieve tax rates from a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `TaxType` (`string`, optional): Filter by tax type. e.g. OUTPUT2
- `order` (`string`, optional): Order results. e.g. Name ASC
- `where` (`string`, optional): Filter expression. e.g. Status=="ACTIVE"

### `xero_tax_rate_create`

Create a new tax rate in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `Name` (`string`, required): Tax rate name. e.g. GST on Expenses
- `TaxComponents` (`array`, required): Array of tax component objects.

### `xero_tax_rate_update`

Update an existing tax rate in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `TaxComponents` (`array`, required): Array of tax component objects. e.g. [{"Name":"Tax","Rate":15,"IsCompound":false}]
- `TaxType` (`string`, required): Tax type identifier. e.g. OUTPUT2
- `Name` (`string`, optional): Tax rate name. e.g. GST on Sales
- `Status` (`string`, optional): Status. e.g. ACTIVE

### `xero_tracking_categories_list`

Retrieve tracking categories and their options from Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `order` (`string`, optional): Order results. e.g. Name ASC
- `where` (`string`, optional): Filter expression. e.g. Status=="ACTIVE"

### `xero_tracking_category_update`

Update a tracking category name or status in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `tracking_category_id` (`string`, required): TrackingCategoryID GUID. Get it from xero_tracking_categories_list.
- `Name` (`string`, optional): Category name. e.g. Department
- `Status` (`string`, optional): Status. e.g. ACTIVE

### `xero_tracking_category_delete`

Delete a tracking category from Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `tracking_category_id` (`string`, required): TrackingCategoryID GUID. Get it from xero_tracking_categories_list.

### `xero_tracking_option_create`

Create a new option within a tracking category in Xero.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `tracking_category_id` (`string`, required): TrackingCategoryID GUID. Get it from xero_tracking_categories_list.
- `Name` (`string`, required): Option name. e.g. North

### `xero_users_list`

Retrieve users of a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `modified_after` (`string`, optional): Return records modified after this UTC datetime (ISO 8601).
- `order` (`string`, optional): Order results. e.g. LastName ASC
- `where` (`string`, optional): Filter expression. e.g. IsSubscriber==true

### `xero_user_get`

Retrieve a single Xero organisation user by their UserID.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `user_id` (`string`, required): UserID GUID. Get it from xero_users_list.

### `xero_report_balance_sheet`

Retrieve the Balance Sheet report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `date` (`string`, optional): Report date (YYYY-MM-DD). e.g. 2024-06-30
- `periods` (`integer`, optional): Number of comparison periods. e.g. 3
- `standardLayout` (`boolean`, optional): Use standard layout.
- `timeframe` (`string`, optional): Comparison timeframe. e.g. MONTH
- `trackingCategoryID` (`string`, optional): Filter by tracking category GUID.

### `xero_report_profit_and_loss`

Retrieve the Profit and Loss report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `fromDate` (`string`, optional): Start date (YYYY-MM-DD). e.g. 2024-01-01
- `periods` (`integer`, optional): Number of comparison periods. e.g. 3
- `standardLayout` (`boolean`, optional): Use standard layout.
- `timeframe` (`string`, optional): Comparison timeframe. e.g. MONTH
- `toDate` (`string`, optional): End date (YYYY-MM-DD). e.g. 2024-06-30
- `trackingCategoryID` (`string`, optional): Filter by tracking category GUID.

### `xero_report_trial_balance`

Retrieve the Trial Balance report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `date` (`string`, optional): Report date (YYYY-MM-DD). e.g. 2024-06-30
- `paymentsOnly` (`boolean`, optional): Include only payment transactions.

### `xero_report_aged_payables`

Retrieve the Aged Payables Outstanding report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contactID` (`string`, required): ContactID GUID to report on. Get it from xero_contacts_list.
- `date` (`string`, optional): Report date (YYYY-MM-DD). e.g. 2024-06-30
- `fromDate` (`string`, optional): Start date (YYYY-MM-DD).
- `toDate` (`string`, optional): End date (YYYY-MM-DD).

### `xero_report_aged_receivables`

Retrieve the Aged Receivables Outstanding report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `contactID` (`string`, required): ContactID GUID to report on. Get it from xero_contacts_list.
- `date` (`string`, optional): Report date (YYYY-MM-DD). e.g. 2024-06-30
- `fromDate` (`string`, optional): Start date (YYYY-MM-DD).
- `toDate` (`string`, optional): End date (YYYY-MM-DD).

### `xero_report_bank_summary`

Retrieve the Bank Summary report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `fromDate` (`string`, optional): Start date (YYYY-MM-DD). e.g. 2024-01-01
- `toDate` (`string`, optional): End date (YYYY-MM-DD). e.g. 2024-06-30

### `xero_report_executive_summary`

Retrieve the Executive Summary report for a Xero organisation.

Parameters:

- `xero_tenant_id` (`string`, optional): Xero tenant (organisation) ID. Injected automatically by Scalekit — you do not need to supply this.
- `date` (`string`, optional): Report date (YYYY-MM-DD). e.g. 2024-06-01


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
