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 disabled. 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

    • Thunderbird not retrieving Mail automatically

      Hi, I have set up Zoho in Thunderbird all fine, the only problem is that the mails are not coming to Thunderbird automatically, they only come when I initially start up Thunderbird,  any ideas for a fix on this cheers
    • Free Webinar Alert! Don’t take the bait: Everyday email safety in Zoho Mail

      Hello Zoho Community! Think you can spot a suspicious email before it catches you off guard? Join our upcoming webinar, “Don’t take the bait: Everyday email safety in Zoho Mail,” and learn how to recognize common email threats and build safer habits for
    • Do you know which 20% of your products generate 80% of your revenue?

      Not all products earn their place in your inventory. In almost every catalog, a small group of items drives most of the revenue, while a long tail quietly ties up storage, counting effort, and working capital. The trouble is, most teams treat every SKU
    • How can we allocate incoming PO stock to Sales Orders, and does Backorder automatically reserve it upon receipt?

      Hello Everyone, We want to allocate incoming Purchase Order quantities to specific Sales Orders before the stock arrives. For example, from an existing PO of 100 pieces: 40 pieces assigned to SO-A. 35 pieces assigned to SO-B. 25 pieces left unallocated.
    • Convert an Existing Single Item into an Item with Variants

      Hello Zoho Team, Introducing variants is a great addition to Zoho Inventory. However, we would like to request an option to convert an existing single item into an item with variants. For example, Item A initially comes in only one colour, so we create
    • inventory removal at packing list or shipment.

      currently our system is set to remove inventory at invoice. This is creating an inventory nightmare? Is it possible to change the settings to remove the item from inventory at either the packing slip stage or shipping the item.
    • Delug script

      I have been looking at auto-update a amount (home currency) field from another module. Zoho native multicurrency was used in the other module (we have 4 here). Custom script was input with no error, but the field was not updated on trigger. Script as
    • Zoho Desk API modifiedTimeRange returns HTTP 500 around 2026-03-08T02:00:00.000Z

      Hello Zoho Support Team, We are experiencing a reproducible HTTP 500 Internal Server Error when querying the Zoho Desk API search endpoint with a specific modifiedTimeRange boundary. ### API Endpoint GET /api/v1/tickets/search ### Reproduction Steps &
    • GEO and Zoho Desk

      Has anyone done anything with GEO (generative engine optimization) and zoho desk KB? Are there any plans from Zoho on adding the ability in inject GEO scripts in KB Articles?
    • How to add custom lookup-type field to meeting module form in Zoho CRM

      We need to have a lookup field to a custom module's record in Zoho CRM. But it appears that look-up fields are not enabled in Meetings/Events module in Zoho CRM. How do I design/implement a custom look-up type field that will lookup records from custom
    • AI-Powered Automation for Repetitive Tasks

      Incorporating AI into Zoho People can streamline and automate repetitive administrative tasks, boosting productivity and efficiency. Automate Data Entry: Use AI to auto-capture and input data from emails and forms, reducing errors. Schedule Management:
    • Rotate an Image in Workdrive Image Editor

      I don't know if I'm just missing something, but my team needs a way to rotate images in Workdrive and save them at that new orientation. For example one of our ground crew members will take photos of job sites vertically (9:16) on his phone and upload
    • [IDEA] Bring Layout - Conditional Rules and Client Scripts to Zoho Books

      The problem We run Zoho Books with two e-invoicing integrations: myData (Greek tax authority, AADE) and PEPPOL (EU e-invoicing). Between the two, our Invoice form carries a large number of custom fields — document type codes, VAT exemption categories,
    • Last four Digit field in Zoho Payment Received

      One of our client's payment received doc has Notes, Last four digit and Transaction ID fields set, I couldn't find api parameter for these fields in the documentation... when I checked the site, it's not custom fields as well. where do i find it, any
    • Automatically remove commas

      Team, Please be consistent in Zoho Books. In Payments, you have commas here: But when we copy and paste the amount in the Payments Made field, it does not accept it because the default setting is no commas. Please have Zoho Books remove commas autom
    • Show my cost or profit while creating estimate

      Hi, While creating estimate it becomes very important to know exact profit or purchased price of the products at one side just for our reference so we can decide whether we can offer better disc or not .
    • Cash Flow Forecast Dashboard in Zoho Reports

      I am exploring the capabilities of Zoho Reports and created a simplified Cash Flow Dashboard - http://db.zoho.com/ZDBDataSheetView.cc?DBID=97137000000016024 This is just a sample of the useful financial information for small businesses that can be created with this powerful business intelligence tool from Zoho.
    • Admin Logging in as another User

      How can a Super Admin login as another user. For example, I have a sales rep that is having issues with their Accounts and I want to view their Zoho Account with out having to do a GTM and sharing screens. Latest Update (27th April 2026): With the early
    • Zoho CRM Layout Rules: Nine New Actions, Profile-Based Execution, and Interactive Preview

      Hello everyone, Availability: This feature is now available for all users. We’re excited to announce powerful new enhancements to Layout Rules in Zoho CRM - a feature built to guide our teams through form-filling by showing the right information to the
    • Lookups and Custom Modules

      I created a Custom Module that I'm calling "Item Purchasing Group". This module will store information for groups of Items that must be purchased together (including minimum overall quantities and/or values, etc.). This will have a one-to-many relationship
    • can't access zoho account

      I can't log in to my zoho account, can you help me
    • Auto sync Photo storage

      Hello I am new to Zoho Workdrive and was wondering if the is a way of automatically syncing photos on my Android phone to my workdrive as want to move away from Google? Thanks
    • Has anyone integrated Zoho with Go High Level (GHL)? Looking for guidance

      Hi everyone, I’m exploring the possibility of integrating Zoho applications with Go High Level (GHL) and wanted to check if anyone in the community has experience with this. Specifically, I’m interested in understanding: Whether a direct integration is
    • Updating Unit Code for New Item Creation, Quote and Invoicing is so inconvenient

      The Zoho Team has implemented many updates, but these updates should be optional. Before rolling out any new feature, they should already have a solution in place that allows users to remove or disable it if they choose not to use it. Just yesterday,
    • Item/service subtotal

      Just discovered & really pleased that we can drag to re-order the line items in Sales orders & Invoices, a very nice feature which doesn't seem to be documented? It would be nice to be able to insert a subtotal as a line item to complete this great feature
    • Set Custom Icon for Custom Modules in new Zoho CRM UI

    • I want to prefill CRM Account information using the GSTIN of the Customer

      Currently i need to add account details manually in zoho crm and when it syncs in zoho books manual working needs to be done. Whereas in zoho books i can prefill the customer details using the GSTIN which is great feature. Can the same be enabled for
    • #5 Is This Actually The Right Tool For Me?

      Day 5: Before Meera brought six months of business history into Zoho Invoice, she stopped and asked herself a very sensible question: Is this actually the right tool for me? It is much easier to ask that now than after moving all your data. The Usual
    • Timesheet entry and comment on the actual timesheet

      Dear madam/sir, It would be really helpful if we could add an option to comment on a specific timesheet entry, after the employee logs a time-log. Would that be possible in the future? Or can you suggest another way to do this?
    • OpenAI Is Moving to the Responses API: Here's What It Means for SalesIQ

      OpenAI has deprecated its Assistants API and is moving to the Responses API. If you're using OpenAI Assistants with SalesIQ, you may be wondering if you need to make any changes to your existing setup. You don't. SalesIQ has already taken care of the
    • Need Native Support for docx files in Zoho Writer

      Absolutely love Zoho Writer, but often need to share files by email with people who are in the Office ecosystem. Downloading a file as docx, then sending it by email, getting the comments back, converting it to Zoho format, editing it, then converting
    • CRM integration issues

      hi Just start testing Campaigns. Read up on up on these issues but can not find an answer. I am super admin. 1) its only showing 1002 contacts, I have a 2500 plan which is confirmed in dashboard. I says it sync'd 1400. I've looked at missing contacts,
    • What's New in Zoho Expense: Integrated Business Travel and AI-Powered Expense Management

      This release brings a wide range of updates across Zoho Expense, including new AI-powered capabilities, enhancements to corporate cards, expense management, audits, and more. Keep reading to know how the new updates can transform your travel and expense
    • ChatGPT Plugin / MCP Server auth error

      Hi all I'm trying to connect the ChatGPT plugin for Zoho CRM but after username stage of the auth process, I get this error from the URL https://mcp.zoho.eu/mcp-client/ {"error_description":"Invalid request url, Request is not as per defined in oauth
    • Project Management Platforms for AI Agents: What Matters Most?

      Zoho Projects is already going beyond basic AI assistance with MCP, AI Bridge, and integrations that let AI models access project data and perform actions. That raises an interesting question: what should a project management platform for AI agents actually
    • Sync workdrive feature inside ZohoCRM

      Hi, I'm exploring the new workdrive/ZohoCRM connector released by Zoho to replace the free extension workdriveforCRM which is decomissioned https://marketplace.zoho.com/app/crm/zoho-workdrive-for-zoho-crm I'm rather upset with this long awaited feature,
    • Adding Custom Status Options in Work Order Action Menu

      Hello FSM Team, We would like to inquire if it is possible to add more custom options in the Work Order action/status dropdown (e.g., Cancel, Terminate, Non-Billable, Void, etc.). Currently, the available options are limited, and we are unable to customize
    • MTA - BAD IP reputation by outlook/hotmail

      Messages to Microsoft email servers are bouncing back due to poor reputation. Message: 4.7.650 The mail server [136.143.188.206] has been temporarily rate limited due to IP reputation. For e-mail delivery information see https://postmaster.live.com (S775)
    • Timesheet Task Icons

      In the image below which shows the task field drop down when creating a timesheet against a project and task. What do the icons mean the the right side column against each task? I can't find any documentation or guide that explains what the no entry sign,
    • Open Records in a New Browser Tab

      Hi FSM Team, Just a suggestion: It would be helpful to have a right-click → Open in New Tab option in FSM, similar to CRM. This should ideally work for any clickable record or module, allowing users to open multiple records in separate tabs without losing
    • Next Page