> ## Documentation Index
> Fetch the complete documentation index at: https://help.pragmachartered.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Post approved invoices to Zoho Books

> Connect the firm's Zoho Books, bind a client to its Zoho organization and map, then follow approved vouchers into Zoho.

A client's approved vouchers go to one books destination: **Tally (through the connector)** or **Zoho Books**. For a Zoho Books client, Pragma posts each approved voucher directly to the client's Zoho Books organization. No Windows connector is involved: nothing needs to be installed or enrolled, and the client's **Connector** tab plays no part. Clients that post to Tally keep working as described in [Understand the Tally handoff](https://help.pragmachartered.com/invoices/tally-handoff.md).

| Approved voucher | Posts to Zoho Books as |
| - | - |
| Purchase invoice or purchase debit note | A **bill** |
| Sales invoice | An **invoice**, marked as sent |
| Purchase credit note | A **vendor credit**, applied to the original bill when Pragma posted that bill |
| Sales credit note | A **credit note**, applied to the original invoice when Pragma posted that invoice |
| Sales debit note | A customer **debit note** against the original invoice, which must already be posted to Zoho Books |
| Bank payment to a supplier, or receipt from a customer | A **payment made** or **payment received**, applied to the matched bills or invoices (each must already be posted to Zoho Books), or left as an advance when the line is unmatched |
| Any other bank payment | An **expense** paid through the bank account, with no tax |
| Any other bank receipt | A **bank transaction** (deposit) |
| Bank contra | A **bank transaction** (transfer) |
| Hand-keyed voucher | A **manual journal** with the voucher's debit and credit lines |

Setting this up takes three people's permissions:

* **Connect the firm** (Settings → Integrations): **Owner** only. Every staff member can open the page and see the connection's state.
* **Bind a client and edit its Zoho map** (client **Setup → Zoho Books**): an **Owner**, or a **Manager** assigned to the client. An assigned **Preparer** sees the tab read-only.
* **Approve, reject, reopen and send a posting again** (review page): an **Owner**, or a **Manager** assigned to the client.

## Connect the firm's Zoho Books

![Settings Integrations page with the Zoho Books card and its connection status](https://help.pragmachartered.com/images/firm/integrations.png)

The firm has one Zoho Books connection, made by an owner's Zoho user. Every client organization that Zoho user can see can then be bound to a client.

**1. Open Settings → Integrations**

Open **Settings** from the account menu and select **Integrations** under **Firm**. The **Zoho Books** card shows **Not connected**, **Connected** or **Needs reconnecting**. If it says **Zoho Books is not set up for this deployment yet. Contact Pragma Chartered support.**, the connect button stays disabled until support enables it.

**2. Select Connect Zoho Books**

As an **Owner**, select **Connect Zoho Books**. Your browser goes to Zoho; sign in with the Zoho user that has access to your clients' organizations and grant access. Other roles see **Only a firm owner can connect or disconnect Zoho Books.** instead of the button.

**3. Check the result**

Back on **Integrations**, **Zoho Books is connected. Bind each client to its organization on the client's Zoho Books tab.** confirms the connection. The card then lists **Connected by**, **Connected**, **Zoho data centre** and **Clients bound**.

A connection made before notes and bank lines could post to Zoho Books does not grant Pragma access to them: an owner selects **Reconnect Zoho Books** to grant it. Reconnecting keeps every client binding.

If Zoho sends you back with a problem, the page says why:

| Message | What to do |
| - | - |
| **Zoho Books access was not granted, so nothing was connected.** | Select **Connect Zoho Books** again and grant access on Zoho's page. |
| **Zoho did not complete the connection. Try connecting again.** | Start again from **Connect Zoho Books**. |
| **Only a firm owner can connect Zoho Books, and your role changed while you were on Zoho's page.** | Ask a current owner to connect. |
| **Zoho sent the connection back from a server Pragma does not recognise, so it was refused. Try connecting again.** | Start again from this page. |
| **Zoho Books is not set up for this deployment yet. Contact Pragma Chartered support.** | [Submit a support case](https://help.pragmachartered.com/support/submit-a-case.md). |
| **That connection link had expired or was already used. Start the connection again from this page.** | Select **Connect Zoho Books** again rather than reusing an old Zoho tab. |

If the card turns **Needs reconnecting** with **Zoho no longer accepts this connection…**, nothing posts to Zoho Books until an owner selects **Reconnect Zoho Books**. Client bindings are kept; reconnecting does not undo them.

## Bind a client to its Zoho organization

![Client Setup Zoho Books tab with the destination, organization and sync controls and the ledger map](https://help.pragmachartered.com/images/clients/zoho-books.png)

Open **Clients → \[client] → Setup → Zoho Books**. The **Books destination** card shows where the client posts, the bound organization and, under **Masters**, when its Zoho data was last synced (**Never synced** until the first sync). A **Zoho connection invalid** or **Zoho connection revoked** badge means the firm's connection needs an owner (see above). Someone without edit rights sees a **Read only** badge and **The owner or this client's manager edits the Zoho Books map. You can read it here.**

**1. Choose the organization**

Beside **Zoho organization** (**Not bound** at first), select **Choose…**. Pragma lists the organizations the firm's Zoho user can see. Pick the client's organization and select **Bind**, or **Cancel**. **Bound and synced.** means Pragma also read the organization's accounts, taxes and contacts. **Bound, but the sync failed: …** keeps the binding; fix the cause and select **Sync now**. If the list is empty (**The firm's Zoho connection sees no organizations.**), ask the client to invite the connected Zoho user to their organization.

**2. Verify the posting key field**

Pragma posts each voucher with a unique key so that a second attempt updates the same Zoho document instead of creating a duplicate. In the client's Zoho organization, add a unique custom field **Pragma posting key** (`cf_pragma_posting_key`) to Bills, Invoices, Credit Notes, Vendor Payments, Customer Payments and Expenses, then select **Sync now** under **Masters**. The badge changes from **Posting key field not verified** to **Posting key field verified**. Until it is verified, every voucher of this client that posts as a bill, invoice, debit note, credit note, payment or expense is blocked from approval. Vendor credits, bank transactions and manual journals do not use the field: a second attempt finds them by their reference number instead.

**3. Map the ledgers**

The ledger table lists the client's ledgers (the same ledgers as its **Tally map**) with **Ledger**, **Category**, **GSTIN**, **Zoho account or contact** and **Status**. A supplier, payable or customer ledger maps to a Zoho contact of the matching type (vendor or customer); every other ledger, including bank ledgers, maps to a Zoho account. Choose from the list; **Not mapped** clears the mapping. **Status** shows **Mapped**, **Unmapped**, or **Not in Zoho** when the chosen Zoho record was missing or inactive at the last sync. Use **Search ledger or GSTIN** and **Show** (**All ledgers**, **Mapped**, **Unmapped**) to work through the list. An unmapped party ledger still posts when exactly one Zoho contact of its type has the party's GSTIN.

To save time, select **Match contacts by GSTIN…** and confirm **Match contacts**: each unmapped supplier, payable or customer ledger with a GSTIN is mapped to the one Zoho contact of its side with that GSTIN. A GSTIN shared by several Zoho contacts is left for you to choose; existing mappings are not changed.

**4. Map the GST rates**

In **Tax map**, each row is a side (**Purchases** or **Sales**) and a GST **Rate**. Choose the Zoho tax for **Intra-State (CGST + SGST group)** (a tax group) and **Inter-State (IGST)** (a single tax). **Suggest from Zoho taxes** fills each empty rate that has exactly one fitting Zoho tax; check what it filled before approving invoices.

**5. Switch the destination**

Set **Posts to** to **Zoho Books** (offered only once an organization is bound). **Approved vouchers of this client now post to Zoho Books.** confirms it. Choose **Tally (through the connector)** to switch back (**Approved vouchers of this client now post to Tally.**). The destination cannot change while an approved voucher of this client is still on its way to the current books.

Select **Sync now** again whenever accounts, contacts or taxes change in Zoho: Pragma offers only what the last sync read and never creates a Zoho account, contact or tax. **Accounts, taxes and contacts synced from Zoho Books.** confirms a sync; **The last sync failed: …** means the masters stayed as they were. To bind a different organization, select **Change…**. That clears this client's Zoho map, synced data and posting key verification, and is refused while a Zoho posting of the client is still unsettled.

## Review and approve for a Zoho Books client

You review and correct a Zoho Books client's voucher exactly as in [Review and approve an invoice](https://help.pragmachartered.com/invoices/review-and-approve.md). What differs:

* **Preview**: select **Evidence** on the review page. Instead of the Tally envelope, the **Raw evidence** panel shows the Zoho Books payload (for example **Zoho Books bill payload** or **Zoho Books invoice payload**), with the sub total, tax and total Zoho is expected to compute. Zoho computes the tax from the mapped tax ids.
* **Blockers**: **Not postable to Zoho Books yet** lists what stops the voucher, for example **No Zoho vendor is mapped for "…". Map it on the client's Zoho Books tab.**, **The ledger "…" is not mapped to a Zoho account. Map it on the client's Zoho Books tab.**, a missing tax mapping for a rate, a missing number, date or party name, an invoice charging both IGST and CGST/SGST, a voucher posting to more than one purchase or sales ledger, a round-off above ₹1.00, **The client's state is not recorded. Set it on the client's profile.**, a matched bill or invoice not yet posted to Zoho Books, or the unverified posting key field. **Approve** is refused until the list is empty, and on Autopilot the agent does not approve an invoice while the list has anything on it.
* **Credit and debit notes**: a note shows **Original invoice no.** and **Original invoice date**. Pragma uses them to find the original among the client's approved invoices of the same party. A sales debit note is blocked until that original is found and posted to Zoho Books; a credit note posts either way, and is applied to the original only when Pragma posted it.
* **Not yet supported**: reverse-charge vouchers, purchases with TDS recorded, compensation cess, sales through an e-commerce operator, nil-rated, exempt or non-GST sales, refunds (a bank payment to a customer ledger or a receipt from a supplier ledger), and credit notes or vendor credits that need a round-off are blocked with a message telling you to record them in Zoho Books directly.
* **Approve**: the shortcut list says **Approve for Zoho Books**, and approval reports **Approved. The Zoho Books posting is queued.** The item's status reads **Approved**, whatever the client's books.

## Follow the posting

Below the voucher, a **Zoho Books** line names the document (for example **Zoho Books bill**, **Zoho Books payment made** or **Zoho Books manual journal**) and shows the posting's state, the attempt number, the Zoho document number once there is one, any **Next attempt**, and the **Last error**. Once Zoho has the document, **Open in Zoho Books** opens it.

| State | What it means | What to do |
| - | - | - |
| **pending** | Queued; Pragma sends it shortly. | Nothing. |
| **sending** | Pragma is calling Zoho now. | Wait. |
| **retry scheduled** | Zoho was rate limited, or the organization's daily API limit is used up; **Next attempt** shows when it goes again (after a daily limit, 00:05 IST the next day). | Nothing; it resends by itself. |
| **succeeded** | The document is in Zoho, its totals matched, and any follow-up step (marking an invoice sent, applying a credit) is done. | Select **Open in Zoho Books** to see it. For a bill or invoice, **Evidence attached.** means the original file was attached; if **The evidence file could not be attached; attach it in Zoho.** appears, attach it by hand. |
| **needs attention** | Nothing more happens without a person. The **Last error** says why: a blocker found when sending, Zoho refusing the document, the connection disconnected or invalid, Zoho's totals not matching Pragma's, a follow-up step that failed (an invoice left as a draft, a credit not applied), or several Zoho documents with the same reference. | Fix the cause (map, connection or the document in Zoho), then select **Send to Zoho again**. A posting stopped in a follow-up step does not send the document again; it redoes only what is left. |
| **outcome unknown** | Zoho did not answer clearly, so the document may or may not exist. | Check Zoho first. **Send to Zoho again** never creates a second document: it updates the same one, overwriting edits made to it in Zoho, or, for a vendor credit, bank transaction or manual journal, finds the one already there by its reference. |
| **cancelled** | The item was rejected or reopened before anything was written. | Nothing. |

**Send to Zoho again** appears only for **needs attention** and **outcome unknown**, while the item is still approved, for an Owner or assigned Manager; it reports **Sent to Zoho Books again.** A succeeded posting is never sent again.

While the posting is **pending**, **retry scheduled** or **needs attention**, you can still **Reject** or **Reopen** the item; the posting is cancelled. Once it is **sending**, **outcome unknown** or **succeeded**, the review is locked because Zoho may already hold the document. To change a posted voucher, correct it in Zoho Books.

## Disconnect Zoho Books

An **Owner** selects **Disconnect** on **Settings → Integrations** and confirms **Disconnect** in **Disconnect Zoho Books?**. Pragma's access is revoked, postings that are **pending** or **retry scheduled** move to **needs attention**, and nothing posts until an owner reconnects. Client bindings and maps are kept.

* **Zoho Books is disconnected and the access was revoked at Zoho.** Done.
* **Zoho Books is disconnected. Zoho did not confirm the revocation; remove Pragma under Connected Apps in the Zoho account to be sure.** Do that in Zoho.
* **N waiting vouchers need attention and will not post until Zoho Books is reconnected.** After reconnecting, open each one and select **Send to Zoho again**.

## When an action is refused

* **The firm has not connected Zoho Books. A firm owner can connect it in Settings → Integrations.** Connect first.
* **The firm's Zoho Books connection no longer works: access was revoked or the password changed. A firm owner must reconnect Zoho Books in Settings → Integrations.**
* **Zoho Books is not set up for this deployment yet. Contact Pragma Chartered support.**
* **The firm's Zoho account cannot see that organization. Ask the client to invite the connected Zoho user, then sync again.**
* **This client is not bound to a Zoho Books organization. Choose its organization on the client's Zoho Books tab first.**
* **That Zoho mapping is not valid: …** The detail names the problem, for example a party ledger mapped to an account, a tax of the wrong rate, a single tax on an intra-State rate, or a record no longer in the synced data. Select **Sync now** and choose again.
* **… approved vouchers of this client are still on the way to the current books. Let them post, or reopen them, before changing where this client posts.** Settle or reopen them, then change **Posts to** or the organization.
* **This voucher cannot go to Zoho Books yet: …** The blockers listed above; fix them and save a revision.
* **This posting is … so it cannot be sent again. Reload to see where it stands.** Someone else already resent it, or it has settled.
* **Zoho Books did not complete the request: … Nothing was changed in Pragma; try again in a few minutes.** Zoho was unreachable while listing or binding organizations.
* **Too many attempts. Wait a moment and try again.** (or **Too many attempts. Try again in N seconds.**) Zoho, or Pragma's own limit on Zoho calls for the organization, refused the request; wait and retry.
* **This voucher has already gone to the books…** The posting is locked; see above.

> [card] Still stuck?
>
> [Open a case](https://app.pragmachartered.com/support) from **Help & support** in Pragma, or [book a walkthrough](https://help.pragmachartered.com/support/book-a-walkthrough.md) and the team will show you around on a call. Can't sign in? [Contact support](https://app.pragmachartered.com/contact-support).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.