Push Matched Lines to Xero
POST/api/ledger/reconciliation/bank-statements/:bankStatementImport/push-to-xero
Push the matched line(s)' SKU document(s) to the accounting provider (Xero) via the shared ledger sync pipeline (the same dedup-aware path the rest of the app posts through). Only lines whose match_status is matched are pushed; each matched entry that is already linked-current in Xero is skipped, others are enqueued as a Create/Update sync operation. Optional body line_ids scopes it to a selection (a single line, or a bulk pick); omit to push every matched line.
Any valid API token can call this endpoint — no specific scope required. Manage tokens.
A line flips to synced the moment all of its documents are confirmed in Xero; lines whose documents are still being pushed stay matched and self-heal to synced on the next refresh (suggestions / show) once the async push lands.
Returns: entries_enqueued (entries run through the sync pipeline), lines_synced (lines now fully in Xero), lines_pending (lines still pushing), and the refreshed import (lines + their matches).
Authentication: Requires Bearer token.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.