# Zoho Books

> Online accounting. Create contacts, items, invoices and estimates, email invoices, record customer payments and expenses, and read your chart of accounts.

App · Accounting & Finance · 20 actions. Web page: https://docs.lodol.com/docs/integrations/zoho-books

## Actions

### Create a contact

Create a customer or vendor. The email, name and phone become its primary contact person.

**Inputs**

- Display name (`contact_name`, text, required): The contact's display name. Must be unique.
- Type (`contact_type`, text): Optional. Customer or vendor. Defaults to customer. One of: `customer`, `vendor`. Default: `customer`.
- Business or individual (`customer_sub_type`, text): Optional. One of: `business`, `individual`.
- Company name (`company_name`, text): Optional.
- First name (`first_name`, text): Optional. The primary contact person's first name.
- Last name (`last_name`, text): Optional. The primary contact person's last name.
- Email (`email`, text): Optional. The primary contact person's email; invoices and estimates are emailed here.
- Phone (`phone`, text): Optional. The primary contact person's phone.
- Website (`website`, text): Optional.
- Billing street (`address`, text): Optional. Street address for billing.
- Billing city (`city`, text): Optional.
- Billing state or region (`state`, text): Optional.
- Billing postal code (`zip_code`, text): Optional.
- Billing country (`country`, text): Optional.
- Notes (`notes`, text): Optional. Internal notes about the contact.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books contact.

- `billing_address` (object): A postal address.
- `company_name` (text): The company name.
- `contact_id` (text): The contact's id.
- `contact_name` (text): The display name.
- `contact_persons` (list): The contact's people.
- `contact_type` (text): customer or vendor.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The contact's currency, e.g. USD.
- `customer_sub_type` (text): business or individual.
- `email` (text): The primary contact person's email.
- `last_modified_time` (text): When it was last changed.
- `notes` (text): Internal notes.
- `outstanding_receivable_amount` (number): How much the customer owes.
- `payment_terms` (number): Payment terms in days.
- `payment_terms_label` (text): The payment terms' name.
- `phone` (text): The primary contact person's phone.
- `shipping_address` (object): A postal address.
- `status` (text): active or inactive.
- `unused_credits_receivable_amount` (number): Unused credits.
- `website` (text): The website.

**Example output**

```json
{
  "company_name": "Bowman & Co",
  "contact_id": "460000000026049",
  "contact_name": "Bowman & Co",
  "contact_type": "customer",
  "created_time": "2026-09-01T10:15:00-0700",
  "currency_code": "USD",
  "email": "billing@bowman.example",
  "last_modified_time": "2026-09-01T10:15:00-0700",
  "outstanding_receivable_amount": 250,
  "status": "active"
}
```

### Create an estimate

Create an estimate (quote) for a customer, as a draft or emailed at once.

**Inputs**

- Customer ID (`customer_id`, text, required): The customer's contact id, from 'List contacts' or 'Create a contact'.
- Item ID (`item_id`, text): Optional. The item to quote, from 'List items'. Give this or a Line name.
- Line name (`item_name`, text): Optional. The line's name when it is not an item.
- Quantity (`quantity`, number): Optional. How many. Defaults to 1.
- Unit price (`rate`, number): Optional. The price of one. Defaults to the item's own rate. At least 0.
- Line description (`description`, text): Optional. Text shown on the line.
- Tax (`tax_id`, text): Optional. The tax to apply.
- Line items (advanced) (`line_items`, list): Optional. A list of lines for a document with several, e.g. [{"item_id": "460000000017088", "quantity": 2, "rate": 150}]. Each line takes item_id, name, description, quantity, rate, discount and tax_id. When given it replaces the single-line fields above.
- Estimate date (`date`, date): Optional. Defaults to today.
- Expiry date (`expiry_date`, date): Optional. The last day the estimate is valid.
- Reference number (`reference_number`, text): Optional. Your own reference, such as a PO number.
- Notes (`notes`, text): Optional. Notes shown to the customer on the document.
- Terms & conditions (`terms`, text): Optional. Terms shown on the document.
- Email it to the customer now (`send`, true/false): Optional. Email the document to the customer's contact persons as it is created. Off leaves it a draft. Default: `false`.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books estimate.

- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The currency, e.g. USD.
- `customer_id` (text): The customer's contact id.
- `customer_name` (text): The customer's name.
- `date` (text): The estimate date (YYYY-MM-DD).
- `estimate_id` (text): The estimate's id.
- `estimate_number` (text): The estimate number, e.g. EST-000017.
- `expiry_date` (text): The last day it is valid (YYYY-MM-DD).
- `last_modified_time` (text): When it was last changed.
- `line_items` (list): The estimate's lines.
- `notes` (text): Notes shown to the customer.
- `reference_number` (text): Your reference.
- `status` (text): draft, sent, invoiced, accepted, declined or expired.
- `sub_total` (number): The total before tax.
- `tax_total` (number): The tax.
- `terms` (text): Terms and conditions.
- `total` (number): The estimate total.

**Example output**

```json
{
  "customer_id": "460000000026049",
  "customer_name": "Bowman & Co",
  "date": "2026-09-30",
  "estimate_id": "460000000030041",
  "estimate_number": "EST-000017",
  "expiry_date": "2026-10-30",
  "status": "draft",
  "total": 360
}
```

### Create an invoice

Create an invoice for a customer, as a draft or emailed at once. Every line needs an item.

**Inputs**

- Customer ID (`customer_id`, text, required): The customer's contact id, from 'List contacts' or 'Create a contact'.
- Item ID (`item_id`, text): The item to bill, from 'List items' or 'Create an item'. Required unless you give Line items.
- Quantity (`quantity`, number): Optional. How many. Defaults to 1.
- Unit price (`rate`, number): Optional. The price of one. Defaults to the item's own rate. At least 0.
- Line description (`description`, text): Optional. Text shown on the line.
- Tax (`tax_id`, text): Optional. The tax to apply.
- Line items (advanced) (`line_items`, list): Optional. A list of lines for a document with several, e.g. [{"item_id": "460000000017088", "quantity": 2, "rate": 150}]. Each line takes item_id, name, description, quantity, rate, discount and tax_id. When given it replaces the single-line fields above.
- Invoice date (`date`, date): Optional. Defaults to today.
- Due date (`due_date`, date): Optional. Defaults to the customer's payment terms.
- Reference number (`reference_number`, text): Optional. Your own reference, such as a PO number.
- Notes (`notes`, text): Optional. Notes shown to the customer on the document.
- Terms & conditions (`terms`, text): Optional. Terms shown on the document.
- Email it to the customer now (`send`, true/false): Optional. Email the document to the customer's contact persons as it is created. Off leaves it a draft. Default: `false`.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books invoice.

- `balance` (number): The amount still owed.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The currency, e.g. USD.
- `customer_id` (text): The customer's contact id.
- `customer_name` (text): The customer's name.
- `date` (text): The invoice date (YYYY-MM-DD).
- `due_date` (text): The due date (YYYY-MM-DD).
- `invoice_id` (text): The invoice's id.
- `invoice_number` (text): The invoice number, e.g. INV-000042.
- `invoice_url` (text): The customer's link to view the invoice.
- `last_modified_time` (text): When it was last changed.
- `line_items` (list): The invoice's lines.
- `notes` (text): Notes shown to the customer.
- `payment_made` (number): Payments applied so far.
- `reference_number` (text): Your reference.
- `status` (text): draft, sent, viewed, overdue, partially_paid, paid or void.
- `sub_total` (number): The total before tax.
- `tax_total` (number): The tax.
- `terms` (text): Terms and conditions.
- `total` (number): The invoice total.

**Example output**

```json
{
  "balance": 240,
  "currency_code": "USD",
  "customer_id": "460000000026049",
  "customer_name": "Bowman & Co",
  "date": "2026-09-30",
  "due_date": "2026-10-15",
  "invoice_id": "460000000028192",
  "invoice_number": "INV-000042",
  "line_items": [
    {
      "item_id": "460000000017088",
      "name": "Consulting hour",
      "quantity": 2,
      "rate": 120
    }
  ],
  "status": "draft",
  "total": 240
}
```

### Create an item

Create a product or service to sell on invoices and estimates.

**Inputs**

- Name (`name`, text, required): The item's name. Must be unique.
- Selling price (`rate`, number, required): The price of one. At least 0.
- Description (`description`, text): Optional. Shown on invoice lines.
- SKU (`sku`, text): Optional. Your stock-keeping code. Must be unique.
- Tax (`tax_id`, text): Optional. The tax to apply.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books item.

- `description` (text): The sales description.
- `item_id` (text): The item's id.
- `name` (text): The item's name.
- `rate` (number): The selling price.
- `sku` (text): The SKU.
- `status` (text): active or inactive.
- `tax_id` (text): The default tax's id.
- `tax_name` (text): The default tax's name.
- `tax_percentage` (number): The default tax's rate.
- `unit` (text): The unit, e.g. hrs.

**Example output**

```json
{
  "description": "One hour of consulting",
  "item_id": "460000000017088",
  "name": "Consulting hour",
  "rate": 120,
  "sku": "CONS-1H",
  "status": "active"
}
```

### Email an invoice

Email an invoice to the addresses you give, from Zoho Books. A draft is marked sent.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's id, from 'List invoices', or its address in Zoho Books (books.zoho.com/app/.../invoices/<id>).
- To (`to_mail_ids`, list, required): One or more email addresses, separated by commas.
- Cc (`cc_mail_ids`, list): Optional. Email addresses to copy, separated by commas.
- Subject (`subject`, text): Optional. Defaults to your Zoho Books email template.
- Body (`body`, text): Optional. Defaults to your Zoho Books email template.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: The emailed invoice.

- `emailed_to` (list): The addresses it was sent to.
- `invoice_id` (text): The invoice's id.
- `message` (text): Zoho's confirmation.

**Example output**

```json
{
  "emailed_to": [
    "billing@bowman.example"
  ],
  "invoice_id": "460000000028192",
  "message": "Your invoice has been sent."
}
```

### Get a contact

Get a contact's details, addresses, contact persons and outstanding balance.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's id, from 'List contacts', or its address in Zoho Books (books.zoho.com/app/.../contacts/<id>).
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books contact.

- `billing_address` (object): A postal address.
- `company_name` (text): The company name.
- `contact_id` (text): The contact's id.
- `contact_name` (text): The display name.
- `contact_persons` (list): The contact's people.
- `contact_type` (text): customer or vendor.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The contact's currency, e.g. USD.
- `customer_sub_type` (text): business or individual.
- `email` (text): The primary contact person's email.
- `last_modified_time` (text): When it was last changed.
- `notes` (text): Internal notes.
- `outstanding_receivable_amount` (number): How much the customer owes.
- `payment_terms` (number): Payment terms in days.
- `payment_terms_label` (text): The payment terms' name.
- `phone` (text): The primary contact person's phone.
- `shipping_address` (object): A postal address.
- `status` (text): active or inactive.
- `unused_credits_receivable_amount` (number): Unused credits.
- `website` (text): The website.

**Example output**

```json
{
  "company_name": "Bowman & Co",
  "contact_id": "460000000026049",
  "contact_name": "Bowman & Co",
  "contact_type": "customer",
  "created_time": "2026-09-01T10:15:00-0700",
  "currency_code": "USD",
  "email": "billing@bowman.example",
  "last_modified_time": "2026-09-01T10:15:00-0700",
  "outstanding_receivable_amount": 250,
  "status": "active"
}
```

### Get an invoice

Get an invoice with its lines, totals, balance and status.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's id, from 'List invoices', or its address in Zoho Books (books.zoho.com/app/.../invoices/<id>).
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books invoice.

- `balance` (number): The amount still owed.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The currency, e.g. USD.
- `customer_id` (text): The customer's contact id.
- `customer_name` (text): The customer's name.
- `date` (text): The invoice date (YYYY-MM-DD).
- `due_date` (text): The due date (YYYY-MM-DD).
- `invoice_id` (text): The invoice's id.
- `invoice_number` (text): The invoice number, e.g. INV-000042.
- `invoice_url` (text): The customer's link to view the invoice.
- `last_modified_time` (text): When it was last changed.
- `line_items` (list): The invoice's lines.
- `notes` (text): Notes shown to the customer.
- `payment_made` (number): Payments applied so far.
- `reference_number` (text): Your reference.
- `status` (text): draft, sent, viewed, overdue, partially_paid, paid or void.
- `sub_total` (number): The total before tax.
- `tax_total` (number): The tax.
- `terms` (text): Terms and conditions.
- `total` (number): The invoice total.

**Example output**

```json
{
  "balance": 240,
  "currency_code": "USD",
  "customer_id": "460000000026049",
  "customer_name": "Bowman & Co",
  "date": "2026-09-30",
  "due_date": "2026-10-15",
  "invoice_id": "460000000028192",
  "invoice_number": "INV-000042",
  "line_items": [
    {
      "item_id": "460000000017088",
      "name": "Consulting hour",
      "quantity": 2,
      "rate": 120
    }
  ],
  "status": "draft",
  "total": 240
}
```

### List chart of accounts

List the organization's accounts, with their ids, types and optionally balances.

**Inputs**

- Show (`filter_by`, text): Optional. A group of accounts. One of: `AccountType.All` (All), `AccountType.Active` (Active), `AccountType.Inactive` (Inactive), `AccountType.Asset` (Asset), `AccountType.Liability` (Liability), `AccountType.Equity` (Equity), `AccountType.Income` (Income), `AccountType.Expense` (Expense).
- Account types (`account_types`, list): Optional. Only these exact types of account. One or more of: `cash`, `bank`, `credit_card` (Credit card), `accounts_receivable` (Accounts receivable), `other_current_asset` (Other current asset), `fixed_asset` (Fixed asset), `other_asset` (Other asset), `accounts_payable` (Accounts payable), `other_current_liability` (Other current liability), `long_term_liability` (Long term liability), and 6 more.
- Search (`search_text`, text): Optional. Only records matching this text.
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `account_name` (Account), `account_type` (Account type), `account_code` (Account code).
- Include balances (`show_balance`, true/false): Optional. Also return each account's current balance. Default: `false`.
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `chartofaccounts` (list): The accounts.
- `count` (number): How many accounts are on this page.
- `has_more_page` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "chartofaccounts": [
    {
      "account_code": "",
      "account_id": "460000000000403",
      "account_name": "Office Supplies",
      "account_type": "expense",
      "is_active": true
    }
  ],
  "count": 1,
  "has_more_page": false,
  "page": 1,
  "per_page": 200
}
```

### List contacts

List customers and vendors, optionally filtered and searched.

**Inputs**

- Type (`contact_type`, text): Optional. Only customers, or only vendors. One of: `customer`, `vendor`.
- Search (`search_text`, text): Optional. Only records matching this text.
- Show (`filter_by`, text): Optional. Which contacts to include. One of: `Status.All` (All), `Status.Active` (Active), `Status.Inactive` (Inactive), `Invoice.OverDue` (With overdue invoices), `Invoice.Unpaid` (With unpaid invoices).
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `contact_name` (Name), `first_name` (First name), `last_name` (Last name), `email`, `outstanding_receivable_amount` (Amount owed), `created_time` (Created), `last_modified_time` (Last modified).
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `contacts` (list): The contacts.
- `count` (number): How many contacts are on this page.
- `has_more_page` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "contacts": [
    {
      "company_name": "Bowman & Co",
      "contact_id": "460000000026049",
      "contact_name": "Bowman & Co",
      "contact_type": "customer",
      "created_time": "2026-09-01T10:15:00-0700",
      "currency_code": "USD",
      "email": "billing@bowman.example",
      "last_modified_time": "2026-09-01T10:15:00-0700",
      "outstanding_receivable_amount": 250,
      "status": "active"
    }
  ],
  "count": 1,
  "has_more_page": false,
  "page": 1,
  "per_page": 200
}
```

### List customer payments

List payments received from customers.

**Inputs**

- Customer ID (`customer_id`, text): Optional. Only this customer's records (a contact id).
- Payment mode (`payment_mode`, text): Optional. Only payments made this way. One of: `cash`, `check`, `creditcard` (Credit card), `banktransfer` (Bank transfer), `bankremittance` (Bank remittance), `others` (Other).
- Search (`search_text`, text): Optional. Only records matching this text.
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `count` (number): How many customer payments are on this page.
- `customer_payments` (list): The customer payments.
- `has_more_page` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "count": 1,
  "customer_payments": [
    {
      "amount": 240,
      "customer_id": "460000000026049",
      "customer_name": "Bowman & Co",
      "date": "2026-09-30",
      "invoices": [
        {
          "amount_applied": 240,
          "invoice_id": "460000000028192"
        }
      ],
      "payment_id": "460000000031001",
      "payment_mode": "banktransfer",
      "payment_number": "7"
    }
  ],
  "has_more_page": false,
  "page": 1,
  "per_page": 200
}
```

### List estimates

List estimates (quotes) by status or customer.

**Inputs**

- Status (`status`, text): Optional. Only estimates with this status. One of: `draft`, `sent`, `invoiced`, `accepted`, `declined`, `expired`.
- Customer ID (`customer_id`, text): Optional. Only this customer's records (a contact id).
- Search (`search_text`, text): Optional. Only records matching this text.
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `customer_name` (Customer), `estimate_number` (Estimate number), `date`, `total`, `created_time` (Created), `last_modified_time` (Last modified).
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `count` (number): How many estimates are on this page.
- `estimates` (list): The estimates.
- `has_more_page` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "count": 1,
  "estimates": [
    {
      "customer_id": "460000000026049",
      "customer_name": "Bowman & Co",
      "date": "2026-09-30",
      "estimate_id": "460000000030041",
      "estimate_number": "EST-000017",
      "expiry_date": "2026-10-30",
      "status": "draft",
      "total": 360
    }
  ],
  "has_more_page": false,
  "page": 1,
  "per_page": 200
}
```

### List expenses

List recorded expenses by status, customer or date.

**Inputs**

- Status (`status`, text): Optional. Only expenses with this status. One of: `unbilled`, `invoiced`, `reimbursed`, `non-billable`, `billable`.
- Customer ID (`customer_id`, text): Optional. Only this customer's records (a contact id).
- Search (`search_text`, text): Optional. Only records matching this text.
- From date (`date_start`, date): Optional. Only records dated on or after this day.
- To date (`date_end`, date): Optional. Only records dated on or before this day.
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `date`, `account_name` (Account), `total`, `bcy_total` (Total (base currency)), `reference_number` (Reference), `customer_name` (Customer), `created_time` (Created).
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `count` (number): How many expenses are on this page.
- `expenses` (list): The expenses.
- `has_more_page` (true/false): Whether another page is available.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "count": 1,
  "expenses": [
    {
      "account_id": "460000000000403",
      "account_name": "Office Supplies",
      "amount": 45.5,
      "date": "2026-09-30",
      "description": "Printer paper",
      "expense_id": "460000000032005",
      "paid_through_account_name": "Petty Cash",
      "status": "nonbillable",
      "total": 45.5
    }
  ],
  "has_more_page": false,
  "page": 1,
  "per_page": 200
}
```

### List invoices

List invoices by status, customer or date.

**Inputs**

- Status (`status`, text): Optional. Only invoices with this status. One of: `draft`, `sent`, `viewed`, `overdue`, `unpaid`, `partially_paid` (Partially paid), `paid`, `void`.
- Customer ID (`customer_id`, text): Optional. Only this customer's records (a contact id).
- Search (`search_text`, text): Optional. Only records matching this text.
- From date (`date_start`, date): Optional. Only records dated on or after this day.
- To date (`date_end`, date): Optional. Only records dated on or before this day.
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `customer_name` (Customer), `invoice_number` (Invoice number), `date`, `due_date` (Due date), `total`, `balance`, `created_time` (Created).
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `count` (number): How many invoices are on this page.
- `has_more_page` (true/false): Whether another page is available.
- `invoices` (list): The invoices.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "count": 1,
  "has_more_page": false,
  "invoices": [
    {
      "balance": 240,
      "currency_code": "USD",
      "customer_id": "460000000026049",
      "customer_name": "Bowman & Co",
      "date": "2026-09-30",
      "due_date": "2026-10-15",
      "invoice_id": "460000000028192",
      "invoice_number": "INV-000042",
      "line_items": [
        {
          "item_id": "460000000017088",
          "name": "Consulting hour",
          "quantity": 2,
          "rate": 120
        }
      ],
      "status": "draft",
      "total": 240
    }
  ],
  "page": 1,
  "per_page": 200
}
```

### List items

List the products and services you sell.

**Inputs**

- Search (`search_text`, text): Optional. Only records matching this text.
- Show (`filter_by`, text): Optional. Active, inactive or all items. One of: `Status.All` (All), `Status.Active` (Active), `Status.Inactive` (Inactive).
- Sort by (`sort_column`, text): Optional. The field to sort by. One of: `name`, `rate`, `tax_name` (Tax).
- Page (`page`, number): Optional. Which page of results to return, starting at 1. At least 1.
- Page size (`per_page`, number): Optional. How many to return per page, 1 to 200. Zoho's default is 200. From 1 to 200.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**

- `count` (number): How many items are on this page.
- `has_more_page` (true/false): Whether another page is available.
- `items` (list): The items.
- `page` (number): This page's number.
- `per_page` (number): The page size.

**Example output**

```json
{
  "count": 1,
  "has_more_page": false,
  "items": [
    {
      "description": "One hour of consulting",
      "item_id": "460000000017088",
      "name": "Consulting hour",
      "rate": 120,
      "sku": "CONS-1H",
      "status": "active"
    }
  ],
  "page": 1,
  "per_page": 200
}
```

### Mark an estimate as accepted

Record that the customer accepted an estimate. A draft is marked sent first.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's id, from 'List estimates' or 'Create an estimate'.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: The estimate whose status changed.

- `estimate_id` (text): The estimate's id.
- `message` (text): Zoho's confirmation.
- `status` (text): The new status.

**Example output**

```json
{
  "estimate_id": "460000000030041",
  "message": "Estimate status has been changed to Accepted",
  "status": "accepted"
}
```

### Mark an invoice as sent

Mark a draft invoice as sent without emailing it, so it counts as owed and can take payments.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's id, from 'List invoices', or its address in Zoho Books (books.zoho.com/app/.../invoices/<id>).
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: The invoice whose status changed.

- `invoice_id` (text): The invoice's id.
- `message` (text): Zoho's confirmation.
- `status` (text): The new status.

**Example output**

```json
{
  "invoice_id": "460000000028192",
  "message": "Invoice status has been changed to Sent.",
  "status": "sent"
}
```

### Record a customer payment

Record a payment from a customer and apply it to one of their invoices. The invoice must not be a draft.

**Inputs**

- Customer ID (`customer_id`, text, required): The customer's contact id, from 'List contacts' or 'Create a contact'.
- Invoice ID (`invoice_id`, text, required): The invoice the payment pays, from 'List invoices'.
- Amount (`amount`, number, required): The amount received. At least 0.
- Payment mode (`payment_mode`, text, required): How the customer paid. One of: `cash`, `check`, `creditcard` (Credit card), `banktransfer` (Bank transfer), `bankremittance` (Bank remittance), `others` (Other).
- Payment date (`date`, date): Optional. Defaults to today.
- Amount applied to the invoice (`amount_applied`, number): Optional. Defaults to the whole amount; any rest stays as the customer's credit. At least 0.
- Reference number (`reference_number`, text): Optional. Your own reference, such as a PO number.
- Description (`description`, text): Optional. A note on the payment.
- Deposit to (`account_id`, text): Optional. The cash or bank account the money went into. Defaults to Undeposited Funds.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books customer payment.

- `amount` (number): The amount received.
- `customer_id` (text): The customer's contact id.
- `customer_name` (text): The customer's name.
- `date` (text): The payment date (YYYY-MM-DD).
- `description` (text): The note on the payment.
- `invoices` (list): The invoices it was applied to.
- `payment_id` (text): The payment's id.
- `payment_mode` (text): How the customer paid.
- `payment_number` (text): The payment number.
- `reference_number` (text): Your reference.
- `unused_amount` (number): The part not applied to invoices.

**Example output**

```json
{
  "amount": 240,
  "customer_id": "460000000026049",
  "customer_name": "Bowman & Co",
  "date": "2026-09-30",
  "invoices": [
    {
      "amount_applied": 240,
      "invoice_id": "460000000028192"
    }
  ],
  "payment_id": "460000000031001",
  "payment_mode": "banktransfer",
  "payment_number": "7"
}
```

### Record an expense

Record money spent, against an expense account.

**Inputs**

- Expense account (`account_id`, text, required): What the money was spent on.
- Paid through (`paid_through_account_id`, text, required): The cash, bank or card account it was paid from.
- Amount (`amount`, number, required): The amount spent. At least 0.
- Expense date (`date`, date): Optional. Defaults to today.
- Description (`description`, text): Optional. Up to 100 characters.
- Reference number (`reference_number`, text): Optional. Your own reference, such as a PO number.
- Customer ID (`customer_id`, text): Optional. The customer the expense was for.
- Billable to the customer (`is_billable`, true/false): Optional. Needs a customer. Default: `false`.
- Tax (`tax_id`, text): Optional. The tax to apply.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books expense.

- `account_id` (text): The expense account's id.
- `account_name` (text): The expense account's name.
- `amount` (number): The amount.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `customer_id` (text): The customer's contact id.
- `customer_name` (text): The customer's name.
- `date` (text): The expense date (YYYY-MM-DD).
- `description` (text): The description.
- `expense_id` (text): The expense's id.
- `is_billable` (true/false): Whether it can be billed to the customer.
- `last_modified_time` (text): When it was last changed.
- `paid_through_account_name` (text): The account it was paid from.
- `reference_number` (text): Your reference.
- `status` (text): unbilled, invoiced, reimbursed, nonbillable or billable.
- `tax_amount` (number): The tax.
- `tax_id` (text): The tax's id.
- `total` (number): The total, with tax.

**Example output**

```json
{
  "account_id": "460000000000403",
  "account_name": "Office Supplies",
  "amount": 45.5,
  "date": "2026-09-30",
  "description": "Printer paper",
  "expense_id": "460000000032005",
  "paid_through_account_name": "Petty Cash",
  "status": "nonbillable",
  "total": 45.5
}
```

### Update a contact

Change a contact's name, company, website, billing address or notes. Blank fields keep their current value.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's id, from 'List contacts', or its address in Zoho Books (books.zoho.com/app/.../contacts/<id>).
- Display name (`contact_name`, text): Optional. A new display name.
- Type (`contact_type`, text): Optional. Change to customer or vendor. One of: `customer`, `vendor`.
- Company name (`company_name`, text): Optional.
- Website (`website`, text): Optional.
- Billing street (`address`, text): Optional. Street address for billing.
- Billing city (`city`, text): Optional.
- Billing state or region (`state`, text): Optional.
- Billing postal code (`zip_code`, text): Optional.
- Billing country (`country`, text): Optional.
- Notes (`notes`, text): Optional. Replaces the internal notes.
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: A Zoho Books contact.

- `billing_address` (object): A postal address.
- `company_name` (text): The company name.
- `contact_id` (text): The contact's id.
- `contact_name` (text): The display name.
- `contact_persons` (list): The contact's people.
- `contact_type` (text): customer or vendor.
- `created_time` (text): When it was created, e.g. 2026-09-01T10:15:00-0700.
- `currency_code` (text): The contact's currency, e.g. USD.
- `customer_sub_type` (text): business or individual.
- `email` (text): The primary contact person's email.
- `last_modified_time` (text): When it was last changed.
- `notes` (text): Internal notes.
- `outstanding_receivable_amount` (number): How much the customer owes.
- `payment_terms` (number): Payment terms in days.
- `payment_terms_label` (text): The payment terms' name.
- `phone` (text): The primary contact person's phone.
- `shipping_address` (object): A postal address.
- `status` (text): active or inactive.
- `unused_credits_receivable_amount` (number): Unused credits.
- `website` (text): The website.

**Example output**

```json
{
  "company_name": "Bowman & Co",
  "contact_id": "460000000026049",
  "contact_name": "Bowman & Co",
  "contact_type": "customer",
  "created_time": "2026-09-01T10:15:00-0700",
  "currency_code": "USD",
  "email": "billing@bowman.example",
  "last_modified_time": "2026-09-01T10:15:00-0700",
  "outstanding_receivable_amount": 250,
  "status": "active"
}
```

### Void an invoice

Void an invoice, cancelling it while keeping it on record. Zoho refuses while payments are applied to it.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's id, from 'List invoices', or its address in Zoho Books (books.zoho.com/app/.../invoices/<id>).
- Organization (`organization_id`, text): Optional. The Zoho Books organization to use. Leave blank for your default organization.

**Outputs**: The invoice whose status changed.

- `invoice_id` (text): The invoice's id.
- `message` (text): Zoho's confirmation.
- `status` (text): The new status.

**Example output**

```json
{
  "invoice_id": "460000000028192",
  "message": "Invoice status has been changed to Void.",
  "status": "void"
}
```
