Zoho Books – Gotchas

Service ID: zoho-books

Zoho Books is cloud-based accounting software in which you can record, audit and analyze all financial transactions easily. With secure data storage, easy navigation and customizable features, Zoho Books provide a head start in accounting for small businesses.

⚠️

30 gotchas across 14 resources

These are connector-specific behaviors and limitations to be aware of when integrating.

allbillPaymentsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

Bills3 gotchas

allbillsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

addbillsAdd

The status of the bill will be "submitted" by default when creating a bill.

updatebillsUpdate

The allowed values for the status field are "draft", "submitted" and "void" when using the update method. Please send status updates separately from other bill updates.

Credit Notes3 gotchas

allcreditNotesAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

addcreditNotesAdd

By default, the status of the bill will be set to "authorised".

updatecreditNotesUpdate

Allowed values for the status are "draft", "authorised", and "voided" when using the update method. Please send status updates separately from other updates for Credit Notes.

Customers2 gotchas

allcustomersAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

updatecustomersUpdate

The status field can be updated to either "active" or "inactive". Please send status updates separately from other updates for the customer.

Expenses4 gotchas

allexpensesAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

addexpensesAdd

Zoho Books supports only one customer and one rebilling (rebillable) flag per expense at the header level. Only provide these in the first line_item — they will be mapped to the header-level fields and applied to all lines. If differentiated treatment is required, create separate expenses.

oneexpensesOne

Zoho Books supports only one customer and one rebilling (rebillable) flag per expense at the header level. When reading, all line_items will return the same customer and rebilling values.

updateexpensesUpdate

Zoho Books supports only one customer and one rebilling (rebillable) flag per expense at the header level. Only provide these in the first line_item — they will be mapped to the header-level fields and applied to all lines. If differentiated treatment is required, create separate expenses.

Invoice Items2 gotchas

allinvoiceItemsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

updateinvoiceItemsUpdate

Please ensure that status updates are sent separately from other invoice item updates.

Invoices3 gotchas

allinvoicesAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

addinvoicesAdd

By default, the status of the invoice will be set to "draft".

updateinvoicesUpdate

The allowed values for the status field are "draft", "submitted", and "void" when using the update method. Please ensure that status updates are sent separately from other invoice updates.

alljournalEntriesAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

Journal entries are returned in Zoho's internal entry-number order, newest created first — not by posting date. Zoho's own default sorts by journal_date, which has no unique tiebreaker, and paginating over it means a page boundary falling inside a group of same-dated entries silently duplicates some records and skips others. Entry number is unique per organization, so pagination over it is stable. In practice the two orders are close, because entry numbers are assigned in creation order; they diverge for back-dated entries, where an entry created today for an earlier period sorts first rather than by its posted_at.

To sort by posting date instead, pass ?pass_through[sort_column]=journal_date&pass_through[sort_order]=D — but note this reinstates the duplicate-and-skip behaviour at page boundaries, so only use it for a single page rather than when paginating a full ledger.

allledgerAccountsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

oneledgerAccountsOne

current_balance on a single ledger account is sourced from Zoho's closing_balance, which differs from the list endpoint's balance in three ways: it is an absolute value (the list returns a signed balance, negative when the balance sits on the account's non-normal side), it includes future-dated transactions, and system-computed accounts (e.g. Retained Earnings) return 0. For signed, as-of-today balances across accounts, use the list endpoint (GET /accounting/ledger-accounts).

updateledgerAccountsUpdate

For ledger accounts, please update the "active" status separately from other updates.

Payments1 gotcha

allpaymentsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

Projects1 gotcha

allprojectsAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

allpurchaseOrdersAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

addpurchaseOrdersAdd

By default, the status of the purchase order will be set to "draft".

updatepurchaseOrdersUpdate

Allowed values for the status are "draft", "open", "billed" and "deleted" when using the update method. Please send status updates separately from other updates for the supplier.

Suppliers2 gotchas

allsuppliersAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.

updatesuppliersUpdate

The status field can be updated to either "active" or "inactive". Please send status updates separately from other updates for the supplier.

Tax Rates1 gotcha

alltaxRatesAll

Zoho Books does not expose a total record count in list responses. meta.total_count will not appear.