Date: 2026-05-14 Product: Zoho Books (zoho.com/books) — cloud accounting software, part of the Zoho Finance Suite Vendor: Zoho Corporation — Chennai / Tamil Nadu, India; privately held, founded 1996 Purpose: Evaluate Zoho Books' API capabilities for Orcha integration
Zoho Books IS a real accounting system / ERP-class target. This is a fundamentally different category from the spend-management tools researched recently (Pleo, Moss, Spendesk, Payhawk, Circula, Finway, Yokoy). Those sit upstream of the ledger and only export to it. Zoho Books is the ledger. It is the customer's actual books of account: chart of accounts, journals, AP/AR, bank reconciliation, tax filing.
Implication for Orcha: Zoho Books is a genuine downstream target system — the place Orcha would push processed AP invoices into, the same role DATEV, SAP, or Business Central play for other customers. The relationship is complementary, not competitive: Orcha does invoice capture / OCR / extraction / tax-compliance coding; Zoho Books is where the finished, coded bill lands. (Mild overlap exists — Zoho sells a "Document Autoscan" OCR add-on — but that is a thin generic scanner, not Orcha-grade extraction.)
The India context (the "in the news in India" reference). Zoho Corporation is one of India's flagship technology companies and is frequently in the Indian press:
This matters for Orcha mainly as vendor-stability and data-residency context: Zoho is large, profitable, privately held (no investor exit pressure), and — critically — operates a dedicated EU data centre (see §2), which is the relevant fact for German/EU customers.
| Capability | Public API | Via iPaaS | Via Unified API | Verdict |
|---|---|---|---|---|
| Push AP invoices (vendor bills) into Zoho Books | YES (POST /bills) |
YES (Zapier "Create Bill") | YES (Rutter/Merge/Codat) | Available now |
| Attach original invoice PDF to a bill | YES (POST /bills/{id}/attachment) |
YES (Zapier "Add Attachment to Bill") | Varies | Available now |
| Submit a bill for approval | YES (POST /bills/{id}/submit) |
NO | NO | Available now (needs Professional+ plan) |
| Approve a bill | YES (POST /bills/{id}/approve) |
NO | NO | Available now (needs Professional+ plan) |
| Read/write chart of accounts | YES (full CRUD) | Partial | YES (read) | Available now |
| Read/write vendors (contacts) | YES (full CRUD, contact_type=vendor) |
YES (Workato/Zapier) | YES | Available now |
| Read/write cost centers (Reporting Tags) | YES (full CRUD) | NO | Partial | Available now |
| Read/write tax codes | YES (Taxes API) | NO | YES (read) | Available now |
| Read/write items | YES (full CRUD) | YES | YES | Available now |
| Record vendor payments / read payment status | YES (Vendor Payments API; GET /bills/{id}/payments) |
YES (Zapier "Create Payment") | YES (read) | Available now |
| Read bill status / lifecycle | YES (GET /bills/{id} status field) |
YES (triggers) | YES | Available now |
| Event notifications (webhooks) | YES — but via workflow rules configured in-app | YES (iPaaS triggers) | YES (Rutter/Merge events) | Available now, with caveat |
| Inbound document creation without REST | YES (Incoming Webhooks, Deluge-scripted) | N/A | N/A | Available (niche) |
Overall assessment: Zoho Books has a mature, fully-documented REST API with genuine end-to-end write capability for Orcha's core workflow — push a coded vendor bill, attach the source PDF, submit it for approval, and read back its status and payment. This is the strongest, cleanest integration target in the recent research batch, and the only one where the full Orcha workflow (push + attach + approve + status read-back) is supported by documented public endpoints. API access is included in every plan (no separate module to buy). The one real gate is that the approval endpoints depend on the customer being on the Professional plan or higher.
| Layer | Base URL / Location | Purpose |
|---|---|---|
| REST API v3 | https://www.zohoapis.com/books/v3 |
Primary, fully-documented API — all modules |
| REST API v4 | https://www.zohoapis.com/books/v4 (selected modules, e.g. Projects) |
Newer endpoints for some modules; v3 remains the documented baseline |
| Developer docs | https://www.zoho.com/books/api/v3/ |
Full reference, per-module |
| API collection | Postman / downloadable collection via docs | Machine-readable, client generation |
| Developer Console | https://api-console.zoho.com/ |
Where the customer registers the OAuth client |
| Region | API domain |
|---|---|
| United States | zohoapis.com |
| Europe | zohoapis.eu |
| India | zohoapis.in |
| Australia | zohoapis.com.au |
| Japan | zohoapis.jp |
| Canada | zohoapis.ca |
| China | zohoapis.com.cn |
| Saudi Arabia | zohoapis.sa |
For Orcha: German/EU customers will be on the .eu data center — Orcha's integration must detect and route to the correct regional domain per customer. The data center is fixed at org-signup time.
| Aspect | Detail |
|---|---|
| Method | OAuth 2.0 |
| Client registration | Zoho Developer Console (api-console.zoho.com) |
| Client types | Self Client (backend-only), Server-based, Client-based, Mobile, Non-browser |
| Tokens | Access token (1 h validity), refresh token (permanent until revoked) |
| Token limits | Max 20 refresh tokens/user; max 15 active access tokens/refresh token; max 10 access tokens/refresh token per 10 min |
| Scopes | ZohoBooks.{module}.{operation} — e.g. ZohoBooks.bills.CREATE, ZohoBooks.contacts.READ, ZohoBooks.settings.ALL, ZohoBooks.accountants.CREATE |
| Mandatory param | organization_id must be sent on every API request |
| Limit | Value |
|---|---|
| Per minute | 100 requests / minute / organization (all plans) |
| Per day | Free 1,000 · Standard 2,000 · Professional 5,000 · Premium/Elite/Ultimate 10,000 |
| Concurrent | Free 5 · paid plans 10 simultaneous calls |
| Over-limit response | HTTP 429 (error codes 44, 45, 1070) |
The 100/min ceiling is the practical constraint for a bulk backfill; the daily quota is generous for steady-state AP volume.
Invoices · Bills · Estimates · Sales Orders · Purchase Orders · Credit Notes · Vendor Credits · Customer Payments · Vendor Payments · Expenses · Chart of Accounts · Journals · Fixed Assets · Bank Accounts · Bank Transactions · Bank Rules · Contacts (customers + vendors) · Contact Persons · Items · Price Lists · Locations · Taxes (groups, authorities) · Currencies · Reporting Tags · Projects · Tasks · Time Entries · Users · Custom Modules · Recurring Bills/Invoices/Expenses.
Confidence: HIGH. Write capability is documented directly on the official API reference pages, and independently confirmed by three iPaaS connectors. Zoho Books uses proper REST semantics — POST = create, PUT = update, DELETE = delete — there is no "POST-for-read" ambiguity.
/books/v3/bills)| Endpoint | Method | Operation |
|---|---|---|
/bills |
POST | Create a vendor bill |
/bills/{bill_id} |
PUT | Update a bill |
/bills |
PUT | Update via custom field's unique value |
/bills/{bill_id} |
GET / DELETE | Retrieve / delete a bill |
/bills |
GET | List bills (filterable) |
/bills/{bill_id}/submit |
POST | Submit bill for approval |
/bills/{bill_id}/approve |
POST | Approve a bill |
/bills/{bill_id}/status/open |
POST | Mark as open |
/bills/{bill_id}/status/void |
POST | Void a bill |
/bills/{bill_id}/attachment |
POST / GET / DELETE | Add / get / delete file attachment |
/bills/{bill_id}/comments |
POST / GET | Add / list comments |
/bills/{bill_id}/payments |
GET | List payments applied to the bill |
/bills/{bill_id}/credits |
POST | Apply vendor credits |
/bill/{bill_id}/customfields |
PUT | Update custom fields |
/bills/{bill_id}/address/billing |
PUT | Update billing address |
Create-bill required fields: vendor_id, bill_number.
Key optional fields: date, due_date, payment_terms, reference_number, currency_id, exchange_rate, line_items[], location_id, custom_fields[], tags[] (reporting tags), documents[] (attachments).
Line items support: account_id (GL/expense account — the coding target), tax_id, item_id, location_id, custom fields, and reporting-tag associations.
| Module | Create | Update | Delete | Notes |
|---|---|---|---|---|
| Chart of Accounts | POST /chartofaccounts |
PUT /chartofaccounts/{id} |
DELETE |
+ activate/inactivate; 17+ account types incl. accounts_payable, expense, cost_of_goods_sold |
| Contacts (vendors) | POST /contacts |
PUT /contacts/{id} |
DELETE |
contact_type = customer/vendor; only contact_name required |
| Reporting Tags | POST /reportingtags |
PUT /reportingtags/{id} |
DELETE |
+ /options PUT for tag values; hierarchical (5 levels), max 500 options |
| Items | POST /items |
PUT /items/{id} |
DELETE |
+ activate/inactivate |
| Vendor Payments | POST /vendorpayments |
PUT |
DELETE |
Links to bills; also surfaced at GET /bills/{id}/payments |
| Taxes | POST /settings/taxes |
PUT |
DELETE |
Tax codes, tax groups, authorities |
| Purchase Orders | POST /purchaseorders |
PUT |
DELETE |
+ convert PO → bill |
| Journals / Expenses / Credit Notes / Vendor Credits | POST | PUT | DELETE | Full CRUD |
No write blind spots material to Orcha. Every object Orcha needs to read or write is exposed with documented endpoints.
| Platform | Zoho Books connector? | Operations exposed | Signal |
|---|---|---|---|
| Celigo | YES — native connector on integrator.io, region-selectable | Imports Sales Orders to ERP; exports Invoices, Credit Memos, Customer Payments from ERP → Zoho. Detailed "Available/Supported Zoho Books APIs" doc page exists (Export/Import/Lookup taxonomy) | High — confirms bidirectional write |
| Workato | YES | Actions: create customers, manage vendors, update invoices & estimates; fetch organizations & sales orders | High — "Actions" = confirmed writes |
| Zapier | YES — strong connector | Triggers: New Bill, Customer, Estimate, Expense, Invoice, Item, Customer Payment, Purchase Order, sales-order workflow, vendor workflow. Actions: Create Bill, Create Contact, Create Credit Note, Create Payment, Create Sales Order, Add Attachment to Bill / Sales Order / Invoice | Very high — independently confirms POST /bills + bill attachment via API |
| Make.com | YES | Native Zoho Books modules | Medium |
Takeaway: iPaaS connectors confirm rather than reveal — the public API is already complete. Notably, Zapier's "Create Bill" + "Add Attachment to Bill" actions independently verify the two endpoints most important to Orcha. iPaaS is therefore not needed as a middleware layer — Orcha should integrate the REST API directly. iPaaS is only relevant as a fallback for customers who already standardize on one.
| Channel | Available? | Detail |
|---|---|---|
| Outbound webhooks | YES, with caveat | Webhooks are an action type on a workflow rule — configured in the Zoho Books UI (Settings → Automation), not via API. A rule on the Bills/Invoices/etc. module can fire an HTTP(S) POST on create/edit/status-change. Payload is customizable (field-mapping syntax). HMAC signature verification is supported (hash of payload + shared secret). Caveat: the customer must set up the workflow rule; Orcha cannot create the subscription programmatically. Workflow rules / advanced automation are gated at Professional+. |
| Incoming webhooks | YES (niche) | Zoho Books can receive webhooks that run a Deluge custom function to create/update records (e.g. create an invoice/contact from an external trigger). Low-code, not a REST channel — not the recommended path for Orcha, but confirms a second inbound route exists. |
| Unified APIs | YES — Zoho Books is a connector | Zoho Books is a supported connector in Rutter, Merge, and Codat — all three. This is the favorable case: a third party (Orcha) can reach Zoho Books through a unified API. Coverage is read-heavy (financial statements, accounts, contacts, invoices, bills) with some write support depending on provider. |
| SFTP / file import | Not a primary channel | Zoho Books is API-first cloud SaaS. CSV/Excel import exists in the UI for migration, but there is no programmatic SFTP integration path — and none is needed given the REST API. |
| Native ecosystem | Extensive | Deep native integration with the rest of Zoho (CRM, Inventory, Expense, Projects, Analytics) and direct connectors to banks, payment gateways, and tax authorities. |
| Plan | Monthly | Annual (/mo) | Users | API daily quota | Notable for Orcha |
|---|---|---|---|---|---|
| Free | $0 | $0 | 1 + 1 accountant | 1,000 | API works, but no approval workflows |
| Standard | $20 | $15 | 3 | 2,000 | API listed as a headline feature |
| Professional | $50 | $40 | 5 | 5,000 | Adds sales & purchase approvals + workflow customization |
| Premium | $70 | $60 | 10 | 10,000 | Custom functions, validation rules, custom buttons |
| Elite | $150 | $120 | 10 | 10,000 | Advanced inventory / logistics |
| Ultimate | $275 | $240 | 15 | 10,000 | Analytics bundle |
| Item | Required? | Notes |
|---|---|---|
| API access | Included in every plan — no separate module, add-on, or API-user license | Free plan already has a 1,000-call/day quota. The pricing page highlights "API Access" from Standard up, but the API documentation explicitly grants the Free plan a daily quota. There is no "API module" to purchase — this is the key positive finding. |
| Professional plan or higher | Required only if Orcha uses the submit / approve bill endpoints |
"Set up sales and purchase approvals" is a Professional-tier feature. A customer on Free/Standard can still receive pushed bills + attachments via API, but the approval-workflow endpoints map to a feature their plan doesn't have. |
| Workflow rules for webhooks | Required only if Orcha wants event push-back | Customer configures the workflow rule + webhook URL in-app; advanced automation is Professional+. |
| OAuth client registration | Required | The customer (admin) registers a client in the Zoho Developer Console — see checklist below. |
| BillPay add-on ($59–69/mo) | Optional | Zoho's own payment-execution add-on. Not needed for Orcha; relevant only if the customer wants Zoho to pay the bills. |
| Document Autoscan add-on ($8–10 / 50 scans) | Optional / irrelevant | Zoho's in-house OCR. This is the (thin) overlap with Orcha — a customer using Orcha would not need it. |
.eu for German/EU customers) — Orcha must route to the correct regional domain.api-console.zoho.com — recommended type: Server-based Application (or Self Client for a pure backend service). Receives Client ID + Client Secret.ZohoBooks.bills.ALL, ZohoBooks.contacts.ALL, ZohoBooks.accountants.ALL for chart of accounts, ZohoBooks.settings.ALL for reporting tags/taxes).organization_id via GET /organizations — must accompany every request.Bottom line on licensing: there are no hidden API costs. No per-call metering charges, no API-user seats, no separate API module. The only licensing dependency is the Professional-plan gate on the approval endpoints — and that is a feature gate, not an API surcharge.
| Orcha Need | Zoho Books Support | Endpoint(s) | Confidence | Notes |
|---|---|---|---|---|
| Push incoming AP invoices | FULL | POST /bills |
HIGH | vendor_id + bill_number required; line items carry account_id for GL coding |
| Attach original invoice PDF | FULL | POST /bills/{bill_id}/attachment (or documents[] in create payload) |
HIGH | Confirmed in API docs and Zapier "Add Attachment to Bill" action |
| Write reference data — chart of accounts | FULL (CRUD) | POST/PUT/DELETE /chartofaccounts |
HIGH | 17+ account types incl. accounts_payable, expense |
| Write reference data — cost centers | FULL (CRUD) | POST/PUT /reportingtags + /options |
HIGH | Reporting Tags = Zoho's cost-center / department mechanism; associable at transaction and line-item level; max 10 tags / 500 options each |
| Write reference data — vendors | FULL (CRUD) | POST/PUT/DELETE /contacts (contact_type=vendor) |
HIGH | Only contact_name strictly required |
| Write reference data — tax codes | FULL (CRUD) | POST/PUT/DELETE /settings/taxes |
HIGH | Tax codes, groups, authorities |
| Submit bill for approval | FULL | POST /bills/{bill_id}/submit |
HIGH | Customer must be on Professional+ for the approval feature |
| Approve / reject bill | FULL (approve) | POST /bills/{bill_id}/approve |
HIGH | Approve documented; reject path via status endpoints / re-submit. Professional+ |
| Read bill status / lifecycle | FULL | GET /bills/{bill_id} (status field), GET /bills (filter by status) |
HIGH | Statuses incl. draft, open, overdue, paid, partially-paid, void, pending-approval |
| Read payment status | FULL | GET /bills/{bill_id}/payments, Vendor Payments API |
HIGH | Payment application is queryable per-bill |
| Sync reference data inbound | FULL | GET /chartofaccounts, GET /contacts, GET /reportingtags, GET /settings/taxes, GET /items |
HIGH | Orcha can pull the customer's COA / vendors / cost centers to validate coding before push |
| Event notifications (status changes) | PARTIAL | Outbound webhooks via workflow rules (customer-configured, HMAC-signed) | MEDIUM | Works, but the customer must set up the workflow rule in-app; not API-provisioned. Polling GET /bills is the reliable fallback. |
Zoho Books supports the entire Orcha AP workflow with documented public endpoints:
Create vendor (if new) → push the coded bill (
POST /billswithaccount_idline-item coding + reporting-tag cost centers) → attach the source PDF (POST /bills/{id}/attachment) → submit for approval (POST /bills/{id}/submit) → optionally approve (POST /bills/{id}/approve) → read back status and payment (GET /bills/{id},GET /bills/{id}/payments).
This is materially better than the spend-management tools in the recent research batch, where invoice push was universally impossible (email/UI only). Zoho Books is a true target system, and the integration is a conventional "push to the customer's ledger" pattern.
submit/approve endpoints presuppose the customer's plan has purchase-approval workflows (Professional+). On lower plans, push the bill directly to open status and skip the approval calls.GET /bills filtered by last_modified_time; treat webhooks as an enhancement..eu, .in, etc.).Unlike the spend-management peers, Zoho Books is squarely a destination ledger for Orcha — complementary, not competitive. The API is mature, RESTful, fully documented, included in every plan at no extra cost, and covers every operation Orcha needs.
| Approach | Cost | Complexity | Control | Verdict |
|---|---|---|---|---|
| Direct REST API | $0 (included in customer's plan) | Low–Medium | Full | Recommended — clean REST, complete coverage, no middleware tax |
| iPaaS (Celigo/Workato/Zapier) | $$$/yr | Medium | Partial | Not needed; only as a fallback for customers already standardized on one |
| Unified API (Rutter/Merge/Codat) | $$/yr | Medium | Medium | Consider only if Orcha wants one abstraction across many accounting systems — Zoho Books is a connector in all three, so it would "come for free" in a unified-API strategy |
| Incoming webhooks (Deluge) | $0 | Medium | Low | Not recommended — niche, low-code, fragile |
Phase 1 — Reference-data sync (read). Pull the customer's chart of accounts, vendors, reporting tags (cost centers), and tax codes via GET endpoints. Use these to validate/align Orcha's coding before any write. (Effort: low.)
Phase 2 — Bill push + attachment (write). POST /bills with line-item account_id coding and reporting-tag cost centers, then POST /bills/{id}/attachment with the source PDF. Create vendors on the fly via POST /contacts when no match exists. This delivers the core value. (Effort: medium.)
Phase 3 — Approval workflow. For Professional+ customers, POST /bills/{id}/submit and (where Orcha holds approval authority) POST /bills/{id}/approve. Gate this behind a per-customer capability flag. (Effort: low–medium.)
Phase 4 — Status & payment read-back. Poll GET /bills by last_modified_time for status changes and GET /bills/{id}/payments for settlement; offer webhook-based push-back as an optional upgrade for customers willing to configure the workflow rule. (Effort: low.)
Proceed with a direct REST API integration. Zoho Books is the cleanest target evaluated recently: full workflow coverage, no API licensing cost, EU data residency available, and three independent iPaaS connectors confirming the write surface. The only real dependency to manage is the Professional-plan gate on approval endpoints — surface it in a per-customer capability flag and the rest of the integration is unaffected. Recommend a pilot with one EU (.eu data center) customer on the Professional plan to exercise the full push → attach → approve → read-back loop end-to-end.