> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chartcastr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Xero streams

> Stream real-time Xero accounting events to Slack including invoice creation, contact updates, and credit notes. Configure event types and channels.

<Info>
  **Paid Feature** — Xero Streams requires a connected [Xero source](/integrations/sources/xero) on any paid plan (Starter, Pro, Enterprise). If you haven't set that up yet, start there first. [See pricing](https://chartcastr.com/pricing).
</Info>

## Overview

Once your Xero organisation is connected, Chartcastr receives webhook events from Xero in real-time and forwards them to your configured Slack channels instantly — no polling, no delay.

This complements your [Xero Pulses](/integrations/sources/xero) (scheduled financial charts) by giving you immediate visibility into individual accounting events as they happen.

|                  | Xero Pulses                                      | Xero Streams                                    |
| ---------------- | ------------------------------------------------ | ----------------------------------------------- |
| **What you get** | P\&L, cash, and receivables charts on a schedule | Instant notification per event                  |
| **When**         | Daily, weekly, or a custom cadence               | The moment the event fires in Xero              |
| **AI summary**   | Yes — trend analysis + financial context         | No (single event notification)                  |
| **Best for**     | Weekly finance reviews, trend tracking           | Real-time ops alerts, new invoice notifications |

## Supported Events

| Event                   | Trigger                                            |
| ----------------------- | -------------------------------------------------- |
| **New Invoice**         | An invoice is created in Xero (any status)         |
| **Invoice Updated**     | An invoice is updated, approved, or marked as paid |
| **New Contact**         | A new contact is created in Xero                   |
| **Contact Updated**     | An existing contact is modified or archived        |
| **New Credit Note**     | A credit note is created                           |
| **Credit Note Updated** | A credit note is updated or applied to an invoice  |

You can route any combination of these to any Slack channel. For example:

* `#finance` → New Invoice + Invoice Updated + New Credit Note
* `#ops` → New Contact + Contact Updated
* `#accounts` → all events

## What Gets Sent to Slack

Each Slack notification includes:

* **Event type and emoji** — e.g. `:receipt: New Invoice Created`
* **A direct link to the record** in Xero — click through to view the full invoice, contact, or credit note without leaving Slack
* **Timestamp** of when the event occurred in Xero
* **Footer** — `via Chartcastr Streams · Xero`

<Info>
  **Xero's webhook payloads are intentionally minimal.** Xero sends only the resource ID, event type, and timestamp — not the invoice amount, contact name, or other record details. The notification links directly to the record in Xero where you can see the full details. This is a Xero platform constraint, not a Chartcastr limitation.
</Info>

### Example notifications

**New invoice created:**

```
📄 New Invoice Created
Invoice: View in Xero →
Time: 24 Feb 2026, 3:45 pm
via Chartcastr Streams · Xero
```

**Contact updated:**

```
✏️ Contact Updated
Contact: View in Xero →
Time: 24 Feb 2026, 9:12 am
via Chartcastr Streams · Xero
```

**Credit note created:**

```
💸 New Credit Note
Credit Note: View in Xero →
Time: 23 Feb 2026, 2:30 pm
via Chartcastr Streams · Xero
```

## Setup

<Steps>
  <Step title="Connect your Xero organisation">
    Go to [Sources → Xero](/integrations/sources/xero) and complete the OAuth flow. Chartcastr requests read-only access to accounting reports and contacts — no write permissions.
  </Step>

  <Step title="Open Streams">
    Navigate to [Streams](https://chartcastr.com/admin/streams) in your dashboard. If Xero is connected and you have Slack set up, you'll see the Xero stream configuration UI alongside any other sources.
  </Step>

  <Step title="Configure topics per channel">
    In the **By Channel** tab, click any Slack channel to choose which Xero events it receives. In the **By Source** tab, click any event type to see and edit which channels it routes to.
  </Step>
</Steps>

## Deduplication

Chartcastr deduplicates Xero webhook events using a key derived from the tenant ID, event sequence, and resource ID. If Xero retries a delivery (which it does on non-2xx responses), the duplicate event is silently dropped.

## Intent to Receive Validation

When you first enable Xero webhooks, Xero sends a validation request with an empty events array. Chartcastr handles this automatically — it verifies the HMAC signature and responds with `200 OK`. No action is required on your part.

## Streams as Context for Xero Pulses

When a notable Xero event arrives via a Stream (e.g. a large new invoice), Chartcastr stores it as context attached to that moment in time.

When your next [Xero Pulse](/integrations/sources/xero) delivers your weekly P\&L chart, the AI can surface that event in its analysis:

> *"Revenue this week included a significant invoice created on Wednesday — this aligns with the spike visible in the weekly chart."*

This is automatic — no manual notes required. The stream event is captured, timestamped, and made available to the AI when it runs your next Pulse.

<Tip>
  For the best context capture, make sure you have [AI summaries](/analysis/in-pulses) enabled on your Xero Pulse connection. Without AI, stream context is stored but not surfaced in delivery.
</Tip>
