Kaizen #73 - Portal #APIs [Part II]

Kaizen #73 - Portal #APIs [Part II]

Hi everyone! Welcome back to another week of Kaizen!

In continuation to our previous post on Portal APIs in Zoho CRM, we will discuss more on user groups and users this week.
Let us consider the case of the automobile industry. In such a case, you may need to give portal access to more than one user type, such as customers, employees, and partners.
With user types, each user will have access to the information that is most relevant to their role. For example, when you give your customers portal access, they can book services, view and update their service schedules. Your partners or employees with portal access can view customer behaviours, sales date, etc. 

Create a User Type via API

Using this API, you can create a user type for a portal you have already created.

Request URL: {api-domain}/crm/v4/settings/portals/<portal_name>/user_type
Request Method: POST
Scope: ZohoCRM.settings.clientportal.ALL/CREATE

Input Keys

 Key
 Description
name : string, mandatory
Name of the user type.
personality_module : string, mandatory
The module api name for which the user type is to be configured.
active : Boolean, optional
Represents whether the user type is active or inactive. The default value is false.
modules : JSONArray, mandatory
The JSON array containing keys that describe the user type's settings for different modules that are linked to the personality module through look up or multi-lookup fields.
modules.layouts.id : Number, mandatory
The layout the user type should be able to access.
modules.permission : key value pairs, mandatory
Boolean key-value pairs that represent the permissions you want the users to have in the module. The possible keys are view, edit, create.
modules.views : JSONObject, mandatory
The custom view or canvas view to display the records for the user type.
modules.id: Number, mandatory
The related module id.
modules.shared_type : String, mandatory
Represents whether the module is a private or public module.
modules.filters : JSONObject,mandatory
Field id, by which the module record can be filtered for the user type.
modules.fields : JSONArray, mandatory
Field permissions for the user type with read_only (Boolean), api_name(field API name) and id of the each field to be configured for the module. Note that if any of the fields in the layout is marked mandatory, they cannot be read-only in the portal.

For example, the following request creates the user type Customer for the ZylkerAutos portal, with view permission to the service module.

Sample Request:

Sample Input:

{
   "user_type":[
      {
         "name":"Customer",
         "personality_module":{
            "api_name":"Customer"
         },
         "active":true,
         "modules":[
            {
               "layouts":[
                  {
                     "id":"1306462000000095055"
                  }
               ],
               "permissions":{
                  "view" : true
               },
               "views":{
                  "id":"1306462000000091501",
                  "type":"custom_view"
               },
               "filters": null,
                fields": [
                 {
                      "id": "18936550000000063924",
                      "read_only": false
                  }
                ],
               "id":"1306462000000000125",
               "shared_type":"private"
            },
            {
               "layouts": null,
                "views": null,
               "filters": null,
               "permissions":{
                  "view":true
               },
               "id":"1306462000000000147",
               "shared_type":"private"
            }
         ]
      }
   ]
}

Sample Response

{
    "user_type": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "1306462000001856005"
            },
            "message": "user type created successfully.",
            "status": "success"
        }
    ]
}

Update User Type via API

Suppose your automobile dealership firm decides to expand your online booking system to allow customers to schedule test drives, in addition to service appointments. In this case, the dealership may need to update the Customer user type to include the ability to book test drives. You can use the Update User Type API to make such updates. 

Request URL : {api-domain}/crm/v4/settings/portals/<portal_name>/user_type/<user_type_id>
Request Method : PUT
Scope : ZohoCRM.settings.clientportal.ALL/UPDATE

Input Keys:

Key Description
name : string, optionalName of the user type.
personality_module : string, optionalThe module api name for which the user type is to be configured.
active : Boolean, optionalRepresents whether the user type is active or inactive. The default value is false.
modules : JSONArray, optional
The JSON array containing keys that describe the user type's settings for different modules that are linked to the personality module through look up or multi-lookup fields.
modules.layouts.id : Number, optionalThe layout the user type should be able to access.
modules.permission : key value pairs, optional
Boolean key-value pairs that represent the permissions you want the users to have in the module. The possible keys are view, edit, create.
modules.views : JSONObject, optional
The custom view or canvas view to display the records for the user type.
modules.id: Number, optional
The related module id.
modules.shared_type : String, optional
Represents whether the module is a private or public module.
modules.filters : JSONObject, optional
Field id, by which the module record can be filtered for the user type.
modules.fields : JSONArray, optional
Field permissions for the user type with read_only (Boolean), api_name(field API name) and id of the each field to be configured for the module. Note that if any of the fields in the layout is marked mandatory, they cannot be read-only in the portal.

For example, the following request updates the Customer user type's access to the Service module.

Sample Request

https://www.zohoapis.com/crm/v4/settings/portals/ZylkerAutos/user_type/1306462000001856005

Sample Input

{
   "user_type":[
      {
         "modules":[
            {
               "permissions":{
                  "edit":true,
                  "create":true
               },
               "id":"1306462000000000125",
               "shared_type":"private"
            }
         ]
      }
   ]
}

Sample Response

{
    "user_type": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "1306462000001856005"
            },
            "message": "Portal user type updated successfully.",
            "status": "success"
        }
    ]
}

Delete User Type via API

Let us consider the case where your company had a user type for suppliers in its portal but has decided to handle supplier management through a separate system. In this case, you would need to delete the supplier user type from the portal to simplify user management and ensure that only the necessary users have access to the portal. 

Request URL: {api-domain}/crm/v4/settings/portals/<portal_name>/user_type/<user_type_id>
Request Method: DELETE
Scope: ZohoCRM.settings.clientportal.ALL/DELETE

For example, the following request deletes the supplier user type from the ZylkerAutos portal.

Sample Request

Sample Response

{
    "user_type": [
        {
            "code": "SUCCESS",
            "details": {
                "id": 1306462000001857564
            },
            "message": "Portal user type deleted successfully.",
            "status": "success"
        }
    ]
}

Please note that you cannot delete a user type with users. You should transfer the users to another portal before deleting the user type.

Transfer User to another User Type

There may be scenarios where you have to transfer a user from one user type to another. For instance, if a customer is upgraded to premium level which offers additional services, you might need to transfer the customer to a new user type that includes these features. Also, if you ever have to delete a user type, you need to transfer the users in that user type to another one. 

Request URL: {api-domain}/crm/v4/settings/portals/<portal_name>/user_type/<user_type_id>/users/action/transfer
Request Method: POST
Scope: ZohoCRM.settings.clientportal.ALL/UPDATE

Parameters

Parameter
Description
transfer_to : string, mandatory
The id of the user type to which you want to transfer the users.
personality_ids : string, mandatory
comma separated list of ids of the users you want to transfer.

Sample Request

Sample Response

{
    "users": [
        {
            "code": "SUCCESS",
            "details": {
                "personality_id": "1306462000000659009"
            },
            "message": "User has been transferred successfully",
            "status": "success"
        }
    ]
}

You can transfer up to 200 users in one API call. If there are more than 200 users to be transferred, a job will be scheduled.

Change Status of a User 

If you want to change the activate or deactivate a user, you can do so using this API.

Request URL: {api-domain}/crm/v4/settings/portals/<portal_name>/user_type/<user_type_id>/users/<user_id>/actions/change_status
Request Method: PUT
Scope: ZohoCRM.settings.clientportal.ALL/UPDATE

Parameters

Parameter
Description
active : Boolean, mandatory
To mention whether to activate or deactivate the user.

The following request changes the status of the user to inactive.

Sample Request

Sample Response

{
    "change_status": [
        {
            "code": "SUCCESS",
            "details": {
                "personality_id": "1306462000000665004"
            },
            "message": "Status of the user changed successfully.",
            "status": "success"
        }
    ]
}

Delete User from Portal

There may be times when you want to delete a user from a portal to prevent unauthorized access. You may use the Delete User from Portal API to do this.

Request URL: {api-domain}/crm/v4/settings/portals/<portal_name>/user_type/<user_type_id>/users
Request Method: DELETE
Scope: ZohoCRM.settings.clientportal.ALL/DELETE

Parameters

ParameterDescription
personality_ids : string, mandatoryComma separated ids of the users you want to delete from the portal.

Sample Request

Sample Response

{
    "users": [
        {
            "code": "SUCCESS",
            "details": {
                "personality_id": "1306462000000659009"
            },
            "message": "Portal user deleted successfully.",
            "status": "success"
        }
    ]
}

Please note you can delete up to 499 users from a portal synchronously. If you want to delete 500 or more users, a delete job will be scheduled.

We hope you found this post useful, and that it has given you a better understanding of the Portal APIs. See you next week with another useful topic.

If you have any questions or feedback, please let us know in comments below, or write to us at support@zohocrm.com. We would love to hear from you!


    • Recent Topics

    • Mail Search Not Working

      Hello, Mail search is not working at all. I've tried Chrome and Mozilla. I can try and search for an exact term, or even an email that is 1st in my email list. All search does is sit and spin, or it comes up with no results. I've also tried it on my android
    • Cannot Send Email to a Gmail Account

      Hello, I have a zoho-hosted email account, alex@chirochannelnetwork.com that has trouble sending to gmail accounts.  But not all gmail accounts, only some of them. I've tried to figure this out with clients, and they don't appear to be going into their
    • Unblock ME

      info@pentekykloi.gr Unable to send message;Reason:554 5.1.8 Email Outgoing Blocked. Learn more. I purchase additional storage
    • Cannot Print Landscape with Zoho Sheet

      I am noticing that when using the Zoho Sheet desktop for Mac, that even when selecting landscape as the print option, once you choose "Print", a second system dialog opens that automatically makes the view portrait again, and does not allow printing in
    • Power of Automation : Enhancing custom date field calculations by excluding Weekends and Holidays

      Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. Requirement:
    • Stock count by bin location

      Is there a configuration to make a stock count by bin or area and not by product. these is useful to manage count by area Regards
    • Temporary Outage in Zoho Cliq Affecting US Users – July 23, 2025

      We experienced a service disruption in Zoho Cliq that impacted core functionality for users in the US region. The issue occurred between Jul 23, 2025, 06:54:00 PM IST and 07:13:13 PM IST, lasting approximately 19 minutes. To restore service stability,
    • portal.assignUserInProfile - Não esta adicionando

      Estou encontrando problema com este comando portal.assignUserInProfile Não esta incluindo o usuário no portal Alguém pode me dizer o que pode ser thisapp.portal.assignUserInProfile("teste@gmail.com","Customer");
    • CRM emails vs Campaigns

      Please help me understand this. I am having a difficult understanding of "Campaigns" sent through CRM (real emails) or Zoho One (blast "potentially junk" emails) This is what I currently think emails sent via CRM are "real" emails sent through linked real personal email accounts and therefore are more likely to get delivered.  We use this for critical updates for our "Approved " accounts and certain other preferred statuses emails via Campaigns are sent through the Zoho server (like MailChimp, Campaign
    • Setting up property management in Zoho Books

      Hi, I run a property management business that manages property complexes. There are multiple owners, some owning more than one property on the same complex. My role is to manage the fees they pay for maintenance of common areas, such as the swimming pool
    • Reverse proxy

      We have a web application in the creator platform. When I launch a particular DNS, I would like that DNS to redirect to the web page of the application in creator app. Has anyone achieved it and if yes, please share how to do it.
    • Still client need to download .exe?

      Hello, the client for use zoho assist need everytime download .exe file and launch it?
    • Splitting a ticket's entire thread

      Hi, When you split a ticket it only splits the individual reply that you clicked "Split as new ticket" on. Is it not possible to split the entire ticket thread from that point into the new ticket (every reply from the split point forward)? Or is there
    • Editing the text on the Help Center home page

      Is it possible to edit the "Welcome to Help Center" message anywhere? This one: We'd like to be able to tailor it a little more ourselves.
    • WHMCS for Zoho Flow

      Can we use WHMCS for Zoho flow?
    • Online meetings through Calendar Booking form with options

      This is great to see and particularly for those users who don't have Zoho BOOKINGS. The shame of it all though is that it could have been better. Why do we have to set up separate booking forms for each type of meeting and for each online conferencing
    • Agents permission per department

      Hi Team, can I setup permission for each agent what they can do in each department, for example I want account department agents to only have view access to support department tickets and not allowed to assign or reply to clients. I am sure this would
    • CRM notes

      I want to be able to add notes to a task that do not necessarily get rolled up into an account or contact.   For example, I tasks to work on a Court Order for John Doe divorce account.  There might be lots of updates (in the form of notes) that employees
    • Introducing parent-child ticketing in Zoho Desk [Early access]

      Hello Zoho Desk users! We have introduced the parent-child ticketing system to help customer service teams ensure efficient resolution of issues involving multiple, related tickets. You can now combine repetitive and interconnected tickets into parent-child
    • Function #8: Add additional charges to invoices

      Here goes one of the highly sought-after custom functions in Zoho Books. If you find yourself needing to apply additional charges to customers on their invoices (say credit card surcharges, or fuel charges applicable to customers from a certain region,
    • Alternative / optional Position

      How do you create an alternative position or an optional position (article) in offers?
    • جمود في الصفحة عند حفظ عمل

      عندما اقوم باضافة ايقونة الى صفحة النموذج تجمد الصفحة ولا تعمل وتصبح مثل المظلة احدث الصفحة لا تعمل انتظر قليلا لا تعمل اقوم بنسخ رابط الصفحة والصقه في الرابط فيعمل
    • ZOHO Books Canadian payroll Integration

      Hello, I know ZOHO books doesn't have Canadian payroll and I dont believe its coming anytime soon. My question is there a Canadian payroll software that could be integrated with Zoho Books? Thank you HD
    • Zoho Desk Time Tracking and the Salary Privacy Issue

      Hello colleagues, Just wondering if anyone did hit the same wall? In the Desk, when the agent-specific hourly rates are enabled (Zoho Desk → Setup → Time Tracking → Billing Preferences), these Time Entries are being displayed in the Ticket History tab.
    • How to Delete, Disable, or Remove Streams from the Mail App?

      Is there a way to remove Streams from the mail app sidebar? I get too many notifications, it doesn't add any value to Zoho's functionality (especially since you can just make comments inside an email), and is distracting. I do not want notifications/alerts
    • Delay in MX updates

      Hi, I set MX Records 12 hours ago, and I am receiving email normally, but I still get notification MX record is not pointing correctly. Error: The MX records of your domain is not yet pointed to Zoho Mail. Why there is a delay in detecting MX records,
    • Bigin iOS and macOS app update: Link email messages to pipeline records.

      Hello everyone! In the latest version of the Bigin iOS(v1.11.9) and macOS(1.8.9) app, we have brought in support for an option to link email to pipeline records. This helps you to view emails specific to a deal, especially when a contact is associated
    • make.com integration

      Just wondering if anyone on Zoho One account connecting apps to Make.com We're on Canadian server (.com) and when connecting to Make.com, it keeps having error of Invalid Client ID. I have contacted both Zoho and Make and both sides said it's not an error
    • Article Numbers for KB articles

      Hello, I was wondering if it's possible to turn on article numbers/ part numbering for KB articles. If this is not already a feature, we'd like to request it. Frequently a solution will require multiple articles so tracking which articles are referenced
    • Refund Request ,Zoho Mail Subscription (zoho suport is not replying)

      Hi Zoho Team, I recently subscribed to the Zoho Mail yearly plan, but after evaluating it, I found that the interface does not suit my workflow. I’ve already canceled the subscription from my end. As I’m well within your 30-day refund window, I’m requesting
    • File Encryption - Zoho Desk iOS app update

      Hello, Everyone! We have now introduced the 'File Encryption' option within the Zoho Desk app as part of the HIPAA Compliance. This option allows the user to encrypt the attachments within the Desk mobile app, which acts as an additional layer of security.
    • Data encryption - Zoho Desk iOS

      Hello, Everyone! In the recent iOS version(v2.8.23) of the Zoho Desk app, we have supported data encryption. As a part of HIPAA Compliance, the Zoho Desk mobile app now allow users to encrypt the Desk mobile database as an additional layer of security.
    • Notify Admin when a user forgets to check-in or check-out at the designated time.

      Hello, I would like notify the Admin via email when a user forgets to check-in or check-out at the designated time. What is the best way to setup this email notification?
    • Assistance Needed with Prospect Conversion Issue

      Hi, I attempted to convert a prospect to an account, but received a pop-up notification indicating that the contact information matches an existing contact. I selected the option to add it to the existing contact, but it appears the prospect was not successfully
    • Mail Merge - unable to send more than 50 email

      Hi, I've subscribed to the pay email service because of the Mail Merge feature. However, I've found that this feature only allow to send up to 50 emails. I've to attach a screenshot for your reference. This limitation is not mentioned anywhere in service.
    • Zoholics Europe 2025: Your Ultimate Data Analysis (Zoho Analytics) Workshop Experience

      Why should you attend? This year, Zoholics Europe 2025 is putting data analysis centre stage. With a dedicated workshop designed to answer all your data-related questions, you’ll gain practical skills, real-time solutions, and expert insights that you
    • UK payroll entries

      Hey guys, Nett payroll payments are imported direct into the bank, using an external payroll system (will be glad for Zoho to have a UK payroll app) At present I have monthly recurring bills for HMRC which are auto entered & paid when due. This seems
    • Invoice status on write-off is "Paid" - how do I change this to "Written off"

      HI guys, I want to write off a couple of outstanding invoices, but when I do this, the status of the invoices shows as "Paid". Clearly this is not the case and I need to be able to see that they are written off in the customer's history. Is there a way
    • Reverse Charge Services (Non-EU) Showing Correctly in 84/85 and 67, But Missing in Box 46 - Germany

      Hi, I'm located in Germany and I’ve set up my expenses for non-EU services (e.g., OpenAI, DeepSeek) under the reverse charge mechanism (§ 13b UStG) in Zoho Books, and I noticed some discrepancies in the VAT Summary Report. What’s Correct: Reverse Charge
    • Zoho Live Chat/Support

      What is going on with Zoho support lately? I've tried to use the live chat feature 4 different times and it refuses to connect to any (despite waiting over 30 minutes one of the tries). I finally gave up and emailed my question nearly a week ago and still
    • Next Page