Xero API Gateway โ unified accounting access for 5 orgs
Context
Aspire runs 5 separate Xero organizations (one per entity: ADG, AHG, Six Degrees, Chanya Thai, Venice). Agents + apps need programmatic access to accounting data across all of them, but Xero's OAuth + per-org token management is painful. The Xero API Gateway wraps all 5 orgs behind a single authenticated HTTP surface.
Architecture
graph LR
TANDA["Tanda payroll"] --> XG
APP["apps + agents"] --> XG
XG["Xero API Gateway<br/>X-API-Key"] --> ADG[("adg")]
XG --> AHG[("ahg")]
XG --> SIX[("sixdegree")]
XG --> CHA[("chanyathai")]
XG --> VEN[("venice")]
classDef gw fill:#715EE3,color:#fff,stroke:#291F50;
class XG gw;
Detail
The gateway (LIVE)
- URL:
xero.aspiredigitalgroup.com.aufor all 5 orgs - Orgs covered: adg, ahg, sixdegree, chanyathai, venice
- Auth:
X-API-Key - Surface: Full payroll + accounting surface
Known issue: MCP wrappers broken
Per MEMORY.md reference_xero_gateway:
- The Xero MCP wrappers are broken โ do NOT rely on them
- Use
curlwithX-API-Keyagainst the gateway directly instead - This is the documented workaround until the MCP wrappers are fixed
The 5 Xero orgs
| Org slug | Entity | Used for |
|---|---|---|
adg | Aspire Digital Group | Holding/parent accounting |
ahg | Aspire Hospitality Group | Hospitality holdco |
sixdegree | Six Degrees venue | Per-venue P&L |
chanyathai | Chanya Thai venue | Per-venue P&L |
venice | Venice Albany venue | Per-venue P&L |
Note: org names like chanyathai and sixdegree are Aspire AU entities (not Thai), per aspire-venue-geography.
What it exposes
- Invoices (create, list, update)
- Bank transactions
- Contacts
- Payroll (employees, leave, timesheets, leave balances)
- P&L, balance sheet, trial balance
- Tax rates, tracking categories
- Manual journals, credit notes, quotes, payments, items
Relationship to payroll flow
The Xero gateway is the "money movement" half of the payroll pipeline described in payroll-via-tanda:
Tanda (rosters/timesheets) โ Xero (per-venue org) โ bank file + STP to ATO
Relationship to other tools
- Zinga Ledgr (per zinga-suite) is the eventual Xero replacement โ when it reaches feature parity, the gateway points at Ledgr instead
- smart-dashboard (smart-dashboard) pulls revenue/expense data via this gateway
- Odoo is the project/CRM system of record; Xero is the accounting system of record
Open questions
- When to fix the broken MCP wrappers vs just standardizing on curl + X-API-Key?
- When does Zinga Ledgr replace one org's Xero?
- Should the gateway cache aggressively (Xero rate limits) or stay real-time?
Related
- payroll-via-tanda โ Xero is the money-movement half
- zinga-suite โ Zinga Ledgr is the future replacement
- smart-dashboard โ consumer of accounting data
- aspire-venue-geography โ why org names aren't Thai
๐ Relationships
graph LR
xero_api_gateway["xero-api-gateway"]:::self
xero_api_gateway --> aspire_venue_geography["aspire-venue-geography"]
xero_api_gateway --> payroll_via_tanda["payroll-via-tanda"]
xero_api_gateway --> zinga_suite["zinga-suite"]
xero_api_gateway --> smart_dashboard["smart-dashboard"]
classDef self fill:#715EE3,color:#fff,stroke:#291F50;