Authentication
Send an API key as a bearer token. The key must carry the billing.invoice.manage permission; a key without it is refused with 403, not 404.
This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X PATCH https://api.zinndigital.com/v1/accounting/xero \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "includeSubclientInvoices": <boolean> }'Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
Today the one option is `includeSubclientInvoices`, which is meaningful only for a reseller: with it on, the invoices the reseller raised **to its own clients** are pushed into the reseller's Xero as well as the invoices Zinn® raised to them. ⛔ It never widens the scope to invoices Zinn® raised **directly** to those clients. Those are Zinn®'s own sales, on Zinn®'s legal entity, and are none of the reseller's business — the engine discriminates on the invoice's legal entity owner, not on the organization tree alone. Requires `billing.invoice.manage`.
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
includeSubclientInvoices | boolean | Yes | See `updateXeroConnection`. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
id | Uuid | No | UUIDv7 identifier — sortable by creation time (docs/02 §8). |
status | string<not_connected, connected, needs_reconnect, disconnected> | Yes | `connected` is healthy. `needs_reconnect` means the link died (Xero expires a refresh token after 60 days of inactivity, and access can be revoked in Xero) — invoices raised mea… |
tenantName | string | No | The Xero organization's own name. ⭐ The single most useful field on the screen: connecting the wrong company is the mistake that hurts, and the name is what lets a customer see… |
includeSubclientInvoices | boolean | No | Reseller option — also push the invoices this organization raised to its OWN clients. Never includes invoices Zinn® raised directly to those clients. |
entitled | boolean | No | Whether the plan includes accounting sync (or it has been bought as an add-on). Reported even when false so the screen can explain rather than show nothing. |
connectedAt | string | No | — |
lastSyncAt | string | No | When a push last SUCCEEDED. Null means never — not "broken". |
brokenSince | string | No | When it first stopped working, so "down for three weeks" is answerable. |
lastError | string | No | A reason written for the customer. Never the vendor's error verbatim. |
counts | XeroSyncCounts | Yes | How this organization's invoices stand with Xero. |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429