Install and uninstall actions

Install and uninstall actions

Hello Biginners!

In our previous forum post, we explored creating connections - specifically, custom service connections in the Bigin Developer Console. In this post, we'll focus on another feature that can be used in every topping: install actions.

We'll look at what install actions are and when to use them, and then we'll walk through a real-world example where users are notified whenever a topping is installed or uninstalled.

What are install actions?

Install actions are important features of a topping that let you execute custom logic during installation and uninstallation events.

Instead of treating installation and uninstallation as silent background events, the Bigin Developer Console allows you to run your own logic the moment a user installs your topping, updates it, or decides to uninstall it. This logic can be implemented as Deluge functions that are executed automatically based on the installation action.

Primarily, install actions are executed in the following scenarios:
  1. On Installation: This action is triggered when the topping is installed for the first time or when the topping is upgraded. (A topping upgrade refers to a new version of the topping being installed by the organization user.) In both cases, the On Installation action runs to perform the required logic.
  2. On Uninstallation: This action is triggered when the topping is uninstalled or removed from an organization.
Let's look at each of these in detail.

On Installation

The On Installation action is triggered immediately after a topping is successfully installed or updated in a Bigin organization. Conceptually, this is the topping's first run and the right place to perform one-time setup tasks that you don't want users to handle manually.

Note: You can write only one On Installation script per topping. This script is executed only during two key events of the topping: the topping being installed for the first time and an updated version of the topping being installed after publishing changes.

This means the On Installation script is not executed repeatedly. It runs only when the topping is installed or updated, ensuring that setup logic is executed only when it's actually required.

To create an On Installation script, access the Bigin Developer Console, navigate to the Install Actions section in the left panel, and choose Toppings.

You'll be redirected to the Deluge editor where you can write the script for the On Installation action.


In the right panel of the Deluge editor, you'll be able to find the installParamMap which contains important contextual details such as the organizationId, installerId, previousVersion, and other details that are provided by the install action script itself. These keys can be used within your script to perform custom logic based on the installation context.

For more information about the keys that you can use inside the installation script, refer to the install actions documentation.

On Uninstallation

The uninstallation process of a topping will be handled by the On Uninstallation action. This function runs when a topping is removed from an organization.

To create an On Uninstallation script, navigate to Install Actions in the left panel, choose Toppings, and write the script in the On Uninstallation section of the Deluge editor.


In the On Uninstallation action, the installParamMap provides the keys organizationId and installerId. These values indicate which organization the topping is being removed from and which user initiated the uninstallation.

Now that we've explored how both of the install actions work, let's move on to creating a topping using these actions in a real-world scenario.

Let's create a topping with install actions

To understand how install actions work in a real-world scenario, we’ll build a Compliance Notification Topping.

The purpose of the topping is to keep organization administrators of the Bigin account informed about the lifecycle of the topping—specifically when it becomes active and when it's removed from their Bigin account.

In many business environments, it's important for admins to be aware of compliance-related changes and system-level additions. Using install actions in the topping ensures that such notifications are handled automatically, without requiring any manual effort from the user.

To achieve this functionality, we'll rely on both of the install actions:
  1. When a user installs the topping, the On Installation action is triggered, through which an email notification is sent to all active admin users in the organization, informing them that the Compliance Notification Topping has been successfully enabled. Along with this, a compliance checklist document stored in Zoho WorkDrive is also attached to the email.
  2. When the topping is uninstalled, the On Uninstallation action is triggered, sending an email notification to all active admin users in the organization to inform them that the Compliance Notification Topping has been successfully enabled. A compliance checklist document stored in WorkDrive is also attached to the email.
Let's learn how to do this.

Setting up the topping

First, create a topping in the Bigin Developer Center. For detailed instructions on creating a topping, refer to this post on how to create a topping.

After creating a topping and accessing it in the Bigin Developer Console, the next step is to create the required service connections.
A connection for Bigin will be used to fetch admin users from the organization into the topping. In this connection we'll use the scope ZohoBigin.org.ALL, as we need to retrieve the org details of the Bigin account where the topping is installed.

Next, we need a WorkDrive connection because we need to download the compliance checklist file stored in WorkDrive and attach it to the notification email. For the WorkDrive connection, we'll be using the scopes WorkDrive.files.READ and ZohoFiles.files.READ.

For a detailed explanation of creating the default connections, refer to this post.

Once the connections are created, we can write the install action scripts.

Implementing the scripts

When the topping is installed, we need to send an email to all the active admin users with the installation details and the WorkDrive checklist as an attachment.

To begin, navigate to the Install Actions section in the left panel and select Toppings. Under the On Installation tab, we’ll write the Deluge script that needs to be executed when the user installs the extension.

Writing the On Installation script

In our topping, the On Installation script performs the following actions:
  1. Fetches all the active admin users in the organization
  2. Downloads the checklist file from WorkDrive
  3. Sends an email notification to the admin users with the installation details and the checklist file.
  1. topping_name = "Compliance Notification Topping";
  2. // 1) Fetch admin users
  3. resp = invokeurl
  4. [
  5. url :"https://www.bigin.com/developer/docs/apis/v2/get-users.html"
  6. type :GET
  7. connection:"biginplus__biginnewconnection"
  8. ];
  9. // 2) recipient list
  10. stakeholders = List();
  11. usersList = resp.get("users");
  12. if(usersList != null)
  13. {
  14. for each user in usersList
  15. {
  16. email = user.get("email");
  17. status = user.get("status");
  18. if(email != null && (status == null || status.toLowerCase() == "active"))
  19. {
  20. stakeholders.add(email);
  21. }
  22. }
  23. }
  24. // 3) Download WorkDrive file via Download API
  25. header = Map();
  26. header.put("Accept","application/vnd.api+json");
  27. resource_id = "khw4zbab917b7f4774260a06636089ef0074f";
  28. fileResp = invokeurl
  29. [
  30. url :"https://download.zoho.com/v1/workdrive/download/" + resource_id
  31. type :GET
  32. headers:header
  33. connection:"biginplus__zohoworkdriveconnection"
  34. ];
  35. // 4) constructing email
  36. org_id = installParamMap.get("organizationId");
  37. installer_id = installParamMap.get("installerId");
  38. current_time = zoho.currenttime;
  39. subject = "Bigin Topping Enabled: " + topping_name;
  40. message = "";
  41. message = message + "<b>" + topping_name + "</b> was <b>Installed</b>.<br/><br/>";
  42. message = message + "<b>Organization ID:</b> " + org_id + "<br/>";
  43. message = message + "<b>Installed by (User ID):</b> " + installer_id + "<br/>";
  44. message = message + "<b>Time:</b> " + current_time + "<br/><br/>";
  45. message = message + "<b>Business impact:</b> This topping is now active for the organization.<br/>";
  46. //sending the email
  47. if(!stakeholders.isEmpty())
  48. {
  49. sendmail
  50. [
  51. from :zoho.adminuserid
  52. to :stakeholders
  53. subject :subject
  54. message :message
  55. Attachments :file:fileResp
  56. ]
  57. }
For details about the API endpoints and request formats used in this code, refer to the Bigin and WorkDrive API documentation. For the syntax to send emails via a Deluge task, you can refer to this documentation.

Writing the On Uninstallation script

When a user decides to remove the topping, we'll send an email notification to ensure the admins stay informed.
  1. topping_name = "Compliance Notification Topping";
  2. // Fetch admin users
  3. resp = invokeurl
  4. [
  5. url :"https://www.zohoapis.com/bigin/v2/users?type=AdminUsers"
  6. type :GET
  7. connection:"biginplus__biginnewconnection"
  8. ];
  9. stakeholders = List();
  10. usersList = resp.get("users");
  11. if(usersList != null)
  12. {
  13. for each user in usersList
  14. {
  15. email = user.get("email");
  16. status = user.get("status");
  17. if(email != null && (status == null || status.toLowerCase() == "active"))
  18. {
  19. stakeholders.add(email);
  20. }
  21. }
  22. }
  23. org_id = installParamMap.get("organizationId");
  24. uninstaller_id = installParamMap.get("installerId");
  25. current_time = zoho.currenttime;
  26. subject = "Bigin Topping Disabled: " + topping_name;
  27. message = "";
  28. message = message + "<b>" + topping_name + "</b> was <b>Uninstalled</b>.<br/><br/>";
  29. message = message + "<b>Organization ID:</b> " + org_id + "<br/>";
  30. message = message + "<b>Uninstalled by (User ID):</b> " + uninstaller_id + "<br/>";
  31. message = message + "<b>Time:</b> " + current_time + "<br/><br/>";
  32. message = message + "<b>Business impact:</b> This topping is no longer available from now on.<br/>";
  33. if(!stakeholders.isEmpty())
  34. {
  35. //Send email
  36. sendmail
  37. [
  38. from :zoho.adminuserid
  39. to :stakeholders
  40. subject :subject
  41. message :message
  42. ]
Once we've configured both the On Installation and On Uninstallation scripts, we can test and publish the topping. When the user installs the topping, the install actions will be triggered automatically based on the topping's lifecycle events.

Let's walk through what happens at runtime.

What happens when the topping is installed or uninstalled

Upon installation, the user receives an email notification along with the topping checklist attachment as shown below.


When the topping is uninstalled, the user receives an email indicating that the topping has been disabled as shown below:


In this post, we've explored how install actions and uninstall actions give us control over the toppings. We'll cover more features of the Bigin Developer Console in our upcoming posts.

Stay tuned!

<<Previous                                                                                                                                                                            Next>>
    • Recent Topics

    • Add Ability to Reset Help Center User MFA in Zoho Desk

      Hello Zoho Desk Team, First of all, thank you for recently adding support for Multi-Factor Authentication (MFA) in the Zoho Desk Help Center. We’re very happy to see this enhancement go live, especially since this was a highly requested security feature.
    • Upgraded sentiment analysis model for more accurate detection

      Hello everyone! Sentiment Analysis in Zia is being upgraded to a newer model to improve how customer sentiment is detected and interpreted. This transition is aimed at getting better contextual understanding across all supported channels. As part of this
    • Integrate QuickBooks with Bigin and streamline your sales and accounting!

      If your business relies on Bigin for customer management and QuickBooks for accounting and invoicing, this new integration is here to make your operations more efficient. By connecting these two platforms, you can now manage your CRM and financial processes
    • Very limited support for MCP

      Has anyone else noticed how limited the MCP support for Zoho People currently is? Right now only a small set of read-only actions (exactly 15) seem to be available. At the same time Zoho CRM supports over 700+ functions. It makes it almost impossible
    • How has Zoho still not resolved Daylight Savings Time?

      According to these forums Zoho has been working on DST for 12 years. Totally unacceptable. Am I missing something? Why are other customers who observe DST not screaming for this to be fixed? Are there reasonable workarounds? This is a must-have for us. 
    • ZOHO Desk attachments support

      Hi I just setup MCP with claude, it works well, but it can't read attachments... which makes it kind of useless... Will you be adding attachment capabilities anytime soon?
    • HOW I CAN GET BETA VERSION FOT TESTING

      HI. ZOHO I AM INTERESTED IN YOUR BETA SOFTWARE TO EXPERIENCE NEW FEATURES.
    • How to Generate Separate Labels for Each Invoice SKU Line Item in Zoho Books?

      Hi everyone, I’m trying to implement a requirement in Zoho Books where separate labels need to be generated for each SKU/item from an invoice. Scenario: One invoice can contain multiple products/SKU items Each item/box should have its own separate label
    • HTML PDF Templates / Build From Scratch option not visible for Custom Modules

      Hi everyone, I am working with Zoho Books Custom Modules and trying to create a custom 4x4 package label PDF template using HTML/CSS. According to the official Zoho Books documentation for HTML PDF Templates, there should be an option like: Settings →
    • Updating Sales orders on hold

      Surely updating irrelevant fields such as shipping date should be allowed when sales orders are awaiting back orders? Maybe the PO is going to be late arriving so we have to change the shipment date of the Sales order ! Not even allowed through the api - {"code":36014,"message":"Sales orders that have been shipped or on hold cannot be updated."}
    • Direct Integration Between Zoho Cliq Meetings and Google Calendar

      Dear Zoho Team, We’d like to submit the following feature request based on our current use case and the challenges we’re facing: 🎯 Feature Request: Enable meetings scheduled in Zoho Cliq to be automatically added to the host's Google Calendar, not just
    • billable_expense_id in Invoice API does not set invoiced=true on bill line items — causes duplicates in Projects > Create Invoice

      Hi Zoho Community, We are running an automated batch invoicing system using the Zoho Books API and have hit two critical bugs that are causing duplicate invoice risk in production. Raising this here for visibility alongside a support ticket already filed.
    • New fields : radio button

      Hi, when customizing a module (eg: Candidates), we are able to select different types of fields (check box, currency, list, ...). However there is no "radio-button" component. This type of fields is often used in Web pages and will be certainly a plus-value
    • Huge confusion in zoho crm and zoho analytics

      Context => We have reporting based hierarchy in zoho crm and basically there will be one sales head and couple sales managers and 10 pre sales excutives divided between 2 sales managers we have maintained that in zoho crm and there is complex reporting
    • Huge confusion in zoho crm and zoho analytics

      Context => We have reporting based hierarchy in zoho crm and basically there will be one sales head and couple sales managers and 10 pre sales excutives divided between 2 sales managers we have maintained that in zoho crm and there is complex reporting
    • Import KB template OR Export template for zoho desk?

      Greetings. Can you tell me if there is a way to get an EXPORT of my KB articles? OR is there a template you supply for importing KB articles into my zoho desk? I am looking for a method of understanding what fields can be imported, and what their possible
    • Choice Availability Reset

      If an entry is deleted which included a response to a field with choice availability enabled does that increase the number of remaining times the choice can be selected?
    • Rich Text Type Format for Notes Field

      Has it been discussed or is there a way to insert a table in the notes field? We sometimes receive information in a table format, and it would be beneficial to have it in the same format as a note on a record.
    • [Bug] WebAuthn passkey registration blocked on rpIds with TLDs longer than 6 characters (.accountant, .technology, etc.) — isValidDomain regex too strict

      Hi, Filing on behalf of an enterprise customer where Zoho Vault is deployed across the company. The Chrome extension blocks WebAuthn passkey registration on legitimate sites whose Relying Party ID (rpId) has a TLD longer than 6 letters. This affects every
    • [Heads Up] Upcoming update to field values in Zoho Books - Zoho Analytics integration

      Hello Users, We'd like to inform you of an upcoming update to the Account Type field values in the Zoho Books integration for Zoho Analytics from June 1, 2026. What's Changing? The following values under the Account Type field are being renamed to align
    • Important update: Migrate to the new SalesIQ live chat widget before May 15, 2026

      The old SalesIQ live chat widget will be deprecated on May 15, 2026. This is a final reminder to migrate to the new SalesIQ live chat widget before this date. After May 15, 2026, the old widget will no longer be maintained, which can lead to slower performance
    • Zia Agent built in ChatKit UI does not render markdown

      Hi, You have a major shortcoming in the Zia Agent UI. The test UI that is embedded in agents.zoho.com allows you to test the agent has full support for rendering markdown, but your ChatKit UI does not have support for rendering markdown. If I embed it
    • Team folder not created when creating project using zoho flow

      When I try to automate project creation using zoho flow, and I have enabled workdrive integration to automatically create team folders to attach to the project, this only works when I create a new project through the UI. But I am trying to automate project
    • Zoho Projects - Email notification relabelling of modules not present on default templates

      Hi Projects Team, I noticed that in the default email template notification, the word "bug" was not renamed to the lable I am using in my system. As many users may used the Bugs modules for various purposes including Changes, Revisions, Issues, etc...
    • GLM 5 not available

      Hello, I am trying to setup a Zia Agent using agents.zoho.com. The settings says that GLM5 is among the list of free zoho hosted models available. However, when I try to setup an agent and pick a model from the list only GLM 4.7 Flash is available. How
    • Set Custom Icon for Custom Modules in new Zoho CRM UI

    • Can not send or reply to mails

      Hello, I can not send mails or reply. If I try to send a mail i get "Unable to send message;Reason:553 Replaying disallowed. Invalid Domain - invata-programare.ro" Can you help me, please? Thank you!
    • Kaizen #241: Automating Deal risk escalation using Workflow APIs, Connected Workflows, and Functions

      Hello everyone! Welcome to another Kaizen week. In many organizations, sales teams work in Zoho CRM, finance teams manage invoices in Zoho Books, and support teams handle customer issues in Zoho Desk. Now consider this scenario: A sales representative
    • Upload own Background Image and set Camera to 16:9

      Hi, in all known online meeting tools, I can set up a background image reflecting our corporate design. This doesn't work in Cliq. Additionally, Cliq detects our cameras as 4:3, showing black bars on the right and left sides during the meeting. Where
    • Allow Super Admins to Edit Task “Created By” and Issue “Reporter” Fields

      Hello Zoho Projects Team, We hope you are doing well. We would like to submit a feature request regarding the ability to manage and correct system ownership fields in Zoho Projects, specifically: Task → Created By Issue → Reporter / Reported By Current
    • The Social Wall: April 2026

      Hello everyone, This month, we’re excited to bring you a set of new updates for Threads in Zoho Social, designed to make publishing, monitoring, and managing your content much easier Threads updates You’ll now see a few useful improvements in the compose
    • Sort or filter CRM report by count value

      Hi there, I'm trying to create a report that will show me high frequency bookings (leads) coming through within a time period for any particular account - this is so we can proactively reach out to these accounts. I have a report that shows the information
    • Error when changing user permission from read only to user.

      Hi there, Ive tried to change one of my users to be able to edit, however i kept getting the error user license exceed.
    • Marketing Tip #30: Promote your brand differently on each social platform

      Not all social platforms work the same way. Posting the same content in the same way across every channel can limit your reach. Each platform has its own discovery system, and understanding what it prioritizes can dramatically improve how your brand is
    • Whatsapp Limitation Questions

      Good day, I would like to find out about the functionality or possibility of all the below points within the Zoho/WhatsApp integration. Will WhatsApp buttons ever be possible in the future? Will WhatsApp Re-directs to different users be possible based
    • **Building Role-Appropriate Accountability Layers in Zoho Projects - Looking for Real-World Experience**

      We're a small ISP/telecom operator on Zoho One and I'm trying to solve what I think is a common organizational problem. Would love to hear from others who've tackled it. **The Core Problem** Staff will only consistently use a project management system
    • Duplicate entries for contacts birthdays

      Good morning I have recently started to use my Zoho calendar and noticed that there are multiple birthday events showing for some of my contacts. I have checked my contacts and there were duplicates for some contacts which I have now rectified but the
    • Using IMAP configuration for shared email inboxes

      Our customer service team utilizes shared email boxes to allow multiple people to view and handle incoming customer requests. For example, the customer sends an email to info@xxxx.com and multiple people can view it and handle the request. How can I configure
    • What's New in Zoho Billing | March 2026

      March is here with a fresh wave of updates to Zoho Billing. From making compliance easier, reporting more flexible, to making day-to-day workflows smoother across the board. Here's everything that's new this month. Introducing Usage-Based Billing Reports
    • Subforms in Creator-Lookup Price

      I've got a modular called Price List with items and prices. Ive got another module called Estimates with a subform that looks up that Price List. I am trying to get the "Price" to auto-enter based on the Lookup field of the item name. Anyone know how
    • Next Page