POST /api.xro/2.0/ManualJournals with a body containing 'Narration', 'Date', and a 'JournalLines' array
Each JournalLine requires 'LineAmount' (positive for debit, negative for credit per Xero convention), 'AccountCode', and optionally 'Description' and 'TaxType'
Ensure the sum of all JournalLine amounts equals zero; Xero will reject unbalanced journals
Set 'Status' to 'DRAFT' to save without posting, or 'POSTED' to post immediately
To post a draft journal later, PUT /api.xro/2.0/ManualJournals/{ManualJournalID} with 'Status': 'POSTED'
Retrieve journals with GET /api.xro/2.0/ManualJournals?where=Status=="DRAFT" to list pending entries for review
Known gotchas
Xero uses a sign convention where a positive LineAmount on a revenue account is a credit (increasing income); verify sign conventions against your expected GL impact before posting
Manual journals in a locked period cannot be posted or modified; check the organisation's lock date before attempting to post historical entries
Tax lines may be automatically generated by Xero when a TaxType with a non-zero rate is specified; the resulting tax entry will affect the balance and may require adjusting other line amounts
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp