Kaizen #9 - Handling Product Line Items in the Inventory Modules #API

Kaizen #9 - Handling Product Line Items in the Inventory Modules #API

Hello everyone!

Welcome back to another post in the Kaizen series!
This week, we will discuss handling product line items associated with the inventory modules—Quotes, Invoices, Purchase Orders, and Sales Orders.

What is a product line item?

On the Quote, Invoice, Purchase Order, Sales Order create or edit page, you add individual products in the Product Details section. This section also contains other details like the List Price, Quantity, Amount, Discount, and Tax. Every product and the corresponding details are called product line items.

In this post, we will discuss 
  1. Adding product line items while inserting a quote (through the Insert Records API)
  2. Updating a quote by adding another product line item (through the Update Specific Records API)

The JSON input is similar while adding/updating an invoice, purchase order, and sales order.

1. Adding Product Line Items to a Quote

While adding a product to a quote you can,
      a. Select a price book to associate with the product
      b. Specify a different list price for the product

1. a. Selecting a price book to associate with the product
To associate a price book with the product, you must pass the ID of that price book in the input.

What happens when you pass the Price Book's ID?
  • The discount on the product is automatically applied based on the range you specified in the price book.
  • The cumulative tax (specified for the product) is automatically calculated based on the amount (after the discount).
  • The List Price of the product specified in the associated price book is automatically taken for calculating the amount.

The sample input for Product_Details is as follows.

"Product_Details": [
    {
      "product": {
        "id": "3652397000000491147"
      },
      "quantity": 100,
      "product_description": "product_description",
      "book": "3652397000000616007"
    }
  ]

The following table gives information about each key in the Product_Details JSON Array.
Key
Data Type
Description
product
JSON Object
The ID of the product in the quote.
quantity
Number
The number of units of the product the quote is generated for. Accepts only positive integer values. The amount is calculated based on this number and the price for each unit.
book
String
The ID of the Price Book you have associated with the product.
product_description
String
Description of the product.

Here is a screenshot from the UI.


1.b. Specifying a different list price for the product
When the product does not have an associated price book or you want to give a different list price, you must specify the list price and the discount in the Product_Details array. 
Otherwise, the system enters the value for the discount as 0 and takes the list price you specified while creating that product.
The sample input for the Product_Details JSON array is as follows.
"Product_Details": [
    {
      "product": {
        "id": "3652397000000491147"
      },
      "quantity": 150,
      "product_description": "product_description",
      "Discount": 1000,
      "list_price": 1100,
      "line_tax": [
        {
          "percentage": 1,
          "name": "VAT"
        }
      ]
    }
  ]

The following table gives information about each key in the Product_Details JSON Array.

Key
Data Type
Description
Product
JSON Object
ID of the product the quote generated for.
quantity
Number
The number of units of the product the quote is generated for. Accepts only positive integer values.
Discount
Currency
The discount, in decimals, you want to apply for the product. Accepts up to 16 digits before the decimal, and up to 9 digits after the decimal. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in the UI.
product_description
String
Description of the product.
list_price
Currency
The list price of the product.
line_tax
JSON Array
Contains the percentage and the name of the tax associated with the product.
percentage
Percent
The percentage of tax applied on the product. Accepts only numeric values, up to 5 digits.
name
String
The name of the tax applied on the product.

As mentioned earlier, the Product Details section encompasses the taxes applied for each product and the aggregate tax applied to the Sub Total of the quote or any other inventory module.

You can specify the different taxes you want to apply for your products in the CRM UI.
You can add them under Setup > Customization > Modules and Fields > Products as shown in the below image.


You can use these configured values as inputs in the API.

Adding taxes to the product while creating/updating an inventory module
When you add a product to an inventory module, to apply the taxes to that product, you must specify the tax details in the line_tax JSON array inside Product_Details.

You must specify the percentage and the name of the tax associated with the product as JSON objects.
You cannot specify the amount as the system calculates it automatically based on the quantity.

Example:

"Product_Details": [
    {
      "product": {
        "id": "3652397000001363004"
      },
      "quantity": 100,
      "Discount": 20.1,
      "product_description": "product_description",
      "line_tax": [
        {
          "percentage": 10,
          "name": "Sales Tax"
        },
        {
          "percentage": 1,
          "name": "Vat"
        }
      ]
    }
  ]

Adding aggregate tax to the quote or other inventory modules
This is the tax that you want to apply to the Sub Total of the line items while generating the invoice, quote, sales order, or purchase order. The taxes you specify in the $line_tax key are added to the ones already applied to the product through the line_tax key.
The $line_tax key is present outside the Product_Details JSON array.

The structure for this JSON array is as follows.

"Product_Details": [
    {
      "product": {
        "id": "3652397000001363004"
      },
      "quantity": 100,
      "product_description": "product_description",
      "line_tax": [
        {
          "percentage": 10,
          "name": "Sales Tax"
        },
        {
          "percentage": 1,
          "name": "Vat"
        }
      ]
    }
  ],
  "$line_tax": [
    {
      "percentage": 1.5,
      "name": "Common Tax",
      "id": "3652397000001376005"
    }
  ]

Key
Data type
Description
$line_tax
JSON Array
Contains the name, ID, and the percentage of the tax you want to apply to the quote.
percentage
Percent
The percentage of tax applied on the quote. Accepts only numeric values, up to 5 digits.
name
String
The name of the tax.
id
String
The unique ID of the tax.

Note
Make a GET request to "{{api-domain}}/crm/v2/org/taxes" to obtain the IDs of all the taxes for your organization.

The below image shows the data corresponding to the line_tax and $line_tax keys in the UI for a quote.


Points to note
  • For Product_Details
    When you have associated a price book with an inventory module, and you include the key and value for Discount inside Product_Details, this discount value overrides the discount calculated from the price book.
  • For line_tax
    You must specify the percentage of tax in every JSON object inside the line_tax array.

2. Updating a Quote by adding Product Line Items
You can associate multiple products to a quote.
While updating a quote, you can add/update/remove a line item.
Let us consider an example where you have five line items in a quote, and you want to remove two line items, and add a new one.
In this case, you must
  • Pass the IDs of the line items you want to retain as individual JSON objects.
  • Add the new line item with the required details as a new JSON object.
  • Do not include any details about the line item you want to remove. When you do not specify the ID of any line item, the system deletes it automatically.
A sample JSON structure for the above scenario is as follows.         

"Product_Details": [
    {
      "id": "3652397000001377174"
    },
    {
      "id": "3652397000001378168"
    },
    {
      "id": "3652397000001379172"
    },
    {
      "product": {
        "id": "3652397000001351002"
      },
      "quantity": 100,
      "book": "3652397000000616007"
    }
  ] 

To obtain the ID of the existing line item, make a GET request to fetch the Quote you want to update. The response contains the ID of the existing line item in the Product_Details array.

Note
  • You can add a maximum of 200 line items to an inventory module.

We hope you found this post useful. Please reach out to us if you have any questions, or let us know in the comment section.

Cheers!











      Zoho Campaigns Resources


        • Desk Community Learning Series


        • Digest


        • Functions


        • Meetups


        • Kbase


        • Resources


        • Glossary


        • Desk Marketplace


        • MVP Corner


        • Word of the Day


        • Ask the Experts


          • Sticky Posts

          • Kaizen #197: Frequently Asked Questions on GraphQL APIs

            🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
          • Kaizen #198: Using Client Script for Custom Validation in Blueprint

            Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
          • Celebrating 200 posts of Kaizen! Share your ideas for the milestone post

            Hello Developers, We launched the Kaizen series in 2019 to share helpful content to support your Zoho CRM development journey. Staying true to its spirit—Kaizen Series: Continuous Improvement for Developer Experience—we've shared everything from FAQs
          • Kaizen #193: Creating different fields in Zoho CRM through API

            🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
          • Client Script | Update - Introducing Commands in Client Script!

            Have you ever wished you could trigger Client Script from contexts other than just the supported pages and events? Have you ever wanted to leverage the advantage of Client Script at your finger tip? Discover the power of Client Script - Commands! Commands

          Zoho CRM Plus Resources

            Zoho Books Resources


              Zoho Subscriptions Resources

                Zoho Projects Resources


                  Zoho Sprints Resources


                    Zoho Orchestly Resources


                      Zoho Creator Resources


                        Zoho WorkDrive Resources



                          Zoho CRM Resources

                          • CRM Community Learning Series

                            CRM Community Learning Series


                          • Tips

                            Tips

                          • Functions

                            Functions

                          • Meetups

                            Meetups

                          • Kbase

                            Kbase

                          • Resources

                            Resources

                          • Digest

                            Digest

                          • CRM Marketplace

                            CRM Marketplace

                          • MVP Corner

                            MVP Corner




                            Zoho Writer Writer

                            Get Started. Write Away!

                            Writer is a powerful online word processor, designed for collaborative work.

                              Zoho CRM コンテンツ








                                ご検討中の方

                                  • Recent Topics

                                  • we need to add a Customer Number field to the PDF document templates

                                    Hello everyone. We are currently using Zoho Inventory for our small business operations and have found it to be a valuable tool. However, we’ve encountered a specific requirement: we need to add a Customer Number field to the PDF document templates (such
                                  • Joining Two Reports

                                    Hello Guys, I have three modules: - Orders - Custom module - Clients - Contacts - Basic Pay I am using the order module to store the revenue share amount for each order which will be paid a sales rep The Orders are child or clients so I am pulling a report
                                  • Power of Automation :: Notify users Automatically when @Mentioned in Tasks Description

                                    Hello Everyone, A custom function is a software code that can be used to automate a process and this allows you to automate a notification, call a webhook, or perform logic immediately after a workflow rule is triggered. This feature helps to automate
                                  • Recording a payment in foreign currency not allowed

                                    Hi, my base currency is CHF. I made an invoice in EUR, which have been paid with an extra amount (which are the fees I guess). When I record that payment from the invoice page, I can select the EUR bank account. But the amount received is above the invoice
                                  • Introducing WhatsApp integration and quick editing capabilities in Zoho Sign

                                    Hi there, Zoho Sign already helps users collect signatures via email and SMS, and we're happy to announce that you can now send documents and authenticate recipients right through WhatsApp. Some of the key benefits include: Communication with recipients
                                  • Order Wise Expense Tracking and Reporting Possible?

                                    Hi, We are a manufacturing firm and take up several orders at the same time. Each order will be associated with a single sales order and then once completed to a single invoice. When recording expenses, is it possible to associate each expense with a
                                  • Related Module in Sharing Rules

                                    Zoho CRM team recently added the feature to filter records by Related Records It will be really beneficial if we can have this feature for Sharing Rules as well
                                  • Zoho Flow Needs to Embrace AI Agent Protocols to Stay Competitive

                                    Zoho Flow has long been a reliable platform for automating workflows and integrating various applications. However, in the rapidly evolving landscape of AI-driven automation, it risks falling behind competitors like n8n, which are pioneering advancements
                                  • Layout Rule Fields Appear in "Verify Details" Pop-up — Confirmed Working

                                    Hey everyone — just wanted to share a quick discovery. I created a Layout Rule in the Deals module that makes two fields show up (and required) when the stage is set to Closed Won or Closed Lost — one pick list and one text field. To my surprise, those
                                  • Can you please let us know how we can use Zoho for multi store?

                                    Hello Team, Can you please let us know how we can use Zoho for multi store because when we connect our plugin to Zoho and we create a product and then on another store when we create product with same name then product already exist error occurs, so how
                                  • Zoho One Home Dashboard - My Tasks (Projects) & My Overdue Work Items (Projects) have no data.

                                    The title basically covers the situation. I've set up the dashboard cards, and for a while, they were showing data. Now, they are both blank. Is anyone else experiencing this, or has anyone else experienced this, and if so, is there a fix?
                                  • Zakya - Release in North America?

                                    At Zoholics it was pitched like Zakya was already released in North America. However, when looking for it I couldnt find it. There isnt an integrated app available in Zoho. I figured maybe it was being released at Zoholics. Now over a month later, its
                                  • Custom Field Mapping in Outlook

                                    I have 10 custom fields in Zoho is there a way to create and map them to the outlook contact?
                                  • Custom module - change from autonumber to name

                                    I fear I know the answer to this already, but thought I'd ask the question. I created a custom module and instead of having a name as being the primary field, I changed it to an auto-number. I didn't realise that all searches would only show this reference.
                                  • Enhanced Zoho CRM and Office 365 calendar synchronization features!

                                    Dear customers, We're excited to share some significant improvements to our Office 365 calendar synchronization features, aimed at providing you with more control and a more personalized experience. What’s new Choose your Office 365 calendar: During the
                                  • Problemas de usarmos no Brasil

                                    Somos usuários a exatamente um ano do Zoho Recruit, agora migramos para o Zoho One. Temos enfrentado por diversas vezes problemas da ferramenta não estar realmente preparada para funcionar corretamente na lingua portuguesa. Problema esse não específico
                                  • CERTIFICADO DIGITAL - BRASIL

                                    Olá, Temos o ZOHO ONE e no Sign vemos de forma simples a assinatura digital, temos nos BRASIL certificado digital, de no CERTISIGN homologado pelo GOVERNO do BRASIL, há possibilidade de gerar a assinatura diante deste certificado?
                                  • Zoho Duplicate Reference Numbers

                                    I have 2 accounts through zoho. On one account if I enter a bill with the same number as a previous bill I get a warning message saying that there is already a bill with this number. However on the other account I do not get this message. How do I turn
                                  • integration between Zoho Site and Zoho Learn

                                    integration between Zoho Site and Zoho Learn so that when a user registers on the Zoho Site, their account is automatically created in Zoho Learn!! the use case i have pro plan in zoho site and zoho learn and i have puted the zoho learn domain in zoho
                                  • Automation #6 - Prevent Re-opening of Closed Tickets

                                    This is a monthly series where we pick some common use cases that have been either discussed or most asked about in our community and explain how they can be achieved using one of the automation capabilities in Zoho Desk. Typically when a customer submits
                                  • Not able to list or add contacts

                                    I am not able to get a list of contacts via api request. Tickets for example are listed via api even without orgId, so it shoud be similar. What is missing to reach the requirement. My aim ist to add a contact via API and then add a ticket with the contact
                                  • See contrat information from an account under the ticket

                                    Hi there, How can I program something to display created and selected contract on the ticket itself so my agents see it and can support correctly according to the contract and SLA ? Thank you :)
                                  • Weekly time log view

                                    The Weekly Time Log view is pretty nice. My users really like it when I show it to them. They like being able to pin ongoing tasks. Anyway, it's sort of hard to find. It is grouped with the Add Time Log button as a pull down. In my opinion, it should
                                  • Any Impact of Amazon Listings API on E-commerce Integration?

                                    Amazon sent the following message about changes to their APIs. Our only Amazon app / integration is Zoho Inventory's eCommerce for Amazon US, so the message below in bold gives us concerns about if Amazon's warning is referencing Zoho's Amazon US integration.
                                  • Working with Products that are non-tangible

                                    How does one create a 'service' in products? Is there a way to disable inventory functions for things like Sofware as a service? The services module doesn't look to be much help either. Not sure how to do this in CRM
                                  • ePOD Devices

                                    Has anyone tried and tested and devices that deliver ePOD (electronic proof of delivery)? We would like our drivers to use an ePOD device to get the customer signature The app should then be capable of updating the sales order to show delivery.
                                  • API Integration

                                    Why are we unable to do API Integration for Job borads
                                  • Remind/Recall Document API

                                    When I recall a document through the Sign API, I would like to be able to specify the reason that gets sent in the user notification email. Same with including a unique message when sending a document reminder through the API. Is there a way to include
                                  • Zoho Books API Creating Invoice and Address API

                                    I'm trying to create an invoice with zoho books api and i get the following error: Error creating invoice in Zoho Books: { message: 'Request failed with status code 400', details: { code: 15, message: 'Please ensure that the "billing_address" has less
                                  • Convert Multiple PO in 1 Bill

                                    Does anyone know how to convert multiple POs in 1 Bill? Thank you
                                  • merge the Multiple POs to single PO if Vendor of PO"s --in Zoho Inventory

                                    HI Merge the Multiple POs to single PO if Vendor of PO"s are Same ----in Zoho inventory Please provide any work around to achive this .
                                  • How to add categories to community

                                    In my Community, I would like to add several Categories but I don't readily see how this is accomplished. Currently, I have one category in my community with several forums. But I would like to add more categories. Thanks.
                                  • Knowledgeable Image Quality is very poor, any recommendations how to improve this?

                                    Hi All, We are looking at migrating our current knowledge base to Zoho so it can be kept in one location. Our current KB utilises a lot of images to try and make it easier for users and less wordy. Unfortunately, when I upload an image within an article,
                                  • Assistance Required: Displaying Dynamic HTML Table in Zoho Creator Dashboard Page

                                    I am currently stuck while creating a custom dashboard page in Zoho Creator. I want to display a designed HTML table showing Teacher Registration data with this condition: If Total Allowed Leaves < 10, display those teachers in the table. Page Scripts
                                  • Visibility of Custom Questions in the Question Pool

                                    A colleague is adding our own questions in the question pool for our Employee Engagement survey, but I can't see the questions she has entered, even after refreshing the webpage. Are the custom questions in the question pool only visible to the one who
                                  • campaigns contact lists not exporting

                                    I'm trying to export a specific lead source from my contract list in 'campaigns'. Every time I have to do this the contacts won't export. I have done a search and selected the specific contacts I want to export. The box appears to choose the file type,
                                  • Recipient Field on replies doesn't update with Contact change

                                    Some emails that come into our system come from an online form and the sender address is a noreply@whateverthedomainis.org So in order to reply to the original sender, we need to update/change the contact for the tickets. However, after we change the
                                  • Multicolumns fields for native forms

                                    It would be nice to be able to create forms with multiple columns. Currently, each field occupies a single column, which makes a fairly complex form seem too long.
                                  • Assign values to hidden fields in native forms

                                    It would be great to be able to assign values (static or dynamic) to hidden fields in a form. Currently, I can only assign a value via the URL. I currently have a form integrated with a webhook, but I don't have a way to send useful form data as parameters,
                                  • Migrating Email Content to a Shared Mailbox Address

                                    I am moving my email to Zoho Mail (currently hosted through GoDaddy). I have created a user (me) and I have also created a "Shared Mailbox" Group (through the admin panel) with an email address I will be using as an organization address. My personal email
                                  • Next Page