API Documentation
Text copied
File not found
Introduction

Zoho Projects provides a comprehensive set of REST APIs to manage your projects, connect third party applications, and transfer or retrieve data from Zoho Projects.

API Root Endpoint

https://projectsapi.zoho.com/

Getting Started
Mandatory Headers

Zoho Projects APIs require a mandatory header.

  1. Authorization : The OAuth access token to authenticate the user accessing data.

Example

$ curl -X GET https://projectsapi.zoho.com/api/v3/portal/687892/mytasks/   -H "Authorization:Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

HTTP Methods

Zoho Projects currently supports the following methods.

Method
Purpose
GET
Retrieve data
POST
Add or create data and perform actions
PUT
Update data
PATCH
Partial updates
DELETE
Delete data
Error Codes

Zoho Projects uses HTTP status codes to indicate success or failure of API calls. Status codes 2xx indicate success, 4xx indicate error in the information provided, and 5xx indicate server side errors. The following table lists some commonly used HTTP status codes.

HTTP Status Codes
Status Code Description
200 OK
201 Created
202 Accepted
204 No content
206 Partial Data
207 Multi-status
400 Bad request
401 Unauthorized
402 Payment Required
403 Forbidden (Unauthorised access)
405 Method not allowed (Method called is not supported for the API invoked)
409 Conflict
429 Too Many Requests
500 Internal error
501 Not Supported
Other Error Responses

Besides HTTP status codes and their corresponding error messages, error responses for Zoho Projects APIs also include a machine-parsable errorCode param to simplify error handling.

The different errorCodes and their uses are described below

URL_RULE_NOT_CONFIGURED 400

Please check if the URL you are trying to access is correct.

Resolution: The request URL specified is incorrect. Specify a valid request URL.

URL_RULE_NOT_CONFIGURED

{ "error": { "status_code": "400", "instance": "/api/v3/portal/15403665/projects/6000000030017/forums", "title": "URL_RULE_NOT_CONFIGURED", "error_type": "FIELDS_VALIDATION_ERROR", "details": [ { "message": "Given URL is wrong" } ] } }

INVALID_OAUTHTOKEN 400

This errorCode appears if the OAuthToken is invalid or has expired.

Resolution: Regenerate OAuthToken and try again.

INVALID_OAUTHTOKEN

{ "error": { "status_code": "400", "instance": "/api/v3/portal/15403665/projects/6000000030017/forums", "title": "INVALID_OAUTHTOKEN", "error_type": "FIELDS_VALIDATION_ERROR", "details": [ { "message": "Invalid OAuth access token." } ] } }

INVALID_INPUTSTREAM 400

The HTTP request specified has an invalid input parameter.

Resolution: The request URL input parameter specified is incorrect. Specify a valid request input parameter URL.

INVALID_INPUTSTREAM

{ "error": { "status_code": "400", "title": "INVALID_INPUTSTREAM", "error_type": "FIELDS_VALIDATION_ERROR", "details": [ {} ] } }

INVALID_METHOD 400

The http request method type is not a valid one

Resolution: You have specified an invalid HTTP method to access the API URL. Specify a valid request method.

INVALID_METHOD

{ "error": { "status_code": "400", "instance": "/api/v3/portal/15403665/projects/6000000030017/forums", "title": "INVALID_METHOD", "error_type": "FIELDS_VALIDATION_ERROR", "details": [ { "message": "Invalid request method", "field_name": "COPY" } ] } }

INVALID_PARAMETER_VALUE 400

The HTTP request specified has an invalid parameter value.

Resolution: The request URL input parameter value specified is incorrect. Specify a valid request input parameter value.

INVALID_PARAMETER_VALUE

{ "error": { "status_code": "400", "instance": "/api/v3/portal/15403665/projects/6000000030017/forums", "method": "GET", "error_type": "FIELDS_VALIDATION_ERROR", "details": [ { "message": "You don't have sufficient permission to create an internal forum.", "field_name": "type" } ], "title": "INVALID_PARAMETER_VALUE" } }

INTERNAL_SERVER_ERROR 500

Server encountered an unexpected error. Contact

Resolution: support@zohoprojects.com

INTERNAL_SERVER_ERROR

{ "error": { "status_code": "500", "instance": "/api/v3/portal/15403665/projects/6000000030017/forums", "method": "GET", "error_type": "OPERATIONAL_VALIDATION_ERROR", "details": [ { "message": "Internal server error. Please contact support for further details.", "message_key": "zp.general.error" } ], "title": "INTERNAL_SERVER_ERROR" } }

OAuth 2.0 for v3 APIs- An Overview
Overview

The Zoho Projects API uses the OAuth2.0 protocol for authentication. It is an industry-standard protocol specification that enables third-party applications (clients) to gain delegated access to protected resources in Zoho via an API.

Why should we use OAuth2.0?
  • Clients are not required to support password authentication or store user credentials.
  • Clients gain delegated access, i.e., access only to resources authenticated by the user.
  • Users can revoke the client's delegated access anytime.
  • OAuth2.0 access tokens expire after a set time. If the client faces a security breach, user data will be compromised only until the access token is valid.
How OAuth2.0 works?
Terminologies

The following are some terms you need to know before you start using the Zoho Projects APIs.

Protected resources

The Zoho Projects resources, such as Projects, Tasks, Forum, etc.

Resource server

The Zoho Projects server that hosts protected resources.

Resource owner

Any end-user of your account, who can grant access to the protected resources.

Client

An application that sends requests to the resource server to access the protected resources on behalf of the end-user.

Client ID

The consumer key generated from the connected application.

Client Secret

The consumer secret generated from the connected application.

Authentication server

Authorization server provides the necessary credentials (such as Access and Refresh tokens) to the client. In this case, it will be the Zoho Projects authorization server.

Authentication code

The authorization server creates a temporary token and sends it to the client via the browser. The client will send this code to the authorization server to obtain access and refresh tokens.

Tokens

Access Token

A token that is sent to the resource server to access the protected resources of the user. The Access token provides secure and temporary access to Zoho Projects APIs and is used by the applications to make requests to the connected app. Each access token will be valid only for an hour and can be used only for the set of operations that are described in the scope.

Access Token

A token that can be used to obtain new access tokens. This token has an unlimited lifetime until it is revoked by the end-user.

Scopes

Zoho Projects APIs use selected scopes, which control the type of resource that the client application can access. Tokens are usually created with various scopes to ensure improved security. For example, you can generate a scope to create or view a projects, or to view tasks and so on. Scopes contain three parameters€” service name, scope name, and operation type. The format to define a scope is scope=service_name.scope_name.operation_type

Example

https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.projects.ALL

Group Scopes

Group scope provide complete access to all functions the user can perform on the record. For instance, a group scope can allow a user to read, create, update, and delete records in all modules.

Example:

https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.portals.ALL,ZohoProjects.projects.ALL&client_id={client_id}&response_type=code&access_type={"offline"or"online"}&redirect_uri={redirect_uri}

In the above example, the user has access to all modules in the client ZohoProjects account

Other examples are

  • scope=ZohoProjects.modules.READ(Read-only permission)
  • scope=ZohoProjects.modules.CREATE
  • scope=ZohoProjects.modules.UPDATE
  • scope=ZohoProjects.modules.DELETE
Separate Scopes

Separate scopes are used to provide access to data in a particular module without access to other modules.

Example:

https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.portals.ALL,ZohoProjects.projects.ALL&client_id={client_id}&response_type=code&access_type={"offline"or"online"}&redirect_uri={redirect_uri}

Additionally, you can set specific permissions, like read, create, update or delete, for each module. For examples:

The above scope gives the user access to only the portal and projects modules from the client Zoho Projects account.

Register your Application

Before you get started with authorization and make any calls using the Zoho Projects APIs, you need to register your application with Zoho Projects.

To register,

  • Go to Zoho Developer Console.
  • Choose a client type:
    • Java Script: Applications that run exclusively on a browser and are independent of a web server.
    • Web Based: Applications that are clients running on a dedicated HTTP server.
    • Mobile: Applications that are installed on smart phones and tablets.
    • Non-browser Mobile Applications: Applications for devices without browser provisioning such as smart TVs and printers.
    • Self Client: Stand-alone applications that perform only back-end jobs (without any manual intervention) like data sync.

    For more details, refer to OAuth Overview.

  • Enter the following details:
    • Client Name: The name of your application you want to register with Zoho.
    • Homepage URL: The URL of your web page.
    • Authorized Redirect URIs: A valid URL of your application to which Zoho Accounts redirects you with a grant token(code) after successful authentication.
  • Click CREATE.
  • You will receive the following credentials:
    • Client ID: The consumer key generated from the connected app.
    • Client Secret: The consumer secret generated from the connected app.
Note

https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.portals.ALL,ZohoProjects.projects.ALL&client_id={client_id}&response_type=code&access_type={"offline"or"online"}&redirect_uri={redirect_uri}

Authorization Request

To use the Zoho Projects APIs, the users must authenticate the application to make API calls on their behalf with an access token.

The access token, in return, must be obtained from a grant token (authorization code). The Zoho Projects APIs use the authorization code grant type to provide access to protected resources.

There are two ways in which you can generate the grant token based on the client type.

Web-based application

Web-based applications are chosen when your application is used by multiple users and requires user intervention during authorization. For this client type, you must use redirection-based code generation. In this authorization flow,

  • The user clicks the Login with Zoho button on any third-party web-based application.
  • The application redirects the user to the Zoho Login page, and the user enters the Zoho credentials.
  • The web application redirects the user to the Zoho OAuth server with the required scope in the Accounts URL:
    Note

    "https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.portals.ALL&client_id={client_id}&response_type=code&access_type={"offline"or"online"}&redirect_uri={redirect_uri}"

    As you can see, the request URL has the parameters "scope", "client_id", "response_type", "access_type", and "redirect_uri". Also, the page displays the chosen organization and the data (scope) that the application wants to access.
    Parameters

    scope

    Data that your application wants to access. Refer to Scopes for more details.

    client_id

    Client ID(consumer key) that you obtained during client registration.

    redirect_uri

    Callback URL that you specified during client registration.

    response_type

    Enter code.

    access_type

    Enter access_type as online or offline . If you want to generate the refresh token, set this value as offline.

  • Based on the user's login details, the system automatically detects the user's domain and uses the domain-specific authentication URL to obtain the organization-specific grant token (code).
  • When the user clicks Accept: The application gets authorized. The organization-specific grant token is sent as a parameter in the redirect_uri.
  • A back-end script from your end needs to store the following details from the above URL.
    • code={grant_token} - This is used to generate access and refresh tokens.
    • location={domain} - This tells you the domain of the user from which you have to make API calls.
    • accounts-server={accounts_URL} - This is your accounts URL which you have to use to generate access and refresh tokens.
  • The application exchanges the authorization code for an access token.
  • When the user clicks Reject: The browser redirects to the redirect URI with the parameter error=access_denied, and your application is denied access to the user's data in Zoho Projects.
Note
  • The grant token is valid only for two minutes. Refer to the Token Validity page for more details.
  • The authorization URL has the scope for Users. You can change the scope as per your requirement.

Possible Errors

ERROR_invalid_response_type

Resolution: The value of the "response_type" key is not "code". Update the value as "code".

(or)

You have not passed the mandatory keys in the request. Pass all the mandatory keys in the request to generate the organization-specific grant token.

ERROR_invalid_client

Resolution: The client ID is wrong or empty. Pass the right client ID. You can check your client ID from the developer console.

ERROR_invalid_redirect_uri

Resolution: The redirect URI value passed, and the one registered in the developer console mismatches. Pass the right redirect URI.

ERROR_invalid_scope

Resolution: The scope is invalid. Pass valid scopes. You can refer to the list of scopes here.

Self-Client option

Use this method to generate the organization-specific grant token if your application does not have a domain and a redirect URL.You can also use this option when your application is a standalone server-side application performing a back-end job.

  1. Go to Zoho Developer Console and log in with your Zoho Projects username and password.
  2. Choose Self Client from the list of client types, and click Create Now.
  3. Click OK in the pop up to enable a self client for your account.
  4. Now, your client ID and client secret are displayed under the Client Secret tab.
  5. Click the Generate Code tab and enter the required scope separated by commas. Refer to our list of Scopes, for more details. The system throws an 'Enter a valid scope' error when you enter one or more incorrect scopes.
  6. Select the Time Duration for which the grant token is valid. Please note that after this time, the grant token expires.
  7. Enter a description and click Create.
  8. The organization-specific grant token code for the specified scope is displayed. Copy the grant token.
Generate Access Token and Refresh Token

OAuth2.0 requests are usually authenticated with an access token, which is passed as bearer token. To use this access token, you need to construct a normal HTTP request and include it in an Authorization header along with the value of Bearer.

POST

https://accounts.zoho.com/oauth/v2/token

Note
  • You must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.
    • For US: https://accounts.zoho.com
    • For AU: https://accounts.zoho.com.au
    • For EU: https://accounts.zoho.eu
    • For IN: https://accounts.zoho.in
    • For CN: https://accounts.zoho.com.cn
  1. Make a POST request with the following URL. Replace {Accounts_URL} with your domain-specific Zoho accounts URL when you make the request.

{Accounts_URL}/oauth/v2/token

Note: For security reasons, pass the below parameters in the body of your request as form-data.

Parameter Description
code Authorization code obtained after generating the grant token.
client_id Client ID obtained after registering the client.
client_secret Client secret obtained after registering the client.
grant_type "authorization_code"
redirect_uri Redirect URI mentioned while registering the client.

This completes the authentication. Once your app receives the access token, send the token in your HTTP authorization header to Zoho Projects API with the value "Zoho-oauthtoken {access_token}" for each endpoint (for each request).

Possible Errors

invalid_client

Resolution: You have passed an invalid Client ID or secret. Specify the correct client ID and secret

(or)

There is a domain mismatch. You have registered the client and generated the grant token in a certain domain (US), but generating the tokens from a different domain (EU). Ensure that you generate the grant, access, and refresh tokens from the same domain using the same domain URL or Enable Multi-DC for your client to generate tokens from any domain.

(or)

You have passed the wrong client secret when multi-DC is enabled. Each DC holds a unique client secret. Ensure to pass the right client secret for that DC.

invalid_code

Resolution: The grant token has expired. The grant token is valid only for one minute in the redirection-based flow. Generate the access and refresh tokens before the grant token expires.

(or)

You have already used the grant token. You can use the grant token only once.

(or)

The refresh token to generate a new access token is wrong or revoked. Specify the correct refresh token value while refreshing an access token.

invalid_redirect_uri

Resolution: The redirect URI in the request mismatches the one registered in the developer console. Specify the correct redirect URI in the request.

Query Params

code=1000.fadbcaxxxxxxxxxx.xxxxxxxxxxx
&grant_type=authorization_code
&client_id=1000.R2Z0WWxxxxxxxxxxxxx
&client_secret=39c689de68c712fa5f1bxxxxxxxxx
&redirect_uri=https://www.zylker.com/oauthgrant

Sample Response

{
"access_token": "1000.8d4ec8d6xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"expires_in_sec": 3600,
"scope": "ZohoProjects.portals.ALL ZohoProjects.projects.ALL ZohoProjects.activities.READ ZohoProjects.status.READ ZohoProjects.status.CREATE ZohoProjects.milestones.ALL ZohoProjects.tasklists.ALL ZohoProjects.tasks.ALL ZohoProjects.timesheets.ALL ZohoProjects.bugs.ALL ZohoProjects.events.ALL ZohoProjects.forums.ALL ZohoProjects.users.ALL ZohoProjects.search.READ ZohoProjects.clients.ALL ZohoProjects.documents.ALL ZohoPC.files.ALL ZohoBugtracker.portals.READ ZohoBugtracker.projects.ALL ZohoBugtracker.milestones.ALL ZohoBugtracker.timesheets.ALL ZohoBugtracker.bugs.ALL ZohoBugtracker.events.ALL ZohoBugtracker.forums.ALL ZohoBugtracker.users.ALL ZohoBugtracker.search.READ ZohoBugtracker.documents.ALL ZohoBugtracker.tags.READ ZohoSheet.dataAPI.READ ZohoProjects.custom_fields.ALL",
"api_domain": "https://www.zohoapis.com",
"token_type": "Bearer",
"expires_in": 3600000
}

Refresh Access Token

Access tokens expire after an hour of generation. To generate a new access token, use the refresh token you generated earlier.

POST

https://accounts.zoho.com/oauth/v2/token

Note
  • You must use your domain-specific Zoho Accounts URL to refresh your access token.
    • For US: https://accounts.zoho.com
    • For AU: https://accounts.zoho.com.au
    • For EU: https://accounts.zoho.eu
    • For IN: https://accounts.zoho.in
    • For CN: https://accounts.zoho.com.cn
Make a POST request with the following URL:

{Accounts_URL}/oauth/v2/token?refresh_token={refresh_token}&client_id={client_id}&client_secret={client_secret}&grant_type=refresh_token

Note
  • You must use your domain-specific Zoho Accounts URL to refresh your access token.
    • We have provided with a sample test OAuth in all the examples, so that you can test any example on your own. You can replace the sample OAuth Token with your actual token to test requests from your Zoho Projects account.
    • For applications with multiple organizations, the refresh tokens generated for one organization in an environment cannot be used for another organization. For instance, you cannot use the refresh token generated for an organization in the Production environment to generate access tokens for the organizations in the sandbox or developer accounts.
    • For information about the validity of the tokens, refer to the Token Validity page.

Query Params

?refresh_token=1000.dd7e67013axxxxxxxxx.xxxxxxxx
&client_id=1000.R2Z0Wxxxxxxxxxxxxxxx
&client_secret=39c689de68xxxxxxxx
&scope=ZohoProjects.projects.READ,ZohoProjects.portal.READ
&redirect_uri=https://www.zylker.com/oauthgrant
&grant_type=refresh_token

Sample Response

{
"access_token": "1000.a4b5e19baaf3cxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"scope": "ZohoProjects.portals.ALL ZohoProjects.projects.ALL ZohoProjects.activities.READ ZohoProjects.status.READ ZohoProjects.status.CREATE ZohoProjects.milestones.ALL ZohoProjects.tasklists.ALL ZohoProjects.tasks.ALL ZohoProjects.timesheets.ALL ZohoProjects.bugs.ALL ZohoProjects.events.ALL ZohoProjects.forums.ALL ZohoProjects.users.ALL ZohoProjects.search.READ ZohoProjects.clients.ALL ZohoProjects.documents.ALL ZohoPC.files.ALL ZohoBugtracker.portals.READ ZohoBugtracker.projects.ALL ZohoBugtracker.milestones.ALL ZohoBugtracker.timesheets.ALL ZohoBugtracker.bugs.ALL ZohoBugtracker.events.ALL ZohoBugtracker.forums.ALL ZohoBugtracker.users.ALL ZohoBugtracker.search.READ ZohoBugtracker.documents.ALL ZohoBugtracker.tags.READ ZohoSheet.dataAPI.READ ZohoProjects.custom_fields.ALL",
"token_type": "Bearer",
"expires_in": 3600
}

Revoking Refresh Token

If you want to revoke your refresh token,

POST

https://accounts.zoho.com/oauth/v2/token

Note
  • You must use your domain-specific Zoho Accounts URL to revoke your refresh token.
  • If you have multiple organizations, the refresh token that you revoke will be specific to a particular organization, and this action will not have an effect on other organizations in your application.

{Accounts_URL}/oauth/v2/token/revoke?token={refresh_token}

Query Params

?token=1000.dd7e67013abxxxxxxxxx.40bf1xxxxxxxx

Token Validity

Grant Token (Authorization code)

  • Grant token is a one-time use token and valid for two minutes, by default. If you want to extend the expiry time, choose the required time from the drop-down while generating the token from the developer console (applicable only to self-clients).
  • You can generate a maximum of 10 grant tokens in a span of 10 minutes per client ID.

Access Token

  • Each access token is valid for one hour.
  • You can generate a maximum of 10 access tokens in a span of 10 minutes.
  • When you generate the 11th access token, the first created access token will be deleted.

Refresh Token

  • Refresh tokens do not expire until a user revokes them.
  • You can generate a maximum of 10 access tokens from a refresh token in a span of 10 minutes.
  • You can generate a maximum of 20 refresh tokens in a span of 10 minutes per client ID.
  • When you generate the 21st refresh token, the first created refresh token gets deleted.
Custom Fields

Custom fields can be created in all module layouts. These fields allow you to capture different types of information based on the module's requirements. For example, a checkbox field can be used to track a project condition, enabling users to validate it based on whether the checkbox is selected or not.

Note
  • API names for Custom Fields are currently supported for Tasks and Projects API only.
  • You can use this API to retrieve the details of the custom fields.
Field Types
Overview

Zoho Projects supports various custom field types, such as text, numeric, URL, date, and time. Below are the field types available in the Create and Update APIs.

Note
  • Send all inputs as an input stream (application/json).
  • Use API names for custom fields.
Single-Line Field

Captures text in a single line. Maximum length: 200 characters

JSON Schema

{ "key": "string"}

Example

{"title": "Project Ara"}

Multi-Line Field

Captures text in multiple lines. Use "\n" to separate lines. Maximum length: 1,000 characters

JSON Schema

{ "key": "string"}

Example

{"description": "The respective team\n is a prototype."}

Pick List Field

Allows selection of a single option from a predefined list. Maximum options: 50

JSON Schema

{ "key": "string"}

Example

{"gender": "Male"}

Multi-Select Field

Allows selection of multiple options from a predefined list. You can add or remove values dynamically, or replace the existing values. Maximum selectable options: 100

Note
  • The add and remove options optimize the update process for Multi-Select fields, eliminating the additional GET call to retrieve existing values before updating.
  • You can directly add or remove values in an Update API request or use the Create API format.

Sample Input of Multi-Select Field in Create APIs

{ "key": [ "C", "D" ] }

Example

{ "parts_required": [ "HDD", "CD" ] }

Sample Input of Multi-Select Field in Create APIs

{ "key": [ { "add": [ "A", "B" ], "remove": [ "E", "F" ]} }] }

Example

{ "parts_required": [ { "add": [ "processor", "GPU" ],"remove": ["POWER-CORD", "RAM" ] }] }

User Pick List Field

Allows selection of a single user.

JSON Schema

{ "key": { "zpuid": "user id" }}

Example

{ "reporter": { "zpuid": "123454321" }}

Multi-User Field

Allows selection of multiple users from a predefined list. You can add or remove values dynamically, or replace the existing values. Maximum selectable users: 500

Note
  • The add and remove options optimize the update process for Multi-User fields, eliminating the additional GET call to retrieve existing values before updating.
  • You can directly add or remove values in an Update API request or use the Create API format.

Sample Input of Multi-User Field in Create APIs

{ "key": [ { "zpuid": "User Id 5" }, { "zpuid": "User Id 6" } ] }

Example

{ "user_group": [ { "zpuid": "7845996622" },{ "zpuid": "7876456433" } ] }

Sample Input of Multi-User Field in Update APIs

{ "key": [ { "add": [{ "zpuid": "User Id 2" },{ "zpuid": "User Id 3" }],"remove": [ { "zpuid": "User Id 4" }, { "zpuid": "User Id 5" } ] }] }

Example

{ "user_group": [ { "add": [{ "zpuid": "712554144112" },{ "zpuid": "71255413512" }],"remove": [ { "zpuid": "778946456" }, { "zpuid": "71346753132" } ] }] }

Date Field

Captures date in the yyyy-MM-dd format (ISO 8601).

JSON Schema

{ "key": "string"}

Example

{"due_date": "2022-10-17","start_date":"2019-09-17","end_date": "2024-12-17"}

Time Field

Captures the time in HH:MM format.

JSON Schema

{ "key": "string"}

Example

{"start_time": "23:30","end_time": "13:30"}

Time Stamp Field

Captures date and time in ISO 8601 format. Use yyyy-MM-dd'T'HH:mm:ss'Z' for UTC or yyyy-MM-dd'T'HH:mm:ss[+|-]HH:mm for other time zones. (ISO 8601 Time Stamp format).

JSON Schema

{ "key": "string"}

Example

{"start_time": "2022-12-16T18:56:00.000Z"}

Check Box Field

Captures boolean values (true or false) for a condition.

JSON Schema

{ "key": "boolean"}

Example

{"patent_applied": true}

Currency Field

Captures currency values with amount. Maximum length: 100 characters

JSON Schema

{ "currency": { "amount":1201234.12 }}

Example

{ amount":12345678901234.12 }}

Percentage Field

Captures percentage values as numbers. Maximum length: 20 characters

JSON Schema

{ "key": "number"}

Example

{"completion_percentage": 10}

Number Field

Captures whole numbers. Maximum length: 19 digits

JSON Schema

{ "key": "number"}

Example

{"patent_applied": 1234567898}

Decimal Field

Captures decimal values. Maximum length: 17 digits

JSON Schema

{ "key": "decimal"}

Example

{"patent_applied": 1234567898}

Email Field

Captures email addresses. Maximum length: 200 characters

JSON Schema

{ "key": "string"}

Example

{"email":"projects@zohocorp.com"}

Phone Number Field

Captures phone numbers (Maximum length: 15 characters, including + and ()).

JSON Schema

{ "key": "string"}

Example

{"mobile":"1234567890"}

URL Field

Captures web links. If no protocol is specified, https:// is used by default. Maximum length: 200 characters

JSON Schema

{ "key": "string"}

Example

{"link":"https://projects.zoho.com"}

API Limitations

You can request an API up to 100 times within 2 minutes. Exceeding this limit restricts further requests for 30 minutes.

Portals

This module handles portal-related operations in Zoho Projects. Use this API to create a new portal, export portal data, manage portal settings, and retrieve details such as portal license data and allowed features.

Get All Portals

Retrieve all the details of the Zoho Projects portal.

GET

/api/v3/portals

OAuth Scope:

ZohoProjects.portals.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portals' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portals");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200[ { "owner" : { "zpuid" : "6000000002407", "full_name" : "Zoho Projects", "name" : "Zoho Projects", "last_name" : "", "id" : 23163805, "is_client_user" : false, "first_name" : "Zoho Projects", "email" : "zohoprojects@zoho.com" }, "portal_name" : "zylkerportal", "is_default_portal" : false, "profile_id" : 9000000002844, "timezone" : "Europe/Dublin", "profile" : { "name" : "Portal Owner", "id" : 9000000002844 }, "portal_owner" : 26827978, "org_name" : "zylkerportalzohodotcom", "zsoid" : "26828068", "org_logo" : "/images/svg/zps-logo-default.svg" } ]
Get Portal Details

Retrieve a specific detail of the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "portal_details" : { "owner" : { "zpuid" : "6000000002407", "full_name" : "Zoho Projects", "name" : "Zoho Projects", "last_name" : "", "id" : 23163805, "is_client_user" : false, "first_name" : "Zoho Projects", "email" : "zohoprojects@zoho.com" }, "business_details" : { "start_time" : "0:00", "data_format" : "MM-dd-yyyy", "weekends" : [ ], "time_format" : "hh:mm aaa", "working_days" : [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], "week_start_day" : 0, "end_time" : "24:00", "week_start_year" : 1 }, "logo_url" : "/images/svg/zps-logo-default.svg", "timezone" : "Europe/Dublin", "name" : "zylkerportal", "id" : 26828068, "plan_details" : { "projects_service_plan" : "Free", "bugtracker_service_plan" : "Free" }, "org_name" : "zylkerportalzohodotcom", "is_customdomain_enabled" : false } }

This module covers search related operations within Zoho Projects. Use this API to retrieve search results from modules and the portal.

Get Search Results

Retrieve search results from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/search

OAuth Scope:

ZohoProjects.portals.READ, ZohoSearch.securesearch.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

search_term

String

required

Enter the search term.

module

String

required

Enter the module name.
Accepted values: all,projects,milestones,tasklists,tasks,bugs,forums,events,status

status

String

required

Specify the module status.
Accepted values: all,active,archived,template

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/search?page="1"&per_page="10"&search_term="taskname"&module="task"&status="active"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/search");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""category_id"", "");
   uriBuilder.addParameter(""path"", "");
   uriBuilder.addParameter(""module"", "");
   uriBuilder.addParameter(""status"", "");
   uriBuilder.addParameter(""sortbyfield"", "");
   uriBuilder.addParameter(""is_zia"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" search_term : "task name" module : "task" status : "active"

Sample Response

"200"{ "count" : 8, "results" : [ { "created_time" : "2022-09-26T01:14:24.259Z", "updated_time" : "2024-07-12T04:50:03.717Z", "start_time" : "2022-09-26T00:00:00.000Z", "module_info" : { "name" : "Projects", "id" : "123905000000027005" }, "extra_data" : { "due_date" : "2023-05-20T23:59:59.000Z", "status" : { "color" : "statuscol_darkshadegreen", "name" : "active", "id" : "123905000000027089", "color_code" : "#2cc8ba", "is_closed" : false } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "assignee" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ], "entity_id" : "123905000000070005", "title" : "ProjectDemoFor ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "key" : "ZO-2", "tags" : [ ] }, { "created_time" : "2022-09-26T02:33:42.849Z", "updated_time" : "2023-04-27T09:17:15.946Z", "module_info" : { "name" : "Forums", "id" : "123905000000470001" }, "extra_data" : { "last_activity_time" : "2023-04-27T09:17:15.946Z", "flag" : "internal", "is_announcement" : false, "is_sticky_post" : true, "type" : "normal", "category" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070009" } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070061", "title" : "Trial Forum for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T01:16:26.000Z", "updated_time" : "2022-09-28T08:35:15.051Z", "module_info" : { "name" : "Issue", "id" : "123905000000340005" }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070035", "title" : "Trial Issue for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ], "completed_time" : "2022-09-28T08:35:15.051Z", "extra_data" : { "due_date" : "2023-02-14T01:15:00.000Z", "severity_id" : "123905000000054149", "status" : { "color" : "statuscol_lightgrey", "name" : "closed", "id" : "123905000000054089", "color_code" : "#49e6cf", "is_closed" : true } }, "assignee" : [ { "zpuid" : "123905000000054641", "name" : "Unassigned User", "last_name" : "", "first_name" : "Unassigned User", "email" : "Unassigned User", "zuid" : "0" } ], "module_display_name" : "Issue", "key" : "PI1-I1" }, { "created_time" : "2022-11-11T12:38:42.977Z", "updated_time" : "2022-11-11T12:38:42.977Z", "module_info" : { "name" : "Events", "id" : "123905000000470005" }, "extra_data" : { "scheduled_time" : "2022-11-11T13:00:00.000Z", "participants" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ] }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000088001", "title" : "iso_test_event", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T07:05:10.336Z", "updated_time" : "2024-09-09T10:20:48.920Z", "module_info" : { "name" : "Events", "id" : "123905000000470005" }, "extra_data" : { "scheduled_time" : "2022-09-25T19:00:00.000Z", "participants" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ] }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070073", "title" : "Date for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T01:15:01.393Z", "updated_time" : "2022-09-26T01:15:01.393Z", "start_time" : "2022-09-25T14:00:00.000Z", "module_info" : { "name" : "Milestone", "id" : "123905000000047001" }, "extra_data" : { "flag" : "internal", "is_archived" : false, "due_date" : "2023-05-20T13:59:59.000Z", "is_completed" : false, "status" : { "color" : "statuscol_open", "name" : "active", "id" : "123905000000047009", "color_code" : "#74cb80", "is_closed" : false } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "assignee" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ], "entity_id" : "123905000000070021", "title" : "Trial for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "module_display_name" : "Milestone", "tags" : [ ] }, { "created_time" : "2022-09-26T01:16:48.075Z", "updated_time" : "2022-09-28T08:00:07.466Z", "module_info" : { "name" : "Task Lists", "id" : "123905000000340005" }, "extra_data" : { "flag" : "internal", "milestone" : { "name" : "Trial for ISO", "id" : "123905000000070021" }, "is_completed" : true }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070051", "title" : "Trial TaskList for ISO", "tags" : [ ] }, { "created_time" : "2022-09-26T02:34:32.551Z", "updated_time" : "2022-09-26T02:34:32.551Z", "module_info" : { "name" : "Status", "id" : "123905000000470003" }, "extra_data" : { "created_on" : "2022-09-26T02:34:32.551Z" }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070067", "title" : "
This is a trial Status for checking ISO format
", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] } ] }
Get Search Results in a Project

Retrieve search results from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/search

OAuth Scope:

ZohoProjects.portals.READ, ZohoSearch.securesearch.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

search_term

String

required

Enter the search term.

module

String

required

Enter the module name.
Accepted modules: all,milestones,tasklists,tasks,bugs,forums,events,status

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/search?page="1"&per_page="10"&search_term="taskname"&module="task"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/search");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""category_id"", "");
   uriBuilder.addParameter(""path"", "");
   uriBuilder.addParameter(""module"", "");
   uriBuilder.addParameter(""sortbyfield"", "");
   uriBuilder.addParameter(""is_zia"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" search_term : "task name" module : "task"

Sample Response

"200"{ "count" : 7, "results" : [ { "created_time" : "2022-09-26T02:33:42.849Z", "updated_time" : "2023-04-27T09:17:15.946Z", "module_info" : { "name" : "Forums", "id" : "123905000000470001" }, "extra_data" : { "last_activity_time" : "2023-04-27T09:17:15.946Z", "flag" : "internal", "is_announcement" : false, "is_sticky_post" : true, "type" : "normal", "category" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070009" } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070061", "title" : "Trial Forum for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T01:16:26.000Z", "updated_time" : "2022-09-28T08:35:15.051Z", "module_info" : { "name" : "Issue", "id" : "123905000000340005" }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070035", "title" : "Trial Issue for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ], "completed_time" : "2022-09-28T08:35:15.051Z", "extra_data" : { "due_date" : "2023-02-14T01:15:00.000Z", "severity_id" : "123905000000054149", "status" : { "color" : "statuscol_lightgrey", "name" : "closed", "id" : "123905000000054089", "color_code" : "#49e6cf", "is_closed" : true } }, "assignee" : [ { "zpuid" : "123905000000054641", "name" : "Unassigned User", "last_name" : "", "first_name" : "Unassigned User", "email" : "Unassigned User", "zuid" : "0" } ], "module_display_name" : "Issue", "key" : "PI1-I1" }, { "created_time" : "2022-11-11T12:38:42.977Z", "updated_time" : "2022-11-11T12:38:42.977Z", "module_info" : { "name" : "Events", "id" : "123905000000470005" }, "extra_data" : { "scheduled_time" : "2022-11-11T13:00:00.000Z", "participants" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ] }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000088001", "title" : "iso_test_event", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T07:05:10.336Z", "updated_time" : "2024-09-09T10:20:48.920Z", "module_info" : { "name" : "Events", "id" : "123905000000470005" }, "extra_data" : { "scheduled_time" : "2022-09-25T19:00:00.000Z", "participants" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ] }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070073", "title" : "Date for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] }, { "created_time" : "2022-09-26T01:15:01.393Z", "updated_time" : "2022-09-26T01:15:01.393Z", "start_time" : "2022-09-25T14:00:00.000Z", "module_info" : { "name" : "Milestone", "id" : "123905000000047001" }, "extra_data" : { "flag" : "internal", "is_archived" : false, "due_date" : "2023-05-20T13:59:59.000Z", "is_completed" : false, "status" : { "color" : "statuscol_open", "name" : "active", "id" : "123905000000047009", "color_code" : "#74cb80", "is_closed" : false } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "assignee" : [ { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" } ], "entity_id" : "123905000000070021", "title" : "Trial for ISO", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "module_display_name" : "Milestone", "tags" : [ ] }, { "created_time" : "2022-09-26T01:16:48.075Z", "updated_time" : "2022-09-28T08:00:07.466Z", "module_info" : { "name" : "Task Lists", "id" : "123905000000340005" }, "extra_data" : { "flag" : "internal", "milestone" : { "name" : "Trial for ISO", "id" : "123905000000070021" }, "is_completed" : true }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070051", "title" : "Trial TaskList for ISO", "tags" : [ ] }, { "created_time" : "2022-09-26T02:34:32.551Z", "updated_time" : "2022-09-26T02:34:32.551Z", "module_info" : { "name" : "Status", "id" : "123905000000470003" }, "extra_data" : { "created_on" : "2022-09-26T02:34:32.551Z" }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "entity_id" : "123905000000070067", "title" : "
This is a trial Status for checking ISO format
", "created_by" : { "zpuid" : "123905000000054003", "name" : "Thejasvikha Thejasvikha", "last_name" : "Thejasvikha", "first_name" : "Thejasvikha", "email" : "thejas.sharan@zohocorp.com", "zuid" : "70273061" }, "tags" : [ ] } ] }
Projects

This module covers project-related operations within Zoho Projects. Use this API to retrieve project activity, view or update project edits, get recent projects, manage issues and tasks, retrieve or add default visibility settings, access favorite templates or gallery templates, add projects from templates, and export custom status timelines.

Get All Projects

Retrieve a list of all projects from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects

OAuth Scope:

ZohoProjects.projects.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

sort_by

String

Enter the sort criteria. Accepted values:ASC(field_name) or DESC(field_name)

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects?page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":["Test"],"relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1AND2"}]&sort_by="ASC(last_updated_time)"&view_id="7000000082321"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":["Test"],"relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "Test" ], "relative_columns" : [ { "cfid" : "2", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1 AND 2" } ] sort_by : "ASC(last_updated_time)" view_id : "7000000082321"

Sample Response

200[ { "end_date" : "2029-01-01", "project_type" : "active", "is_public_project" : "false", "is_rollup_project" : "false", "name" : "via_api_006_03_DEC_1157AM", "is_strict_project" : "false", "id" : "7000000082003", "key" : "54", "start_date" : "2024-09-30" } ]
Get Project Details

Retrieve details of a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]

OAuth Scope:

ZohoProjects.projects.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "end_date" : "2029-01-01", "picklist_11sep" : "abc", "is_public_project" : "false", "description" : "
source project  for testing clone project
", "is_strict_project" : "false", "multiline_11sep" : "multiline \nMULTILINE", "budget_info" : { "hourly_budget" : "1200:00", "billing_method" : "project_hours", "forecasted_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_hours" : "00:00", "bcy_forecasted_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "forecasted_hours" : "00:00", "remaining_hours" : "00:00", "actual_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "actual_hours" : "00:00", "bcy_planned_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget_type" : "based_on_project", "bcy_actual_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget" : { "amount" : "10000000", "formatted_amount" : "$ 1,00,00,000.00", "currency_code" : "USD", "currency_id" : "7000000015018" } }, "issues" : { "closed_count" : "0", "open_count" : "0" }, "is_completed" : "false", "id" : "7000000010005", "key" : "5", "tasks" : { "closed_count" : "0", "open_count" : "5" }, "number_11sep" : "1212", "start_date" : "2024-09-30", "phone_11sep" : "9879879877", "project_type" : "active", "created_time" : "2024-09-02T08:04:09.657Z", "check_box_sample_11sep" : "true", "is_rollup_project" : "true", "one" : "123456_single", "created_by" : { "zpuid" : "7000000002411", "name" : "Raj571", "last_name" : "R", "first_name" : "Raj571", "zuid" : "25450833" }, "percent_complete" : "0", "tags" : [ { "id" : "7000000015084", "color_class" : "bg-tag8" } ], "layout" : { "name" : "Standard Layout", "id" : "7000000000506", "is_default" : "true", "type" : "public" }, "completed_time" : "1767099600000", "single_line_test_1446" : "singleline", "name" : "SourceP", "updated_by" : { "zpuid" : "7000000002411", "name" : "Raj571", "last_name" : "R", "first_name" : "Raj571", "zuid" : "25450833" }, "project_group" : { "name" : "zp.projset.ungroupproj", "id" : "7000000005369", "type" : "public" }, "milestones" : { "closed_count" : "0", "open_count" : "0" }, "status" : { "is_closed_type" : "false", "name" : "Active", "id" : "7000000000665" } }
Create a Project

Create a new project in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/projects

OAuth Scope:

ZohoProjects.projects.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 200

Enter the project name.

description

String

max length : 80000

Enter the project description.

project_type

String

Enter the project type. Accepted values : active,template

JSONObject

Enter the project owner.

is_public_project

boolean

Specify whether the project is public. Accepted values : true or false

start_date

String

Enter the start date of the project (YYYY-MM-DD).

end_date

String

Enter the end date of the project (YYYY-MM-DD).

JSONObject

max length : 1000

Enter the status of the project.

JSONObject

max length : 1000

Enter the project layout details.

added_via

String

Enter the source from which the project is added. Accepted values : web,api

is_rollup_project

boolean

Specify whether the project is roll-up project. Accepted values : true or false

budget_info

JSONObject

max length : 80000

Enter the project budget details.

project_group

JSONObject

max length : 1000

Enter the project group details.

sub_module_settings

JSONObject

Specify the sub-module settings.

JSONArray

max length : 10000

Enter the tags for the project.

copy_from

long

Enter the template ID or existing project ID that this new project should be copied from.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Test Customview", "description" : "Project customview", "project_type" : "active", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : true, "start_date" : "2024-08-15", "end_date" : "2024-08-30", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "web", "is_rollup_project" : false, "budget_info" : { "billing_method" : "project_hours", "budget_type" : "based_on_project", "tracking_method" : "project_hours", "currency" : "USD", "budget" : { "amount" : "500000" }, "hourly_budget" : "12.00", "rate_per_hour" : { "amount" : "500000" }, "budget_threshold" : { "amount" : "500000" }, "hourly_budget_threshold" : "12.00", "fixed_cost" : { "amount" : "500000" }, "cost_per_hour" : { "amount" : "500000" }, "revenue_budget" : { "amount" : "500000" } }, "project_group" : { "id" : "4000000062001" }, "sub_module_settings" : { "module_layout_project" : { "id" : "7000000002852", "is_copy_as_private" : false } }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "copy_from" : "7000000084541" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Test Customview\",\"description\":\"Project customview\",\"project_type\":\"active\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":true,\"start_date\":\"2024-08-15\",\"end_date\":\"2024-08-30\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"web\",\"is_rollup_project\":false,\"budget_info\":{\"billing_method\":\"project_hours\",\"budget_type\":\"based_on_project\",\"tracking_method\":\"project_hours\",\"currency\":\"USD\",\"budget\":{\"amount\":\"500000\"},\"hourly_budget\":\"12.00\",\"rate_per_hour\":{\"amount\":\"500000\"},\"budget_threshold\":{\"amount\":\"500000\"},\"hourly_budget_threshold\":\"12.00\",\"fixed_cost\":{\"amount\":\"500000\"},\"cost_per_hour\":{\"amount\":\"500000\"},\"revenue_budget\":{\"amount\":\"500000\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":{\"module_layout_project\":{\"id\":\"7000000002852\",\"is_copy_as_private\":false}},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"7000000084541\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Test Customview", "description" : "Project customview", "project_type" : "active", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : true, "start_date" : "2024-08-15", "end_date" : "2024-08-30", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "web", "is_rollup_project" : false, "budget_info" : { "billing_method" : "project_hours", "budget_type" : "based_on_project", "tracking_method" : "project_hours", "currency" : "USD", "budget" : { "amount" : "500000" }, "hourly_budget" : "12.00", "rate_per_hour" : { "amount" : "500000" }, "budget_threshold" : { "amount" : "500000" }, "hourly_budget_threshold" : "12.00", "fixed_cost" : { "amount" : "500000" }, "cost_per_hour" : { "amount" : "500000" }, "revenue_budget" : { "amount" : "500000" } }, "project_group" : { "id" : "4000000062001" }, "sub_module_settings" : { "module_layout_project" : { "id" : "7000000002852", "is_copy_as_private" : false } }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "copy_from" : "7000000084541" }

Sample Response

200{ "end_date" : "2029-01-01", "picklist_11sep" : "abc", "is_public_project" : "false", "description" : "
source project  for testing clone project
", "is_strict_project" : "false", "multiline_11sep" : "multiline \nMULTILINE", "budget_info" : { "hourly_budget" : "1200:00", "billing_method" : "project_hours", "forecasted_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_hours" : "00:00", "bcy_forecasted_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "forecasted_hours" : "00:00", "remaining_hours" : "00:00", "actual_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "actual_hours" : "00:00", "bcy_planned_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget_type" : "based_on_project", "bcy_actual_cost" : { "amount" : "0", "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget" : { "amount" : "10000000", "formatted_amount" : "$ 1,00,00,000.00", "currency_code" : "USD", "currency_id" : "7000000015018" } }, "issues" : { "closed_count" : "0", "open_count" : "0" }, "is_completed" : "false", "id" : "7000000074003", "key" : "50", "tasks" : { "closed_count" : "0", "open_count" : "0" }, "number_11sep" : "1212", "start_date" : "2024-09-30", "phone_11sep" : "9879879877", "project_type" : "active", "created_time" : "2024-11-22T01:31:18.811Z", "check_box_sample_11sep" : "true", "is_rollup_project" : "false", "one" : "123456_single", "created_by" : { "zpuid" : "7000000002411", "name" : "Raj571", "last_name" : "R", "first_name" : "Raj571", "zuid" : "25450833" }, "percent_complete" : "0", "tags" : [ { "id" : "7000000015084", "color_class" : "bg-tag8" } ], "layout" : { "name" : "Standard Layout", "id" : "7000000000506", "is_default" : "true", "type" : "public" }, "single_line_test_1446" : "singleline", "name" : "via_api_created_002_22nov_1230PM", "updated_by" : { "zpuid" : "7000000002411", "name" : "Raj571", "last_name" : "R", "first_name" : "Raj571", "zuid" : "25450833" }, "project_group" : { "name" : "zp.projset.ungroupproj", "id" : "7000000005369", "type" : "public" }, "milestones" : { "closed_count" : "0", "open_count" : "0" }, "status" : { "is_closed_type" : "false", "name" : "Active", "id" : "7000000000665" } }
Update a Project

Modify details of an existing project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]

OAuth Scope:

ZohoProjects.projects.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 200

Enter the project name.

description

String

max length : 80000

Enter the project description.

project_type

String

Enter the project type. Accepted values : active,template

JSONObject

Enter the project owner.

is_public_project

boolean

Specify whether the project is public. Accepted values : true or false

start_date

String

Enter the start date of the project (YYYY-MM-DD).

end_date

String

Enter the end date of the project (YYYY-MM-DD).

JSONObject

max length : 1000

Enter the status of the project.

JSONObject

max length : 1000

Enter the project layout details.

added_via

String

Enter the source from which the project is added. Accepted values : web,api

is_rollup_project

boolean

Specify whether the project is roll-up project. Accepted values : true or false

budget_info

JSONObject

max length : 80000

Enter the project budget details.

project_group

JSONObject

max length : 1000

Enter the project group details.

JSONArray

max length : 10000

Enter the tags for the project.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Test Customview", "description" : "Project customview", "project_type" : "active", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : true, "start_date" : "2024-08-15", "end_date" : "2024-08-30", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "web", "is_rollup_project" : false, "budget_info" : { "billing_method" : "project_hours", "budget_type" : "based_on_project", "tracking_method" : "project_hours", "currency" : "USD", "budget" : { "amount" : "500000" }, "hourly_budget" : "12.00", "rate_per_hour" : { "amount" : "500000" }, "budget_threshold" : { "amount" : "500000" }, "hourly_budget_threshold" : "12.00", "fixed_cost" : { "amount" : "500000" }, "cost_per_hour" : { "amount" : "500000" }, "revenue_budget" : { "amount" : "500000" } }, "project_group" : { "id" : "4000000062001" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Test Customview\",\"description\":\"Project customview\",\"project_type\":\"active\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":true,\"start_date\":\"2024-08-15\",\"end_date\":\"2024-08-30\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"web\",\"is_rollup_project\":false,\"budget_info\":{\"billing_method\":\"project_hours\",\"budget_type\":\"based_on_project\",\"tracking_method\":\"project_hours\",\"currency\":\"USD\",\"budget\":{\"amount\":\"500000\"},\"hourly_budget\":\"12.00\",\"rate_per_hour\":{\"amount\":\"500000\"},\"budget_threshold\":{\"amount\":\"500000\"},\"hourly_budget_threshold\":\"12.00\",\"fixed_cost\":{\"amount\":\"500000\"},\"cost_per_hour\":{\"amount\":\"500000\"},\"revenue_budget\":{\"amount\":\"500000\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Test Customview", "description" : "Project customview", "project_type" : "active", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : true, "start_date" : "2024-08-15", "end_date" : "2024-08-30", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "web", "is_rollup_project" : false, "budget_info" : { "billing_method" : "project_hours", "budget_type" : "based_on_project", "tracking_method" : "project_hours", "currency" : "USD", "budget" : { "amount" : "500000" }, "hourly_budget" : "12.00", "rate_per_hour" : { "amount" : "500000" }, "budget_threshold" : { "amount" : "500000" }, "hourly_budget_threshold" : "12.00", "fixed_cost" : { "amount" : "500000" }, "cost_per_hour" : { "amount" : "500000" }, "revenue_budget" : { "amount" : "500000" } }, "project_group" : { "id" : "4000000062001" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }
Trash a Project

Move a project to the trash.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/trash

OAuth Scope:

ZohoProjects.projects.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/trash' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/trash");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Restore a Project

Restore a project from the trash.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/restore

OAuth Scope:

ZohoProjects.projects.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/restore' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/restore");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Delete a Project

Remove a project from the trash permanently.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]

OAuth Scope:

ZohoProjects.projects.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Project Custom View

This module covers project custom views-related operations within Zoho Projects. Use this API to create, update, retrieve, or delete custom views for projects, manage anchor views, and update favorite custom views.

Update Project's Default View

Mark a custom view as the default view for a project.

POST

/api/v3/portal/[PORTALID]/projects/customview/[CUSTOMVIEWID]/markanchored

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/customview/"1752587000000097269"/markanchored' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/customview/"1752587000000097269"/markanchored");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Update Project's Favorite View

Mark a custom view as a favorite view for a project.

POST

/api/v3/portal/[PORTALID]/projects/customview/[CUSTOMVIEWID]/markfavourite

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/customview/"1752587000000097269"/markfavourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/customview/"1752587000000097269"/markfavourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Project Comments

This module covers project comments-related operations within Zoho Projects. Use this API to add, update, retrieve, sort, or delete comments on projects and fetch details of specific comments.

Get Comments

Retrieve comments from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/comments

OAuth Scope:

ZohoProjects.projects.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort order. Accepted values:ASC or DESC based on created_time or last_updated_time

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"?page="1"&per_page="10"&sort_by="ASC(last_updated_time)"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_updated_time)"

Sample Response

200{ "comments" : [ { "created_time" : "2023-11-08T06:18:31.000Z", "last_modified_time" : "2023-11-08T06:32:00.000Z", "added_via" : "WEB", "posted_by" : { "zpuid" : "4000000002143", "full_name" : "Zoho Projects", "name" : "Zoho Projects", "last_name" : "", "id" : "18883589", "is_client_user" : false, "first_name" : "Zoho Projects", "email" : "Zoho Projects" }, "id" : "4000000046033", "content" : "
Posted Comment 1 Edited
" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "12", "page" : "1", "sort_order" : [ { "ascending" : false } ] } }

Possible Errors

FORBIDDEN HTTP 403

Get Single Comment Detail

Retrieve details of a comment from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.projects.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "created_time" : "2024-08-06T11:42:32.000Z", "last_modified_time" : "2024-08-06T11:43:45.000Z", "added_via" : "api", "posted_by" : { "zpuid" : "5000000002239", "full_name" : "Shunmu P", "name" : "Shunmu", "last_name" : "P", "id" : "22308233", "is_client_user" : "false", "first_name" : "Shunmu", "email" : "shunmuga.p@zohotest.com" }, "id" : "5000000114001", "content" : "
dfghbjnhh
" }
Add Comment

Add a comment to a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/comments

OAuth Scope:

ZohoProjects.projects.CREATE

Parameter

Param Name
Data Type
Description
content

String

required
max length : 65535

Enter the comment.

attachment_ids

JSONArray

Specify the attachment Id's.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Project Comment", "attachment_ids" : "[\"86559000000537001\"]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Project Comment\",\"attachment_ids\":\"[\\\"86559000000537001\\\"]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Project Comment", "attachment_ids" : "[\"86559000000537001\"]" }

Sample Response

200{ "comments" : [ { "created_time" : "2023-11-09T06:28:14.000Z", "last_modified_time" : "2023-11-09T06:28:14.000Z", "attachments" : [ { "created_time" : "1699511291419", "associated_time_long" : "1699511295666", "third_party_file_id" : "7298615000000002054", "app_domain" : "zfs", "type" : "image/png", "entity_id" : "4000000049005", "created_by" : "Zoho Projects", "uploadedZpuid" : "4000000002143", "app_name" : "ZFS", "permanent_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e33b7f1f8473c7ca351193710f713981ec3a39458a106979cee0de911525422df1e", "entity_type" : "project_comment", "size" : "744604", "associated_by" : "18883589", "preview_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e33b7f1f8473c7ca351193710f713981ec3a39458a106979cee0de911525422df1e", "attachment_id" : "4000000049001", "name" : "Screenshot 2021-06-04 at 7.19.51 PM.png", "associated_by_name" : "Ashwin B", "download_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e33b7f1f8473c7ca351193710f713981ec3a39458a106979cee0de911525422df1e", "app_id" : "3", "trashed" : false } ], "added_via" : "WEB", "posted_by" : { "zpuid" : "4000000002143", "full_name" : "Zoho Projects", "name" : "Zoho Projects", "last_name" : "", "id" : "18883589", "is_client_user" : false, "first_name" : "Zoho Projects", "email" : "Zoho Projects" }, "id" : "4000000049005", "content" : "
Comment
" } ] }

Possible Errors

FORBIDDEN HTTP 403

Update Comment

Modify a comment in a project

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.projects.UPDATE

Parameter

Param Name
Data Type
Description
content

String

required
max length : 65535

Enter the comment

attachment_ids

JSONArray

Enter the attachment IDs

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Project Comment", "attachment_ids" : "[\"86559000000537001\"]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Project Comment\",\"attachment_ids\":\"[\\\"86559000000537001\\\"]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Project Comment", "attachment_ids" : "[\"86559000000537001\"]" }

Sample Response

200{ "comments" : [ { "created_time" : "2023-11-09T06:28:14.000Z", "last_modified_time" : "2023-11-09T06:28:42.000Z", "attachments" : [ { "created_time" : "1699511320324", "associated_time_long" : "1699511322124", "third_party_file_id" : "7298615000000002056", "app_domain" : "zfs", "type" : "image/png", "entity_id" : "4000000049005", "created_by" : "Zoho Projects", "uploadedZpuid" : "4000000002143", "app_name" : "ZFS", "permanent_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e334199d38f141fb723355f65551eb3e29a1e0c3b9b398ba95add37198c7e6b073b", "entity_type" : "project_comment", "size" : "690127", "associated_by" : "18883589", "preview_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e334199d38f141fb723355f65551eb3e29a1e0c3b9b398ba95add37198c7e6b073b", "attachment_id" : "4000000049013", "name" : "Screenshot 2023-07-21 at 12.31.20 PM.png", "associated_by_name" : "Ashwin B", "download_url" : "https://projects.zoho.com/portal/zohotestdotcom1697805761710/saveAttachment/download?file=projects-99b80d4c926f8b3bfe3ffe35dea80e334199d38f141fb723355f65551eb3e29a1e0c3b9b398ba95add37198c7e6b073b", "app_id" : "3", "trashed" : false } ], "added_via" : "WEB", "posted_by" : { "zpuid" : "4000000002143", "full_name" : "Zoho Projects", "name" : "Zoho Projects", "last_name" : "", "id" : "18883589", "is_client_user" : false, "first_name" : "Zoho Projects", "email" : "Zoho Projects" }, "id" : "4000000049005", "content" : "
Comment Edited
" } ] }

Possible Errors

FORBIDDEN HTTP 403

Delete Comment

Remove a comment from a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.projects.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Possible Errors

FORBIDDEN HTTP 403

Project Group

This module covers all project group related operations within Zoho Projects.

Get Current User's Project Groups

Retrieve the project groups associated with the user.

GET

/api/v3/portal/[PORTALID]/project-groups

OAuth Scope:

ZohoProjects.projectgroups.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "project-groups" : [ { "sequence" : "0", "has_edit_access" : true, "prefix" : "BA", "associated_projects" : "76", "name" : "Ungrouped Projects", "id" : "4000000313017", "type" : "public", "is_default" : true } ] }
Create Project Group

Add a new project group in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/project-groups

OAuth Scope:

ZohoProjects.projectgroups.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 100

Enter the project group name.

type

String

Enter the project group type.
Accepted values: public or private.

prefix

String

max length : 10

Enter a prefix of the project group.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Marketing", "type" : "public", "prefix" : "MK-01" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Marketing", "type" : "public", "prefix" : "MK-01" }

Sample Response

201{ "id" : "4000001050025", "name" : "Marketing", "type" : "public", "created_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Balaji Super", "email" : "balaji.santhakumar+bg@zohotest.com", "is_client_user" : false, "first_name" : "Bala", "last_name" : "Test", "full_name" : "Bala Test" }, "created_on" : "2025-02-24T13:11:45.737Z", "updated_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Balaji Super", "email" : "balaji.santhakumar+bg@zohotest.com", "is_client_user" : false, "first_name" : "Bala", "last_name" : "Test", "full_name" : "Bala Test" }, "updated_on" : "2025-02-24T13:11:45.737Z" }
Update Project Group

Update details of a project group.

PATCH

/api/v3/portal/[PORTALID]/project-groups/[PROJECT-GROUPID]

OAuth Scope:

ZohoProjects.projectgroups.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 100

Enter the project group name.

type

String

Enter the project group type.
Accepted values: public or private.

prefix

String

max length : 10

Enter a prefix of the project group.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups/[PROJECT-GROUPID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Marketing", "type" : "public", "prefix" : "MK-01" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups/[PROJECT-GROUPID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Marketing", "type" : "public", "prefix" : "MK-01" }

Sample Response

200{ "id" : "4000001050025", "name" : "Marketing", "type" : "public", "created_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Balaji Super", "email" : "balaji.santhakumar+bg@zohotest.com", "is_client_user" : false, "first_name" : "Bala", "last_name" : "Test", "full_name" : "Bala Test" }, "created_on" : "2025-02-24T13:11:45.737Z", "updated_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Balaji Super", "email" : "balaji.santhakumar+bg@zohotest.com", "is_client_user" : false, "first_name" : "Bala", "last_name" : "Test", "full_name" : "Bala Test" }, "updated_on" : "2025-02-24T13:12:08.187Z" }
Delete Project Group

Remove a project group from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/project-groups/[PROJECT-GROUPID]

OAuth Scope:

ZohoProjects.projectgroups.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups/[PROJECT-GROUPID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/project-groups/[PROJECT-GROUPID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Phases

This module covers Phase-related operations within Zoho Projects. Use this API to create, retrieve, update, manage, delete, move, or clone Phases.

Get Phases

Retrieve all the phases from the portal

GET

/api/v3/portal/[PORTALID]/phases

OAuth Scope:

ZohoProjects.milestones.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort order for the results

view_id

long

Enter the ID of the custom view

milestone_ids

String

Enter the IDs of phases to be retrieved

JSONObject

Enter the filter criteria for the phases

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/phases?page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&view_id="23806000097545166"&milestone_ids="139655000000057003,139655000000057004,139655000000057005"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/phases");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   uriBuilder.addParameter(""milestone_ids"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""provider"", "{"provider":"PUSHY","index":"1","range":"100"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_updated_time)" view_id : "23806000097545166" milestone_ids : "139655000000057003,139655000000057004,139655000000057005" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "page_info" : [ { "per_page" : 100, "page" : 1 } ], "milestones" : [ { "end_date" : "2025-12-12T06:57:56.424Z", "owner" : { "zpuid" : "32000000002471", "last_name" : "Kevin", "is_client_user" : false, "first_name" : "John", "email" : "johnkevin@gmail.com", "zuid" : 27701230 }, "created_time" : "2024-12-12T06:57:56.424Z", "flag" : "internal", "last_modified_time" : "2024-12-12T06:57:56.424Z", "status_type" : "open", "name" : "Closure", "project" : { "name" : "Construction", "id" : "32000000005537" }, "id" : "32000000005645", "budget_info" : { "is_workfield_removed" : false }, "start_date" : "2025-11-24T06:57:56.424Z", "status" : { "color_hexcode" : "#2cc8ba", "name" : "Active", "id" : "32000000000890", "is_closed" : false } } ] }
Get Project Phases

Retrieve phases from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases

OAuth Scope:

ZohoProjects.milestones.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort order for the results

view_id

long

Enter the ID of the custom view

milestone_ids

String

Enter the IDs of phases to be retrieved

JSONObject

Enter the filter criteria for the phases

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases?page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&view_id="23806000097545166"&milestone_ids="139655000000057003,139655000000057004,139655000000057005"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   uriBuilder.addParameter(""milestone_ids"", "");
   uriBuilder.addParameter(""provider"", "{"provider":"PUSHY","index":"1","range":"100"}");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_updated_time)" view_id : "23806000097545166" milestone_ids : "139655000000057003,139655000000057004,139655000000057005" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "page_info" : [ { "per_page" : 100, "page" : 1 } ], "milestones" : [ { "end_date" : "2025-12-12T06:57:56.424Z", "owner" : { "zpuid" : "32000000002471", "last_name" : "Kevin", "is_client_user" : false, "first_name" : "John", "email" : "johnkevin@gmail.com", "zuid" : 27701230 }, "created_time" : "2024-12-12T06:57:56.424Z", "flag" : "internal", "last_modified_time" : "2024-12-12T06:57:56.424Z", "status_type" : "open", "name" : "Closure", "id" : "32000000005645", "budget_info" : { "is_workfield_removed" : false }, "start_date" : "2025-11-24T06:57:56.424Z", "status" : { "color_hexcode" : "#2cc8ba", "name" : "Active", "id" : "32000000000890", "is_closed" : false } } ] }
Get Phase Detail

Retrieve the details of a phase

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]

OAuth Scope:

ZohoProjects.milestones.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "end_date" : "2025-02-24T00:00:00.000Z", "owner" : { "zpuid" : "32000000004929", "full_name" : "Unassigned", "name" : "Unassigned", "last_name" : "", "id" : "0", "is_client_user" : false, "first_name" : "Unassigned", "email" : "Unassigned User" }, "created_time" : "2025-02-24T04:00:07.063Z", "updated_time" : "2025-02-24T04:00:07.063Z", "flag" : "internal", "addedby" : { "zpuid" : "32000000002471", "full_name" : "John Kevin", "name" : "John Kevin", "last_name" : "Kevin", "id" : "27701230", "is_client_user" : false, "first_name" : "John", "email" : "johnkevin@gmail.com" }, "custom_fields" : { }, "project" : { "end_date" : "2025-12-11T06:57:54.473Z", "name" : "Construction", "strict_project" : false, "id" : "32000000005537", "is_template" : false, "start_date" : "2024-12-12T06:57:54.473Z" }, "is_editable" : true, "is_completed" : false, "tags" : [ ], "completion_percent" : 0, "sequence" : "0", "percent_type" : 1, "followers" : [ ], "tab_info" : { "comment_count" : 0, "invoice_tab_enabled" : false, "statustimeline_tab_enabled" : true, "task_tab_enabled" : true, "bug_tab_enabled" : true }, "name" : "asdad", "id" : "32000000131156", "budget_details" : { "is_budget_enabled" : false, "is_workfield_removed" : false }, "start_date" : "2025-02-24T00:00:00.000Z", "status" : { "statusColorHexCode" : "#2cc8ba", "sequence" : "1", "statusId" : "32000000000890", "statusColor" : "statuscol_darkshadegreen", "defaultValue" : true, "statusName" : "Active", "closed" : false, "layoutId" : "32000000005633" } }
Create Phase

Create a phase in a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases

OAuth Scope:

ZohoProjects.milestones.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 100

Enter the name of the phase

start_date

String

Enter the start date of the phase

end_date

String

Enter the end date of the phase

owner_zpuid

String

Enter the ZPUID of the owner

flag

String

Enter the flag type of the phase. Accepted values: Internal or External

project_id

long

Enter the ID of the project

status_id

long

Enter the ID of the status

tagIds

String

max length : 1000

Enter the Tag IDs

next

long

Enter the ID of the phase that will follow the new phase

previous

long

Enter the ID of the phase that will precede the new phase

budget

String

Enter the budget of the phase

threshold

String

Enter the threshold value for the budget

hourly_budget

String

Enter the hourly budget of the phase

hourly_budget_threshold

String

Enter the hourly budget threshold of the phase

revenue_budget

String

Enter the revenue budget for the phase

udf_char[0-9]{1,3}

String

max length : 255

Enter the custom field value accepting character data type

udf_text[0-9]{1,2}

String

max length : 1000

Enter the custom field value accepting text data type

udf_long[0-9]{1,2}

long

max length : 19

Enter the custom field value accepting integer type

udf_user[0-9]{1,2}

long

max length : 19

Enter the custom field value accepting user ID

udf_double[0-9]{1,2}

double

Enter the custom field value accepting double percision data type

udf_date[0-9]{1,2}

String

Enter the custom field value accepting date

udf_encrypt([1-9]|10)

String

max length : 1000

Enter the custom field value accepting any data type

udf_multi[0-9]{1,2}

JSONArray

array size : 0-20

Enter the custom field value accepting multiple values

udf_multiuser[0-9]{1,2}

JSONArray

array size : 0-20

Enter the custom field value accepting multiple user ZPUIDs

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Planning Stage", "start_date" : "05/28/2025", "end_date" : "10/28/2025", "owner_zpuid" : "1752587000000097024", "flag" : "internal", "project_id" : "23806000097545166", "status_id" : "238060000975451234", "tagIds" : "238060000975451234,238060000975451234", "next" : "23806000097545224", "previous" : "23806000097545222", "budget" : "98420000", "threshold" : "250000", "hourly_budget" : "9895000", "hourly_budget_threshold" : "250000", "revenue_budget" : "1023000", "udf_char[0-9]{1,3}" : "This is a sample character value", "udf_text[0-9]{1,2}" : "This is a sample text field value", "udf_long[0-9]{1,2}" : "123987542233", "udf_user[0-9]{1,2}" : "139655000000057003", "udf_double[0-9]{1,2}" : "123.445", "udf_date[0-9]{1,2}" : "23/09/2024", "udf_encrypt([1-9]|10)" : "Sample value", "udf_multi[0-9]{1,2}" : [ "value_1", "value_2", "value_3" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Planning Stage\",\"start_date\":\"05\/28\/2025\",\"end_date\":\"10\/28\/2025\",\"owner_zpuid\":\"1752587000000097024\",\"flag\":\"internal\",\"project_id\":\"23806000097545166\",\"status_id\":\"238060000975451234\",\"tagIds\":\"238060000975451234,238060000975451234\",\"next\":\"23806000097545224\",\"previous\":\"23806000097545222\",\"budget\":\"98420000\",\"threshold\":\"250000\",\"hourly_budget\":\"9895000\",\"hourly_budget_threshold\":\"250000\",\"revenue_budget\":\"1023000\",\"udf_char[0-9]{1,3}\":\"This is a sample character value\",\"udf_text[0-9]{1,2}\":\"This is a sample text field value\",\"udf_long[0-9]{1,2}\":\"123987542233\",\"udf_user[0-9]{1,2}\":\"139655000000057003\",\"udf_double[0-9]{1,2}\":\"123.445\",\"udf_date[0-9]{1,2}\":\"23\/09\/2024\",\"udf_encrypt([1-9]|10)\":\"Sample value\",\"udf_multi[0-9]{1,2}\":[\"value_1\",\"value_2\",\"value_3\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Planning Stage", "start_date" : "05/28/2025", "end_date" : "10/28/2025", "owner_zpuid" : "1752587000000097024", "flag" : "internal", "project_id" : "23806000097545166", "status_id" : "238060000975451234", "tagIds" : "238060000975451234,238060000975451234", "next" : "23806000097545224", "previous" : "23806000097545222", "budget" : "98420000", "threshold" : "250000", "hourly_budget" : "9895000", "hourly_budget_threshold" : "250000", "revenue_budget" : "1023000", "udf_char[0-9]{1,3}" : "This is a sample character value", "udf_text[0-9]{1,2}" : "This is a sample text field value", "udf_long[0-9]{1,2}" : "123987542233", "udf_user[0-9]{1,2}" : "139655000000057003", "udf_double[0-9]{1,2}" : "123.445", "udf_date[0-9]{1,2}" : "23/09/2024", "udf_encrypt([1-9]|10)" : "Sample value", "udf_multi[0-9]{1,2}" : [ "value_1", "value_2", "value_3" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }

Sample Response

201{ "owner" : { "name" : "John Kevin", "id" : "32000000004929", "zuid" : "235222449" }, "end_date" : "2025-02-24T17:29:59.000Z", "created_time" : "2025-02-24T09:34:17.997Z", "updated_time" : "2025-02-24T09:34:17.997Z", "sequence" : "90", "flag" : "internal", "name" : "Create new issue", "project" : { "name" : "Construction", "id" : "32000000005537" }, "id" : "32000000132001", "status" : { "name" : "Active", "id" : "32000000000890" }, "start_date" : "2025-02-23T17:30:00.000Z" }
Update Phase

Update a phase in a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]

OAuth Scope:

ZohoProjects.milestones.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 100

Enter the phase name

start_date

String

Enter the start date of the phase

end_date

String

Enter the due date of the phase

owner_zpuid

String

Enter the ZPUID of the phase owner

flag

String

Enter the type of flag for the phase

status_id

long

Enter the ID of the milestone status

tagIds

String

max length : 1000

Enter the tag IDs

budget

String

Enter the budget value for the phase

threshold

String

Enter the threshold value for the budget

hourly_budget

String

Enter the hourly budget value for the phase

hourly_budget_threshold

String

Enter the threshold value for the hourly budget

revenue_budget

float

Enter the revenue budget for the phase

udf_char[0-9]{1,3}

String

max length : 255

Enter the custom field value accepting character data type

udf_text[0-9]{1,2}

String

max length : 1000

Enter the custom field value accepting text data type

udf_long[0-9]{1,2}

long

max length : 19

Enter the custom field value accepting integer type

udf_user[0-9]{1,2}

long

max length : 19

Enter the custom field value accepting user ID

udf_double[0-9]{1,2}

double

Enter the custom field value accepting double percision data type

udf_date[0-9]{1,2}

String

Enter the custom field value accepting date

udf_encrypt([1-9]|10)

String

max length : 1000

Enter the custom field value accepting any data type

udf_multi[0-9]{1,2}

JSONArray

array size : 0-20

Enter the custom field value accepting multiple values

udf_multiuser[0-9]{1,2}

JSONArray

array size : 0-20

Enter the custom field value accepting multiple user ZPUIDs

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Planning Stage", "start_date" : "05/28/2025", "end_date" : "10/28/2025", "owner_zpuid" : "1752587000000097024", "flag" : "internal", "status_id" : "238060000975451234", "tagIds" : "238060000975451234,238060000975451234", "budget" : "98420000", "threshold" : "250000", "hourly_budget" : "9895000", "hourly_budget_threshold" : "250000", "revenue_budget" : "1023000", "udf_char[0-9]{1,3}" : "This is a sample character value", "udf_text[0-9]{1,2}" : "This is a sample text field value", "udf_long[0-9]{1,2}" : "123987542233", "udf_user[0-9]{1,2}" : "139655000000057003", "udf_double[0-9]{1,2}" : "123.445", "udf_date[0-9]{1,2}" : "23/09/2024", "udf_encrypt([1-9]|10)" : "Sample value", "udf_multi[0-9]{1,2}" : [ "value_1", "value_2", "value_3" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Planning Stage\",\"start_date\":\"05\/28\/2025\",\"end_date\":\"10\/28\/2025\",\"owner_zpuid\":\"1752587000000097024\",\"flag\":\"internal\",\"status_id\":\"238060000975451234\",\"tagIds\":\"238060000975451234,238060000975451234\",\"budget\":\"98420000\",\"threshold\":\"250000\",\"hourly_budget\":\"9895000\",\"hourly_budget_threshold\":\"250000\",\"revenue_budget\":\"1023000\",\"udf_char[0-9]{1,3}\":\"This is a sample character value\",\"udf_text[0-9]{1,2}\":\"This is a sample text field value\",\"udf_long[0-9]{1,2}\":\"123987542233\",\"udf_user[0-9]{1,2}\":\"139655000000057003\",\"udf_double[0-9]{1,2}\":\"123.445\",\"udf_date[0-9]{1,2}\":\"23\/09\/2024\",\"udf_encrypt([1-9]|10)\":\"Sample value\",\"udf_multi[0-9]{1,2}\":[\"value_1\",\"value_2\",\"value_3\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Planning Stage", "start_date" : "05/28/2025", "end_date" : "10/28/2025", "owner_zpuid" : "1752587000000097024", "flag" : "internal", "status_id" : "238060000975451234", "tagIds" : "238060000975451234,238060000975451234", "budget" : "98420000", "threshold" : "250000", "hourly_budget" : "9895000", "hourly_budget_threshold" : "250000", "revenue_budget" : "1023000", "udf_char[0-9]{1,3}" : "This is a sample character value", "udf_text[0-9]{1,2}" : "This is a sample text field value", "udf_long[0-9]{1,2}" : "123987542233", "udf_user[0-9]{1,2}" : "139655000000057003", "udf_double[0-9]{1,2}" : "123.445", "udf_date[0-9]{1,2}" : "23/09/2024", "udf_encrypt([1-9]|10)" : "Sample value", "udf_multi[0-9]{1,2}" : [ "value_1", "value_2", "value_3" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }

Sample Response

201{ "owner" : { "name" : "Unassigned User", "id" : "32000000004929" }, "end_date" : "2025-02-24T17:29:59.000Z", "created_time" : "2025-02-24T09:35:10.463Z", "updated_time" : "2025-02-24T09:52:58.554Z", "sequence" : "90", "flag" : "internal", "name" : "update milestone", "project" : { "name" : "Construction", "id" : "32000000005537" }, "id" : "32000000132023", "status" : { "name" : "Active", "id" : "32000000000890" }, "start_date" : "2025-02-23T17:30:00.000Z" }
Delete Phase

Remove a phase from a project

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]

OAuth Scope:

ZohoProjects.milestones.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Move Phase

Move a phase to another project

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/move

OAuth Scope:

ZohoProjects.milestones.UPDATE

Parameter

Param Name
Data Type
Description
to_project

long

Enter the ID of the project to which the phase should move

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/move' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "to_project" : "23806000097545166" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/move");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"to_project\":\"23806000097545166\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "to_project" : "23806000097545166" }

Sample Response

204 No Content
Clone Phase

Clone a phase within the same project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/clone

OAuth Scope:

ZohoProjects.milestones.CREATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/clone' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/clone");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "id" : "32000000132023" }
Get Phase Activities

Get activities performed on a phase

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/activities

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to display per page

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/activities?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/activities");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "activities" : [ { "action_time" : "2025-02-24T09:35:21.000Z", "activity" : "milestone", "project_id" : "32000000005537", "extra_data" : "{\"old_value\":\"asdad\",\"display_name\":\"zp.dependview.milestone\",\"new_value\":\"Cloning Milestone\"}", "edits" : [ { "old_value" : "asdad", "field_type" : "singleline", "new_value" : "Cloning Milestone", "field_name" : "Phase Name" } ], "name" : "Cloning Milestone", "id" : "32000000132039", "entity_id" : "32000000132023", "user" : { "name" : "John kevin", "id" : 27701230 }, "activity_state" : "update" } ] }
Get Status Transition

Retrieve the status transition history of a phase

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/status-timeline

OAuth Scope:

ZohoProjects.milestones.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/status-timeline' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/status-timeline");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200[ { "updated_status" : { "color" : "statuscol_darkshadegreen", "name" : "Active", "id" : "32000000000890", "is_closed" : false }, "updated_on" : "2025-02-24T09:56:25.314Z", "updated_by" : { "zpuid" : "32000000002471", "id" : "27701230", "display_name" : "John Kevin", "email" : "johnkevin@gmail.com" }, "previous_status" : { "color" : "", "name" : "-", "id" : "0" } } ]
Phase Followers

This module covers Phase follower-related operations within Zoho Projects. Use this API to retrieve, add, or remove followers for Phases.

Get Followers

Retrieve followers of a phase

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/followers

OAuth Scope:

ZohoProjects.milestones.READ

Query Parameter

Param Name
Data Type
Description
page

int

required

Enter the page number.

per_page

int

required

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/followers?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/followers");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

"200"{ "followers" : [ { "zpuid" : "139655000000057003", "name" : "Alex", "first_name" : "Alex", "last_name" : "Johnson", "zuid" : "73746290", "email" : "alex.johnson@gmail.com" }, { "zpuid" : "139655000000098765", "name" : "John", "first_name" : "John", "last_name" : "Doe", "zuid" : "12345678", "email" : "john.doe@example.com" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "page" : 1 } }
Add Followers

Add followers to update about the phase

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/follow

OAuth Scope:

ZohoProjects.milestones.CREATE

Parameter

Param Name
Data Type
Description
followers

JSONArray

required
max length : 3000
array size : 0-100

Enter the ZPUID of the users.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/follow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "followers" : [ 32000000002471 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/follow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"followers\":[32000000002471]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "followers" : [ 32000000002471 ] }

Sample Response

200{ "followers" : [ { "zpuid" : "32000000002471", "name" : "John Kevin", "last_name" : "2", "first_name" : "John", "email" : "johnkevin@gmail.com", "zuid" : "27701230" } ] }
Remove Followers

Remove followers from a phase

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/unfollow

OAuth Scope:

ZohoProjects.milestones.DELETE

Parameter

Param Name
Data Type
Description
followers

JSONArray

required
max length : 3000
array size : 0-100

Enter the ZPUID of the users.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/unfollow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "followers" : [ 32000000002471 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/unfollow");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"followers\":[32000000002471]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "followers" : [ 32000000002471 ] }

Sample Response

204 No Content
Phase Comments

This module covers Phase comment-related operations within Zoho Projects. Use this API to add, update, retrieve, or delete comments on Phases.

Get Comments

Get all the comments on a phase

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/comments

OAuth Scope:

ZohoProjects.milestones.READ

Query Parameter

Param Name
Data Type
Description
sort_order

String

Enter the sort order type. Accepted values: ascending or descending

page

int

Enter the specific page number to retrieve

per_page

int

Enter the number of entries to display per page

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"?sort_order="descending"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sort_order"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sort_order : "descending" page : "1" per_page : "10"

Sample Response

"200"{ "comments" : [ { "created_time" : "2024-05-28T06:28:53.000Z", "updated_time" : "2024-05-28T06:50:58.000Z", "added_via" : "web", "posted_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson@gmail.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@gmail.com" }, "content" : "
Milestone Status needs to be changed.
" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Add Comment

Add a comment to a phase

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/comments

OAuth Scope:

ZohoProjects.milestones.CREATE

Parameter

Param Name
Data Type
Description
content

String

required

Enter the comment content

notify

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the users to be notified

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Sample Comment", "notify" : "true", "attachment_ids" : [ 139655000000057003, 139655000000057004, 139655000000057005 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Sample Comment\",\"notify\":\"true\",\"attachment_ids\":[139655000000057003,139655000000057004,139655000000057005]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Sample Comment", "notify" : "true", "attachment_ids" : [ 139655000000057003, 139655000000057004, 139655000000057005 ] }

Sample Response

200{ "created_time" : "2024-05-28T06:28:53.000Z", "updated_time" : "2024-05-28T06:28:53.000Z", "added_via" : "web", "posted_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@zohotest.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@zohotest.com" }, "content" : "
New Comment Added
" }
Update Comment

Update a comment on a phase

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.milestones.UPDATE

Parameter

Param Name
Data Type
Description
content

String

required

Enter the comment content

notify

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the users to be notified

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Sample Comment", "notify" : "true", "attachment_ids" : [ 139655000000057003, 139655000000057004, 139655000000057005 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Sample Comment\",\"notify\":\"true\",\"attachment_ids\":[139655000000057003,139655000000057004,139655000000057005]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Sample Comment", "notify" : "true", "attachment_ids" : [ 139655000000057003, 139655000000057004, 139655000000057005 ] }

Sample Response

200{ "created_time" : "2024-05-28T06:28:53.000Z", "updated_time" : "2024-05-28T06:28:53.000Z", "added_via" : "web", "posted_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@zohotest.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@zohotest.com" }, "content" : "
Comment Updated
" }
Delete Comment

Remove a comment on a phase

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/phases/[PHASEID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.milestones.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/phases/[PHASEID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Issues

This module covers issue-related operations within Zoho Projects. Use this API to create, retrieve, update, move, clone, or delete issues. It also supports searching, managing custom fields, kanban settings, reminders, exports, and associated tasks.

Get All Issues

Retrieve all issues from the portal.

GET

/api/v3/portal/[PORTALID]/issues

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
page

int

required

Enter a page number.

per_page

int

required

Enter the number of entries to be included per page.

sort_by

String

Enter the sort order. Accepted values: created_time, due_date or last_modified_time

view_id

long

Enter the custom view ID.

issue_ids

String

Enter the issue IDs to retrieve.

JSONObject

Specify the filter criteria for the issues.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues?page="1"&per_page="10"&sort_by="ASC(created_time)"&view_id="2380600567533251"&issue_ids="23806000097533216"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   uriBuilder.addParameter(""issue_ids"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" view_id : "2380600567533251" issue_ids : "23806000097533216" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "page_info" : { "per_page" : 200, "page" : 1, "sort_by" : [ { "field_names" : [ "created_time" ], "order_by" : "DESCENDING" } ] }, "issues" : [ { "id" : "139655000000477124", "prefix" : "EC1-I14", "name" : "Escalation due to iterated process hold", "flag" : "Internal", "created_time" : "2024-05-06T11:25:58.000Z", "created_by" : { "zuid" : 76721203, "zpuid" : "139655000000072009", "name" : "kathrine Bode", "email" : "katharina.bode@gmail.com", "first_name" : "kathrine", "last_name" : "Bode" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "statuscol_yellowishorange", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 0, "zpuid" : "139655000000057657", "name" : "Unassigned User", "email" : "Unassigned User", "first_name" : "Unassigned User" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_class" : "bg-tag18" }, { "id" : "139655000000189037", "name" : "bug", "color_class" : "bg-tag19" }, { "id" : "139655000000493179", "name" : "problem", "color_class" : "bg-tag17" }, { "id" : "139655000000493183", "name" : "neefix", "color_class" : "bg-tag7" } ], "last_updated_time" : "2024-05-14T09:28:58.000Z", "severity" : { "id" : "139655000000057155", "value" : "Critical" }, "classification" : { "id" : "139655000000057017", "value" : "Security" }, "is_it_reproducible" : { "id" : "139655000000057057", "value" : "Sometimes" }, "module" : { "id" : "139655000000147034", "value" : "Module 1" }, "rate_per_hour" : 20.0, "cost_per_hour" : 10.0, "singleline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "miyoko.kunde", "email" : "miyoko.kunde@gmail.com", "first_name" : "Miyoko", "last_name" : "Kunde" }, "phone1" : "+91 98452252323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "clintwestwood@gmail.com", "multiline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "jermine.dekow", "email" : "jermine.dekow@gmail.com", "first_name" : "Jermine", "last_name" : "Dekow" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "John Kevin", "email" : "johnkevin@gmail.com", "first_name" : "John", "last_name" : "Kevin" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Lehnar Annabelle", "email" : "lehnar.annabelle@gmail.com", "first_name" : "Lehnar", "last_name" : "Annabelle" } ] } ] }
Get Project Issues

Retrieve issues from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
page

int

required

Enter a page number.

per_page

int

required

Enter the number of entries to be included per page.

sort_by

String

Enter the sort order. Accepted values: created_time, due_date or last_modified_time

view_id

long

Enter the custom view ID.

issue_ids

String

Enter the issue IDs to retrieve.

JSONObject

Specify the filter criteria for the issues.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues?page="1"&per_page="10"&sort_by="ASC(created_time)"&view_id="2380600567533251"&issue_ids="23806000097533216"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   uriBuilder.addParameter(""issue_ids"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" view_id : "2380600567533251" issue_ids : "23806000097533216" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "page_info" : { "per_page" : 200, "page" : 1, "sort_by" : [ { "field_names" : [ "created_time" ], "order_by" : "DESCENDING" } ] }, "issues" : [ { "id" : "139655000000477124", "prefix" : "EC1-I14", "name" : "Escalation due to iterated process hold", "flag" : "Internal", "created_time" : "2024-05-06T11:25:58.000Z", "created_by" : { "zuid" : 76721203, "zpuid" : "139655000000072009", "name" : "kathrine Bode", "email" : "katharina.bode@gmail.com", "first_name" : "kathrine", "last_name" : "Bode" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "statuscol_yellowishorange", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 0, "zpuid" : "139655000000057657", "name" : "Unassigned User", "email" : "Unassigned User", "first_name" : "Unassigned User" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_class" : "bg-tag18" }, { "id" : "139655000000189037", "name" : "bug", "color_class" : "bg-tag19" }, { "id" : "139655000000493179", "name" : "problem", "color_class" : "bg-tag17" }, { "id" : "139655000000493183", "name" : "neefix", "color_class" : "bg-tag7" } ], "last_updated_time" : "2024-05-14T09:28:58.000Z", "severity" : { "id" : "139655000000057155", "value" : "Critical" }, "classification" : { "id" : "139655000000057017", "value" : "Security" }, "is_it_reproducible" : { "id" : "139655000000057057", "value" : "Sometimes" }, "module" : { "id" : "139655000000147034", "value" : "Module 1" }, "rate_per_hour" : 20.0, "cost_per_hour" : 10.0, "singleline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "miyoko.kunde", "email" : "miyoko.kunde@gmail.com", "first_name" : "Miyoko", "last_name" : "Kunde" }, "phone1" : "+91 98452252323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "clintwestwood@gmail.com", "multiline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "jermine.dekow", "email" : "jermine.dekow@gmail.com", "first_name" : "Jermine", "last_name" : "Dekow" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "John Kevin", "email" : "johnkevin@gmail.com", "first_name" : "John", "last_name" : "Kevin" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Lehnar Annabelle", "email" : "lehnar.annabelle@gmail.com", "first_name" : "Lehnar", "last_name" : "Annabelle" } ] } ] }
Get Issue Details

Retrieve details of issues in a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "id" : "139655000000477124", "prefix" : "EC1-I14", "name" : "Escalation due to iterated process hold", "flag" : "Internal", "created_time" : "2024-05-06T11:25:58.000Z", "created_by" : { "zuid" : 76721203, "zpuid" : "139655000000072009", "name" : "kathrine Bode", "email" : "katharina.bode@gmail.com", "first_name" : "kathrine", "last_name" : "Bode" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "statuscol_yellowishorange", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 0, "zpuid" : "139655000000057657", "name" : "Unassigned User", "email" : "Unassigned User", "first_name" : "Unassigned User" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_class" : "bg-tag18" }, { "id" : "139655000000189037", "name" : "bug", "color_class" : "bg-tag19" }, { "id" : "139655000000493179", "name" : "problem", "color_class" : "bg-tag17" }, { "id" : "139655000000493183", "name" : "neefix", "color_class" : "bg-tag7" } ], "last_updated_time" : "2024-05-14T09:28:58.000Z", "severity" : { "id" : "139655000000057155", "value" : "Critical" }, "classification" : { "id" : "139655000000057017", "value" : "Security" }, "is_it_reproducible" : { "id" : "139655000000057057", "value" : "Sometimes" }, "module" : { "id" : "139655000000147034", "value" : "Module 1" }, "rate_per_hour" : 20.0, "cost_per_hour" : 10.0, "singleline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "miyoko.kunde", "email" : "miyoko.kunde@gmail.com", "first_name" : "Miyoko", "last_name" : "Kunde" }, "phone1" : "+91 98452252323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "clintwestwood@gmail.com", "multiline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "jermine.dekow", "email" : "jermine.dekow@gmail.com", "first_name" : "Jermine", "last_name" : "Dekow" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "John Kevin", "email" : "johnkevin@gmail.com", "first_name" : "John", "last_name" : "Kevin" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Lehnar Annabelle", "email" : "lehnar.annabelle@gmail.com", "first_name" : "Lehnar", "last_name" : "Annabelle" } ] }
Create an Issue

Create an issue in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues

OAuth Scope:

ZohoProjects.bugs.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 65000

Enter the name of the issue.

description

String

Enter the description of the issue.

flag

String

max length : 100

Specify the flag type of the issue. Accepted values: Internal or External

associated_teams

JSONObject

max length : 1000

Specify the team associated with the issue.

JSONObject

max length : 1000

Specify the assignee of the issue.

JSONObject

max length : 1000

Enter the status of the issue.

due_date

String

Enter the due date of the issue.

release_milestone

JSONObject

max length : 1000

Specify the Release Milestone of the issue.

affected_milestone

JSONObject

max length : 1000

Specify the Affected Milestone of the issue.

JSONObject

max length : 1000

Specify the severity of the issue.

is_it_reproducible

JSONObject

max length : 1000

Specify if the issue is reproducible.

classification

JSONObject

max length : 1000

Specify the classification of the issue.

JSONObject

max length : 1000

Specify the module of the issue.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of attachments to associate.

tags

JSONArray

max length : 10000

Enter the IDs of the tags to associate

followers

JSONArray

max length : 10000

Enter the IDs of the users to follow the issue.

JSONObject

max length : 10000

Specify the reminder settings for the issue.

rate_per_hour

double

max length : 100

Enter rate per hour of the user.

cost_rate_per_hour

double

max length : 100

Enter cost per hour of the user.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Sample Bug Title", "description" : "This is a sample description of an Issue.", "flag" : "external", "associated_teams" : { "id" : "4000000062001" }, "assignee" : { "zpuid" : "4000000002055" }, "status" : { "id" : "4000000062001" }, "due_date" : "2025-12-12T02:12:00.000Z", "release_milestone" : { "id" : "4000000062001" }, "affected_milestone" : { "id" : "4000000062001" }, "severity" : { "id" : "4000000062001" }, "is_it_reproducible" : { "id" : "4000000062001" }, "classification" : { "id" : "4000000062001" }, "module" : { "id" : "4000000062001" }, "attachments" : [ 23806000097533241 ], "tags" : [ { "id" : "238060000975404352" } ], "followers" : "-", "reminder" : { "type" : "Task", "reminder_custom_date" : "-", "days_before" : "-", "time" : "22:00", "notify_users" : "-" }, "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Sample Bug Title\",\"description\":\"This is a sample description of an Issue.\",\"flag\":\"external\",\"associated_teams\":{\"id\":\"4000000062001\"},\"assignee\":{\"zpuid\":\"4000000002055\"},\"status\":{\"id\":\"4000000062001\"},\"due_date\":\"2025-12-12T02:12:00.000Z\",\"release_milestone\":{\"id\":\"4000000062001\"},\"affected_milestone\":{\"id\":\"4000000062001\"},\"severity\":{\"id\":\"4000000062001\"},\"is_it_reproducible\":{\"id\":\"4000000062001\"},\"classification\":{\"id\":\"4000000062001\"},\"module\":{\"id\":\"4000000062001\"},\"attachments\":[23806000097533241],\"tags\":[{\"id\":\"238060000975404352\"}],\"followers\":\"-\",\"reminder\":{\"type\":\"Task\",\"reminder_custom_date\":\"-\",\"days_before\":\"-\",\"time\":\"22:00\",\"notify_users\":\"-\"},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Sample Bug Title", "description" : "This is a sample description of an Issue.", "flag" : "external", "associated_teams" : { "id" : "4000000062001" }, "assignee" : { "zpuid" : "4000000002055" }, "status" : { "id" : "4000000062001" }, "due_date" : "2025-12-12T02:12:00.000Z", "release_milestone" : { "id" : "4000000062001" }, "affected_milestone" : { "id" : "4000000062001" }, "severity" : { "id" : "4000000062001" }, "is_it_reproducible" : { "id" : "4000000062001" }, "classification" : { "id" : "4000000062001" }, "module" : { "id" : "4000000062001" }, "attachments" : [ 23806000097533241 ], "tags" : [ { "id" : "238060000975404352" } ], "followers" : "-", "reminder" : { "type" : "Task", "reminder_custom_date" : "-", "days_before" : "-", "time" : "22:00", "notify_users" : "-" }, "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }

Sample Response

200{ "id" : "2380600009754342354", "name" : "Sample Bug Title", "flag" : "External", "due_date" : "2025-12-12T02:12:00.000Z", "associated_teams" : { "id" : "238060000975454323", "name" : "Risk Management Team" }, "assignee" : { "zuid" : 590675, "zpuid" : "23806000097546091", "name" : "John Mike", "email" : "johnmike23@gmail.com", "first_name" : "John" }, "status" : { "id" : "2380600567533251", "name" : "Open", "color" : "statuscol_blue", "color_hexcode" : "#08aeea", "is_closed_type" : false, "is_default" : true }, "severity" : { "id" : "2380600009754345423", "value" : "Critical" }, "classification" : { "id" : "2380600009754345234", "value" : "Data Loss" }, "is_it_reproducible" : { "id" : "23806000097534234", "value" : "Rarely" }, "module" : { "id" : "238060000975434324", "value" : "Resolved Bugs Module" }, "release_milestone" : { "id" : "238060000975408779", "value" : "Planned Titles" }, "affected_milestone" : { "id" : "238060000975208543", "value" : "Modified Titles" }, "reminder" : { "type" : "daily", "time" : "12:00 PM", "reminder_custom_date" : "2025-12-12T12:30:00.000Z", "notify_users" : [ { "zuid" : 590675, "zpuid" : "23806000097546091", "name" : "John Mike", "email" : "johnmike23@gmail.com", "first_name" : "John" } ] }, "tags" : [ { "id" : "238060000975404352", "name" : "red bug", "color_class" : "bg-tag6" } ], "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }
Update an Issue

Update an issue in a project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 65000

Enter the name of the issue.

description

String

Enter the description of the issue.

flag

String

max length : 100

Specify the flag type of the issue. Accepted values: Internal or External

associated_teams

JSONObject

max length : 1000

Specify the team associated with the issue.

JSONObject

max length : 1000

Specify the assignee of the issue.

JSONObject

max length : 1000

Enter the status of the issue.

due_date

String

Enter the due date of the issue.

JSONArray

max length : 10000

Enter the IDs of the tags to associate.

release_milestone

JSONObject

max length : 1000

Specify the Release Milestone of the issue.

affected_milestone

JSONObject

max length : 1000

Specify the Affected Milestone of the issue.

JSONObject

max length : 1000

Specify the severity of the issue.

is_it_reproducible

JSONObject

max length : 1000

Specify if the issue is reproducible.

classification

JSONObject

max length : 1000

Specify the classification of the issue.

JSONObject

max length : 1000

Specify the module of the issue.

rate_per_hour

double

max length : 100

Enter rate per hour of the user.

cost_rate_per_hour

double

max length : 100

Enter cost per hour of the user.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Sample Bug Title", "description" : "This is a sample description of an Issue.", "flag" : "external", "associated_teams" : { "id" : "4000000062001" }, "assignee" : { "zpuid" : "4000000002055" }, "status" : { "id" : "4000000062001" }, "due_date" : "2025-12-12T02:12:00.000Z", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "release_milestone" : { "id" : "4000000062001" }, "affected_milestone" : { "id" : "4000000062001" }, "severity" : { "id" : "4000000062001" }, "is_it_reproducible" : { "id" : "4000000062001" }, "classification" : { "id" : "4000000062001" }, "module" : { "id" : "4000000062001" }, "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Sample Bug Title\",\"description\":\"This is a sample description of an Issue.\",\"flag\":\"external\",\"associated_teams\":{\"id\":\"4000000062001\"},\"assignee\":{\"zpuid\":\"4000000002055\"},\"status\":{\"id\":\"4000000062001\"},\"due_date\":\"2025-12-12T02:12:00.000Z\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"release_milestone\":{\"id\":\"4000000062001\"},\"affected_milestone\":{\"id\":\"4000000062001\"},\"severity\":{\"id\":\"4000000062001\"},\"is_it_reproducible\":{\"id\":\"4000000062001\"},\"classification\":{\"id\":\"4000000062001\"},\"module\":{\"id\":\"4000000062001\"},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Sample Bug Title", "description" : "This is a sample description of an Issue.", "flag" : "external", "associated_teams" : { "id" : "4000000062001" }, "assignee" : { "zpuid" : "4000000002055" }, "status" : { "id" : "4000000062001" }, "due_date" : "2025-12-12T02:12:00.000Z", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "release_milestone" : { "id" : "4000000062001" }, "affected_milestone" : { "id" : "4000000062001" }, "severity" : { "id" : "4000000062001" }, "is_it_reproducible" : { "id" : "4000000062001" }, "classification" : { "id" : "4000000062001" }, "module" : { "id" : "4000000062001" }, "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }

Sample Response

200{ "id" : "139655000000477124", "prefix" : "EC1-I14", "name" : "Escalation due to iterated process hold", "flag" : "Internal", "created_time" : "2024-05-06T11:25:58.000Z", "created_by" : { "zuid" : 76721203, "zpuid" : "139655000000072009", "name" : "kathrine Bode", "email" : "katharina.bode@gmail.com", "first_name" : "kathrine", "last_name" : "Bode" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "statuscol_yellowishorange", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 0, "zpuid" : "139655000000057657", "name" : "Unassigned User", "email" : "Unassigned User", "first_name" : "Unassigned User" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_class" : "bg-tag18" }, { "id" : "139655000000189037", "name" : "bug", "color_class" : "bg-tag19" }, { "id" : "139655000000493179", "name" : "problem", "color_class" : "bg-tag17" }, { "id" : "139655000000493183", "name" : "neefix", "color_class" : "bg-tag7" } ], "last_updated_time" : "2024-05-14T09:28:58.000Z", "severity" : { "id" : "139655000000057155", "value" : "Critical" }, "classification" : { "id" : "139655000000057017", "value" : "Security" }, "is_it_reproducible" : { "id" : "139655000000057057", "value" : "Sometimes" }, "module" : { "id" : "139655000000147034", "value" : "Module 1" }, "rate_per_hour" : 20.0, "cost_per_hour" : 10.0, "singleline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "miyoko.kunde", "email" : "miyoko.kunde@gmail.com", "first_name" : "Miyoko", "last_name" : "Kunde" }, "phone1" : "+91 98452252323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "clintwestwood@gmail.com", "multiline_1" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "jermine.dekow", "email" : "jermine.dekow@gmail.com", "first_name" : "Jermine", "last_name" : "Dekow" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "John Kevin", "email" : "johnkevin@gmail.com", "first_name" : "John", "last_name" : "Kevin" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Lehnar Annabelle", "email" : "lehnar.annabelle@gmail.com", "first_name" : "Lehnar", "last_name" : "Annabelle" } ] }
Delete an Issue

Remove issues from a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]

OAuth Scope:

ZohoProjects.bugs.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Get Issue Description

Retrieve the description of the issue in a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/description

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/description' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/description");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "description" : "A critical bug has been identified that halts the production build process. This issue needs immediate attention as it affects the deployment of the latest version of our application" }
Move an Issue

Move an Issue into another project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/move

OAuth Scope:

ZohoProjects.bugs.CREATE

Parameter

Param Name
Data Type
Description
to_project

long

required

Enter the project ID to which the issue should be moved.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/move' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "to_project" : "23806000097533251" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/move");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"to_project\":\"23806000097533251\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "to_project" : "23806000097533251" }

Sample Response

204 No Content
Clone an Issue

Clone an issue within the same project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/clone

OAuth Scope:

ZohoProjects.bugs.CREATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/clone' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/clone");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "bugs" : [ { "comment_count" : "0", "flag" : "Internal", "to_project" : 0, "link" : { "self_url" : "https://projects.localzoho.com/restapi/portal/54336862/projects/23806000097532186/bugs/23806000097532218" }, "title" : "AdminMenu", "added_by" : { "zpuid" : "23806000000152047", "name" : "lokesh.pn+api", "last_name" : "api", "id" : 53831617, "is_client_user" : false, "first_name" : "lokesh.pn+", "email" : "lokesh.pn+api@zohocorp.com" }, "added_via" : "api", "has_linked_issue" : true, "id" : "23806000097532218", "escalation_level" : "0", "key" : "D6W0-I2", "severity" : { "id" : "23806000001661069", "type" : "None" }, "created_time" : "2022-06-10T06:16:01.000Z", "last_modified_time" : "2022-06-10T06:16:01.000Z", "has_attachments" : true, "reproducible" : { "id" : "23806000001661047", "type" : "None" }, "module" : { "name" : "None", "id" : "23806000001661091" }, "due_date" : "2022-06-10T18:30:00.000Z", "has_mapped_task" : false, "classification" : { "id" : "23806000001661025", "type" : "None" }, "bug_number" : "2", "has_comments" : false, "closed" : false, "assignee" : { "zpuid" : "23806000000152047", "name" : "lokesh.pn+api", "last_name" : "api", "id" : 53831617, "is_client_user" : false, "first_name" : "lokesh.pn+", "email" : "lokesh.pn+api@zohocorp.com" }, "bug_prefix" : "D6W0", "attachment_count" : "1", "status" : { "colorcode" : "#08aeea", "id" : "23806000000007045", "type" : "Open" } } ] }
Get Issue Activities

Retrieve activities performed on issues in a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/activities

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to display per page

sort_by

String

Enter the sort order for the results.

JSONObject

Specify the filter criteria.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/activities?page="1"&per_page="10"&sort_by="ASC(created_time)"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/activities");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "activities" : [ { "action_time" : "2024-05-20T06:19:55.000Z", "activity" : "linkbug", "field" : { "old_value" : "", "new_value" : "", "field_name" : "Issue to Kessler Street 7508 Ziemann Camp" }, "project_id" : "139655000000391005", "id" : "139655000000498057", "user" : { "last_name" : "Kevin", "id" : "73746290", "display_name" : "John Kevin", "first_name" : "John", "user_photo" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=73746290", "email" : "johnkevin@gmail.com" }, "activity_state" : "linked" }, { "action_time" : "2024-05-20T06:19:54.000Z", "activity" : "create", "field" : { "old_value" : "", "new_value" : "Proxy Issue", "field_name" : "Issue" }, "project_id" : "139655000000391005", "id" : "139655000000498057", "user" : { "last_name" : "Kevin", "id" : "73746290", "display_name" : "John Kevin", "first_name" : "John", "user_photo" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=73746290", "email" : "johnkevin@gmail.com" }, "activity_state" : "Created" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 2, "page" : 1 } }
Get Status Transition

Retrieve the status transitions history of an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/statustransition

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/statustransition' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/statustransition");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200[ { "updated_status" : { "color" : "statuscol_blue", "name" : "Open", "id" : "139655000000057083", "is_closed" : false }, "updated_on" : "2024-06-03T07:30:23.772Z", "updated_by" : { "zpuid" : "139655000000057003", "id" : "73746290", "display_name" : "John Kevin", "email" : "johnkevin@gmail.com" }, "previous_status" : { "color" : "", "name" : "-", "id" : "0", "is_closed" : false } }, { "updated_status" : { "color" : "statuscol_yellowishorange", "name" : "In progress", "id" : "139655000000057085", "is_closed" : false }, "updated_on" : "2024-06-03T07:34:34.630Z", "duration" : { "hours" : "0:04 Hrs", "days" : "0 Days", "total_time" : "4 mins 10 secs" }, "updated_by" : { "zpuid" : "139655000000057003", "id" : "73746290", "display_name" : "Alex Johnson", "email" : "alex.johnson+local@zohotest.com" }, "previous_status" : { "color" : "statuscol_blue", "name" : "Open", "id" : "139655000000057083", "is_closed" : false } }, { "updated_status" : { "color" : "statuscol_green", "name" : "To be tested", "id" : "139655000000057087", "is_closed" : false }, "updated_on" : "2024-06-20T12:24:08.929Z", "duration" : { "hours" : "412:49 Hrs", "days" : "17 Days", "total_time" : "17 days 4 hrs 49 mins 34 secs" }, "updated_by" : { "zpuid" : "139655000000057003", "id" : "73746290", "display_name" : "Alex Johnson", "email" : "alex.johnson+local@zohotest.com" }, "previous_status" : { "color" : "statuscol_yellowishorange", "name" : "InProgress", "id" : "139655000000057085", "is_closed" : false } } ]
Issue Linking

This module covers issue linking operations in Zoho Projects. Use this API to retrieve linked issues, link issues in bulk, change link types, or unlink issues.

Get Linked Issues

Retrieve all linked issues of an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/linkedissues

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/linkedissues' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/linkedissues");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "issue_linked" : { "linked_issues_count" : 1, "linked_issues" : { "depends on" : [ { "issue_prefix" : "D6W0-I23", "issue_key" : "3", "status_id" : "23806000000007045", "issue_id" : "23806000097532262", "project_id" : "23806000097532186", "issue_subject" : "Baseline task escalated", "assignee" : "jackson@gmail.com", "link_style" : "depend", "link_id" : "23806000097532283" } ], "is duplicate of" : [ { "issue_prefix" : "D6W0-I34", "issue_key" : "3", "status_id" : "23806000000007045", "issue_id" : "23806000097532223", "project_id" : "23806000097532186", "issue_subject" : "Baseline task escalated (major)", "assignee" : "jackson@gmail.com", "link_style" : "depend", "link_id" : "23806000097532224" } ] }, "reverse_linked_issues" : { } } }

Establish a link between mulitple issues.

POST

OAuth Scope:

Parameter

Param Name
Data Type
Description
link_type

String

required

Enter the name of the link type.

issue_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the issues to be linked.

Request Example

Sample Input

Sample Response

Link multiple issues at once in a project.

POST

OAuth Scope:

Parameter

Param Name
Data Type
Description
link_type

String

required

Enter the name of the link type.

issue_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the source issue IDs.

linking_issue_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the issue IDs that are to be linked.

Request Example

Sample Input

Sample Response

Update the link type between two linked issues.

POST

OAuth Scope:

Parameter

Param Name
Data Type
Description
link_type

String

required

Enter the name of the link type.

issue_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the issues to be linked.

Request Example

Sample Input

Sample Response

Remove the link between issues in a project.

DELETE

OAuth Scope:

Request Example

Sample Response

Issue Task Mapping

This module covers issue-task mapping operations in Zoho Projects. Use this API to retrieve associated tasks, associate tasks with an issue, bulk-associate tasks, or dissociate tasks from an issue.

Get Associated Tasks of Issues

Retrieve the tasks associated with issues.

GET

/api/v3/portal/[PORTALID]/issues/associated-tasks

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
issue_ids

JSONArray

Enter the issue IDs.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues/associated-tasks?issue_ids="23806000097533216"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues/associated-tasks");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""issue_ids"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

issue_ids : "23806000097533216" page : "1" per_page : "10"

Sample Response

200{ "associated_tasks" : [ { "title" : "12", "id" : "4000000023141", "issue_id" : "4000000392019" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "15", "page" : "1" } }
Get Associated Tasks

Retrieve the tasks associated with an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/associated-tasks

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
sindex

String

Specify the index of the record.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/associated-tasks?sindex=-' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/associated-tasks");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sindex"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sindex : -
Associate Tasks for an Issue

Associate tasks with a specific issue.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/associate-tasks

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
task_ids

JSONArray

required

Enter the task IDs to associate with the issue.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/associate-tasks' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'task_ids = [2223806000097532204]'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/associate-tasks");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""task_ids"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

task_ids : [2223806000097532204]

Sample Response

200{ "is_already_mapped" : "true" }
Bulk Associate Tasks

Associate multiple tasks with multiple issues in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/bulk-associate-tasks

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
issue_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the IDs of the issues.

task_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the task IDs to associate with the issues.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/bulk-associate-tasks' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "issue_ids" : "23806000097533216", "task_ids" : [ 2223806000097532204 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/bulk-associate-tasks");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "issue_ids" : "23806000097533216", "task_ids" : [ 2223806000097532204 ] }

Sample Response

204 No Content
Dissociate Task

Dissociate a task from an issue.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/task/[TASKID]

OAuth Scope:

ZohoProjects.bugs.UPDATE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/task/"1752587000000097101"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/task/"1752587000000097101"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Issue Resolution

This module covers issue resolution operations within Zoho Projects. Use this API to retrieve, add, update, or delete resolutions, manage resolution custom fields, and dissociate attachments.

Get Resolution

Retrieve the resolution of an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/resolution

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "issue_resolution" : { "resolver_info" : { "zpuid" : "139655000000057003", "full_name" : "Felix Jason", "name" : "Felix Jason", "last_name" : "Jason", "id" : "73746290", "first_name" : "Felix", "email" : "felixjson123@gmail.com" }, "thirdparty_attachments" : [ { "created_time" : "1716870591370", "associated_time_long" : "1716870594323", "third_party_file_id" : "c9yhebcf0ada9d528483a8cab7e29cbf6c704", "parentFolderId" : "877vjbea584a9130a4ed080e3416df2e94f0a", "app_domain" : "workdrive", "type" : "image/png", "entity_id" : "139655000000500019", "created_by" : "73746290", "uploadedZpuid" : "139655000000057003", "app_name" : "", "permanent_url" : "https://workdrive.zoho.com/file/c9yhebcf0ada9d528483a8cab7e29cbf6c704?authId=%7B%22module%22%3A%22bug_resolution%22%2C%22entity_id%22%3A%22139655000000061005_139655000000500019%22%7D", "entity_type" : "bug_resolution", "size" : "2480691", "associated_by" : "73746290", "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/c9yhebcf0ada9d528483a8cab7e29cbf6c704?x-cli-msg=eyJtb2R1bGUiOiJidWdfcmVzb2x1dGlvbiIsImVudGl0eV9pZCI6IjEzOTY1NTAwMDAwMDA2MTAwNV8xMzk2NTUwMDAwMDA1MDAwMTkifQ&size=l", "attachment_id" : "139655000000505053", "name" : "Screenshot 2024-05-21 at 6.37.40?PM (2).png", "associated_by_name" : "Felix Jason", "download_url" : "https://download.zoho.com/v1/workdrive/download/c9yhebcf0ada9d528483a8cab7e29cbf6c704?x-cli-msg=%7B%22module%22%3A%22bug_resolution%22%2C%22entity_id%22%3A%22139655000000061005_139655000000500019%22%7D", "app_id" : "1", "trashed" : false } ], "status_info" : { "name" : "ToBeTested", "id" : "139655000000057087", "is_issue_closed" : false }, "resolution_time" : "2024-05-28T04:29:29.532Z", "resolution" : "
The issue was identified as a missing dependency in the build configuration. The following steps were taken to resolve the bug Investigation, Fix Implementation, Testing, Deployment

", "resolutionDsp" : "
The issue was identified as a missing dependency in the build configuration. The following steps were taken to resolve the bug Investigation, Fix Implementation, Testing, Deployment

" } }
Add Resolution

Add the resolution to an issue.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/resolution

OAuth Scope:

ZohoProjects.bugs.CREATE

Parameter

Param Name
Data Type
Description
resolution

String

required

Enter the resolution content.

status_id

long

Enter the status ID.

UDF_NCHAR

String

max length : 150

Enter the character custom field value

UDF_NUSER

long

Enter user custom field value

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "resolution" : "The issue is resolved.", "status_id" : "23806000097533111", "UDF_NCHAR" : "-", "UDF_NUSER" : "-", "attachment_ids" : [ 23806000097533241 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"resolution\":\"The issue is resolved.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[23806000097533241]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "resolution" : "The issue is resolved.", "status_id" : "23806000097533111", "UDF_NCHAR" : "-", "UDF_NUSER" : "-", "attachment_ids" : [ 23806000097533241 ] }

Sample Response

204 No Content
Update Resolution

Modify the resolution of an issue.

PUT

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/resolution

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
resolution

String

required

Enter the resolution content.

status_id

long

Enter the status ID.

UDF_NCHAR

String

max length : 150

Enter the character custom field value

UDF_NUSER

long

Enter user custom field value

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs.

Request Example

curl -X PUT 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "resolution" : "The issue is resolved.", "status_id" : "23806000097533111", "UDF_NCHAR" : "-", "UDF_NUSER" : "-", "attachment_ids" : [ 23806000097533241 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution");
   HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"resolution\":\"The issue is resolved.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[23806000097533241]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "resolution" : "The issue is resolved.", "status_id" : "23806000097533111", "UDF_NCHAR" : "-", "UDF_NUSER" : "-", "attachment_ids" : [ 23806000097533241 ] }

Sample Response

204 No Content
Delete Resolution

Remove the resolution of an issue.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/resolution

OAuth Scope:

ZohoProjects.bugs.UPDATE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/resolution");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Issue Followers

This module covers issue follower related operations within Zoho Projects. Use this API to get followers, follow or unfollow an issue, and remove followers.

Get Followers of an Issue

Retrieve the followers of an issue in a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/followers

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "followers" : [ { "zpuid" : "23806000003669048", "name" : "lokesh.pn+admin", "last_name" : "", "id" : "57261352", "is_client_user" : false, "first_name" : "lokesh.pn+admin", "email" : "lokesh.pn+admin@zohotest.com" } ] }
Follow an Issue

Receive updates or notifications about the issue in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/followers

OAuth Scope:

ZohoProjects.bugs.CREATE

Parameter

Param Name
Data Type
Description
follower_ids

JSONArray

required
max length : 7000
array size : 0-100

Followers id

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "follower_ids" : [ 57261352 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"follower_ids\":[57261352]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "follower_ids" : [ 57261352 ] }

Sample Response

200{ "followers" : [ { "zpuid" : "23806000003669048", "name" : "lokesh.pn+admin", "last_name" : "", "id" : "57261352", "is_client_user" : false, "first_name" : "lokesh.pn+admin", "email" : "lokesh.pn+admin@zohotest.com" } ] }
Remove Followers

Remove followers from an issue in a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/followers

OAuth Scope:

ZohoProjects.bugs.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/followers");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Issue Custom Views

This module covers custom view related operations within Zoho Projects. Use this API to create, retrieve, update, or delete custom views, set views as default or favorite, and manage the columns and layout of custom views for both individual projects and the portal.

Get All Custom Views

Retrieve custom views of the portal.

GET

/api/v3/portal/[PORTALID]/issues/customviews

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues/customviews' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/issues/customviews");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Get Custom Views

Retrieve custom views of a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/customviews

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/customviews' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/customviews");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "favourites" : [ ], "default_views" : [ { "custom_view_id" : "0", "module_id" : "139655000000018003", "name" : "All Issues", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : true, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "6", "module_id" : "139655000000018003", "name" : "All Open", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "7", "module_id" : "139655000000018003", "name" : "All Closed", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "19", "module_id" : "139655000000018003", "name" : "My Open", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "20", "module_id" : "139655000000018003", "name" : "My Closed", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "21", "module_id" : "139655000000018003", "name" : "Unassigned", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "38", "module_id" : "139655000000018003", "name" : "Overdue & Open", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "23", "module_id" : "139655000000018003", "name" : "Created Today", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "25", "module_id" : "139655000000018003", "name" : "Issues I Follow", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "33", "module_id" : "139655000000018003", "name" : "Escalated Issues", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "27", "module_id" : "139655000000018003", "name" : "Issues Created By Me", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "29", "module_id" : "139655000000018003", "name" : "Assigned Via Pick List", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false }, { "custom_view_id" : "41", "module_id" : "139655000000018003", "name" : "Issues Associated to Team", "access_type" : "1", "is_custom_column" : false, "is_default" : true, "is_favourite" : false, "is_anchored" : false, "is_editable" : false, "is_deletable" : false, "overview_access" : false } ], "custom_views" : [ { "custom_view_id" : "139655000000435005", "module_id" : "139655000000018003", "name" : "title", "description" : "", "access_type" : "2", "project_access_type" : "2", "is_custom_column" : false, "is_default" : false, "custom_view_owner" : "73746290", "is_favourite" : false, "is_anchored" : false, "is_editable" : true, "is_deletable" : true, "overview_access" : false }, { "custom_view_id" : "139655000000114164", "module_id" : "139655000000018003", "name" : "Zoho Desk Issue", "description" : "", "access_type" : "2", "project_access_type" : "2", "is_custom_column" : false, "is_default" : false, "custom_view_owner" : "73746290", "is_favourite" : false, "is_anchored" : false, "is_editable" : true, "is_deletable" : true, "overview_access" : false }, { "custom_view_id" : "139655000000114150", "module_id" : "139655000000018003", "name" : "Created Date is 30-6-2023", "description" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem \r\n", "access_type" : "2", "project_access_type" : "2", "is_custom_column" : false, "is_default" : false, "custom_view_owner" : "73746290", "is_favourite" : false, "is_anchored" : false, "is_editable" : true, "is_deletable" : true, "overview_access" : false } ] }
Get Custom View Detail

Retrieve the details of a custom view along with its fields.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/customviews/[CUSTOMVIEWID]

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/customviews/"1752587000000097269"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/customviews/"1752587000000097269"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "customview" : { "access_type" : "2", "is_custom_column" : false, "is_anchored" : false, "criteria" : { "pattern" : "1", "criteria_json" : "[{\"cfid\":\"139655000000057107\",\"criteria_condition\":\"is\",\"value\":[\"2023-06-30T00:00:00.000Z\"]}]", "rubric" : { "criteria" : [ { "cfid" : "139655000000057107", "criteria_condition" : "is", "value" : [ "2023-06-30T00:00:00.000Z" ] } ], "pattern" : "1", "fields" : [ { "cfid" : 12, "is_encrypted" : false, "column_name" : "SUMMARY", "display_name" : "zp.dependview.milestone", "is_default" : true, "table_name" : "Issue", "field_type" : "singleline" }, { "cfid" : 139655000000266004, "is_encrypted" : false, "column_name" : "UDF_NCHAR11", "data_type" : "CHAR", "description" : "", "display_name" : "SINGLELINE_1", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "singleline" }, { "cfid" : 139655000000266006, "is_encrypted" : false, "column_name" : "UDF_NTEXT2", "data_type" : "TEXT", "description" : "", "display_name" : "MULTILINE_1", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "multiline" }, { "cfid" : 139655000000266008, "is_encrypted" : false, "column_name" : "UDF_NCHAR12", "data_type" : "CHAR", "description" : "", "display_name" : "PICKLIST_1", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "picklist" }, { "cfid" : 139655000000266010, "is_encrypted" : false, "column_name" : "UDF_NUSER5", "data_type" : "USER", "description" : "", "display_name" : "USERPICKLIST @ALL", "is_default" : false, "module_data" : { "userlist_type" : "1", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "userpicklist" }, { "cfid" : 139655000000266012, "is_encrypted" : false, "column_name" : "UDF_NDATE3", "data_type" : "DATE", "description" : "", "display_name" : "DATETIME_1", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "dateandtime" }, { "cfid" : 139655000000266002, "is_encrypted" : false, "column_name" : "UDF_NLONG2", "data_type" : "LONG", "description" : "", "display_name" : "NUMBER_1", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "Numeric" }, { "cfid" : 139655000000266119, "is_encrypted" : false, "column_name" : "UDF_NCHAR13", "data_type" : "CHAR", "description" : "", "display_name" : "SINGELINE_2", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "singleline" }, { "cfid" : 139655000000266121, "is_encrypted" : false, "column_name" : "UDF_NTEXT3", "data_type" : "TEXT", "description" : "", "display_name" : "MULTILINE_2", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "multiline" }, { "cfid" : 139655000000266123, "is_encrypted" : false, "column_name" : "UDF_NCHAR14", "data_type" : "CHAR", "description" : "", "display_name" : "PICKLIST_2", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "picklist" }, { "cfid" : 139655000000266125, "is_encrypted" : false, "column_name" : "UDF_NUSER6", "data_type" : "USER", "description" : "", "display_name" : "USERPICKLIST @ROLE", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "userpicklist" }, { "cfid" : 139655000000266127, "is_encrypted" : false, "column_name" : "UDF_NDATE4", "data_type" : "DATE", "description" : "", "display_name" : "DATETIME2", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "dateandtime" }, { "cfid" : 139655000000266117, "is_encrypted" : false, "column_name" : "UDF_NLONG3", "data_type" : "LONG", "description" : "", "display_name" : "NUMBER_2", "is_default" : false, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "CustomFieldsValue", "field_type" : "Numeric" }, { "cfid" : 139655000000057105, "is_encrypted" : false, "column_name" : "REPORTER", "data_type" : "CHAR", "description" : "", "display_name" : "zp.buglayout.reporter", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "userpicklist" }, { "cfid" : 139655000000057107, "is_encrypted" : false, "column_name" : "CREATED_TIME", "data_type" : "DATE", "description" : "", "display_name" : "zp.buglayout.created", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "dateandtime" }, { "cfid" : 139655000000057109, "is_encrypted" : false, "column_name" : "USERGROUP_ID", "data_type" : "TEAM", "description" : "", "display_name" : "zp.groups.associatedteams", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "ZPIssueUserGroupMapping", "field_type" : "teampicklist" }, { "cfid" : 139655000000057111, "is_encrypted" : false, "column_name" : "ASSIGNEE_ZPUID", "data_type" : "CHAR", "description" : "", "display_name" : "zp.buglayout.assignee", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "userpicklist" }, { "cfid" : 139655000000057113, "is_encrypted" : false, "column_name" : "TAG_ID", "data_type" : "CHAR", "description" : "", "display_name" : "zp.tag.tags1", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "ZPTagEntityMapping3", "field_type" : "picklist" }, { "cfid" : 139655000000057115, "is_encrypted" : false, "column_name" : "ISSUECOMPLETEDON", "data_type" : "DATE", "description" : "", "display_name" : "zp.buglayout.lastclosed", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "dateandtime" }, { "cfid" : 139655000000057117, "is_encrypted" : false, "column_name" : "UPDATED_TIME", "data_type" : "DATE", "description" : "", "display_name" : "zp.buglayout.modified", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "dateandtime" }, { "cfid" : 139655000000057119, "is_encrypted" : false, "column_name" : "DUE_DATE", "data_type" : "DATE", "description" : "", "display_name" : "zp.buglayout.duedate", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "dateandtime" }, { "cfid" : 139655000000057121, "is_encrypted" : false, "column_name" : "ISSUESTATUS_ID", "data_type" : "CHAR", "description" : "", "display_name" : "zp.reports.status", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057123, "is_encrypted" : false, "column_name" : "SEVERITY_ID", "data_type" : "CHAR", "description" : "", "display_name" : "Severity", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057125, "is_encrypted" : false, "column_name" : "MILESTONEID", "data_type" : "CHAR", "description" : "", "display_name" : "Release Milestone", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "IssueMilestoneMapping", "field_type" : "picklist" }, { "cfid" : 139655000000057127, "is_encrypted" : false, "column_name" : "AFFECTED_MILEID", "data_type" : "CHAR", "description" : "", "display_name" : "Affected Milestone", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "IssueAffectedMileMapping", "field_type" : "picklist" }, { "cfid" : 139655000000057129, "is_encrypted" : false, "column_name" : "MODULEID", "data_type" : "CHAR", "description" : "", "display_name" : "Module", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057131, "is_encrypted" : false, "column_name" : "ISSUETYPE_ID", "data_type" : "CHAR", "description" : "", "display_name" : "Classification", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057133, "is_encrypted" : false, "column_name" : "PRIORITY_ID", "data_type" : "CHAR", "description" : "", "display_name" : "Reproducible", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057135, "is_encrypted" : false, "column_name" : "FLAG", "data_type" : "CHAR", "description" : "", "display_name" : "zp.buglayout.Flag", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 139655000000057137, "is_encrypted" : false, "column_name" : "RATE_PER_HOUR", "data_type" : "DOUBLE", "description" : "", "display_name" : "zp.invoice.rateperhour", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "decimal" }, { "cfid" : 139655000000057139, "is_encrypted" : false, "column_name" : "COST_RATE_PER_HOUR", "data_type" : "DOUBLE", "description" : "", "display_name" : "zp.invoice.costrateperhour", "is_default" : true, "module_data" : { "userlist_type" : "0", "role_picklist" : [ ] }, "table_name" : "Issue", "field_type" : "decimal" }, { "cfid" : 17, "is_encrypted" : false, "column_name" : "AGE_SINCE_CREATED", "display_name" : "zp.bugs.age_sincecreated", "is_default" : true, "table_name" : "Issue", "field_type" : "Numeric" }, { "cfid" : 18, "is_encrypted" : false, "column_name" : "AGE_SINCE_DUE", "display_name" : "zp.bugs.age_sincedue", "is_default" : true, "table_name" : "Issue", "field_type" : "Numeric" }, { "cfid" : 46, "is_encrypted" : false, "column_name" : "ISTASKMAPPED", "display_name" : "zp.taskbugmapping.mappedtask", "is_default" : true, "table_name" : "Issue", "field_type" : "picklist" }, { "cfid" : 23, "is_encrypted" : false, "column_name" : "FOLLOWER", "display_name" : "Issues I Follow", "is_default" : true, "table_name" : "ZPIssueFollow", "field_type" : "userpicklist" }, { "cfid" : 24, "is_encrypted" : false, "column_name" : "ISSUPPORT_TICKET_ASSOCIATED", "display_name" : "Issues from Zoho Desk", "is_default" : true, "table_name" : "Issue", "field_type" : "singleline" }, { "cfid" : 19, "is_encrypted" : false, "column_name" : "ISESCALATED", "display_name" : "zp.bugset.esclevel", "is_default" : true, "table_name" : "Issue", "field_type" : "Numeric" } ] } }, "project_access_type" : "2", "description" : "Issues that are created during the production failure.\r\n", "is_deletable" : true, "is_editable" : true, "is_favourite" : false, "is_default" : false, "custom_view_owner" : "73746290", "overview_access" : false, "module_id" : "139655000000018003", "custom_view_id" : "139655000000114150", "name" : "Created Date is 30-6-2023" } }
Issue Attachment

This module covers issue attachments related operations within Zoho Projects. Use this API to retrieve, associate, dissociate, or get project attachments.

Get Attachments

Retrieve all attachments of an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/attachments

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
extension_ids

JSONArray

Enter details for attachment extension IDs.

app_types

JSONArray

Enter the application type. Accepted application type: {regex}

sub_type

String

Enter the sub type. Available types: comments, resolution, or bug

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments?extension_ids=-&app_types=-&sub_type=-' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""extension_ids"", "");
   uriBuilder.addParameter(""app_types"", "");
   uriBuilder.addParameter(""sub_type"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

extension_ids : - app_types : - sub_type : -

Sample Response

200{ "comment_attachments" : [ ], "attachments" : [ { "app_name" : "", "created_time" : "2024-05-28T05:02:56.685Z", "permanent_url" : "https://workdrive.zoho.com/file/c9yhef2d461e0943a4a4490b5a4e9b1e13b4d?authId=%7B%22module%22%3A%22bug%22%2C%22entity_id%22%3A%22139655000000439005_139655000000439311%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "John Kevin", "name" : "John Kevin", "last_name" : "Kevin", "id" : 73746290, "is_client_user" : false, "first_name" : "John Kevin", "email" : "johnkevin@gmail.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/c9yhef2d461e0943a4a4490b5a4e9b1e13b4d?x-cli-msg=eyJtb2R1bGUiOiJidWciLCJlbnRpdHlfaWQiOiIxMzk2NTUwMDAwMDA0MzkwMDVfMTM5NjU1MDAwMDAwNDM5MzExIn0&size=l", "file_info" : { "size" : "3618", "name" : "IssueLinkDuplicateEntries.java", "id" : "c9yhef2d461e0943a4a4490b5a4e9b1e13b4d", "type" : "application/x-unknown-mime-type" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/c9yhef2d461e0943a4a4490b5a4e9b1e13b4d?x-cli-msg=%7B%22module%22%3A%22bug%22%2C%22entity_id%22%3A%22139655000000439005_139655000000439311%22%7D", "id" : "139655000000505141", "created_by" : { "zpuid" : "139655000000057655", "full_name" : "Kim Alexa", "name" : "Kim Alexa", "last_name" : "Alexa", "id" : -1, "is_client_user" : false, "first_name" : "Kim", "email" : "kimalexa52@gmail.com" }, "entity" : { "id" : "139655000000439311", "type" : "bug" }, "associated_time" : "2024-05-28T05:02:56.780Z" } ], "total_attachments_count" : 1, "is_sprints_integrated" : false, "resolution_attachments" : [ ] }
Associate Attachments

Associate attachments with an issue.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/attachments

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
attachment_ids

JSONArray

Enter the IDs of the attachments to be associated.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'attachment_ids = [23806000097533241]'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""attachment_ids"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

attachment_ids : [23806000097533241]
Dissociate Attachment

Dissociate an attachment from an issue.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/attachments/[ATTACHMENTID]

OAuth Scope:

ZohoProjects.bugs.UPDATE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments/"1752587000000097260"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments/"1752587000000097260"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Issue Comments

This module covers issue comments related operations within Zoho Projects. Use this API to retrieve, add, update, or delete comments and manage comment attachments.

Get Comments

Retrieve all comments of an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/comments

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter a page number.

per_page

int

Enter the number of entries to display per page.

sort_by

String

Enter the sort order. Accepted values: DESC or ASC

JSONObject

Enter the filter criteria.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"?page="1"&per_page="10"&sort_by="ASC(created_time)"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "comments" : [ { "created_time" : "2024-05-28T05:22:05.210Z", "can_edit_comment" : true, "last_modified_time" : "2024-05-28T05:22:05.210Z", "can_delete_comment" : true, "added_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" }, "added_via" : "Projects", "comment" : "
Great work on resolving this issue quickly. The missing dependency was a critical oversight, but the prompt investigation and fix have ensured that our deployment schedule remains on track.
", "id" : "139655000000505161", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" } } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 2, "page" : 1, "sort_by" : [ { "field_names" : [ "created_time" ], "order_by" : "ASCENDING" } ] } }
Get Issue Comment

Retrieve a specific comment on an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "comments" : [ { "created_time" : "2024-05-28T05:22:05.210Z", "can_edit_comment" : true, "last_modified_time" : "2024-05-28T05:22:05.210Z", "can_delete_comment" : true, "added_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" }, "added_via" : "Projects", "comment" : "
Great work on resolving this issue quickly. The missing dependency was a critical oversight, but the prompt investigation and fix have ensured that our deployment schedule remains on track.
", "id" : "139655000000505161", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" } } ] }
Get Comment Attachment

Retrieve the attachment of a comment in an issue.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/attachments/comments

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
comment_id

long

Enter the comment ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments/"Test Comment"?comment_id=-' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/attachments/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""comment_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

comment_id : -

Sample Response

200{ "comment_attachments" : [ { "app_name" : "", "created_time" : "2024-05-28T05:32:50.817Z", "permanent_url" : "https://workdrive.zoho.com/file/c9yhe43939cebab334d45b154220be6a86156?authId=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22139655000000439005_139655000000505153%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "Alex Johnson", "name" : "Alex", "last_name" : "Johnson", "id" : 73746290, "is_client_user" : false, "first_name" : "Alex", "email" : "alex.johnson+local@zohotest.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/c9yhe43939cebab334d45b154220be6a86156?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjEzOTY1NTAwMDAwMDQzOTAwNV8xMzk2NTUwMDAwMDA1MDUxNTMifQ&size=l", "file_info" : { "size" : "2480691", "name" : "Screenshot 2024-05-21 at 6.37.40?PM (2).png", "id" : "c9yhe43939cebab334d45b154220be6a86156", "type" : "image/png" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/c9yhe43939cebab334d45b154220be6a86156?x-cli-msg=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22139655000000439005_139655000000505153%22%7D", "id" : "139655000000505165", "created_by" : { "zpuid" : "139655000000057655", "full_name" : "Any User", "name" : "Any User", "last_name" : "", "id" : -1, "is_client_user" : false, "first_name" : "Any User", "email" : "Any User" }, "entity" : { "id" : "139655000000505153", "type" : "bug_comment" }, "associated_time" : "2024-05-28T05:32:54.825Z" } ], "attachments" : [ ], "total_attachments_count" : 1, "is_sprints_integrated" : false, "resolution_attachments" : [ ] }
Add Comment

Add a comment to an issue.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/comments

OAuth Scope:

ZohoProjects.bugs.CREATE

Parameter

Param Name
Data Type
Description
comment

String

required

Enter the comment content

notify_users

JSONArray

max length : 7000
array size : 0-100

Enter the ZUIDs of the users to be notified

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter IDs of the attachments to be associated

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "-", "notify_users" : "-", "attachment_ids" : [ 23806000097533241 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"-\",\"notify_users\":\"-\",\"attachment_ids\":[23806000097533241]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "-", "notify_users" : "-", "attachment_ids" : [ 23806000097533241 ] }

Sample Response

200{ "comments" : [ { "created_time" : "2024-05-28T05:22:05.210Z", "can_edit_comment" : true, "last_modified_time" : "2024-05-28T05:22:05.210Z", "can_delete_comment" : true, "added_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" }, "added_via" : "Projects", "comment" : "
Great work on resolving this issue quickly. The missing dependency was a critical oversight, but the prompt investigation and fix have ensured that our deployment schedule remains on track.
", "id" : "139655000000505161", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" } } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 2, "page" : 1, "sort_by" : [ { "field_names" : [ "created_time" ], "order_by" : "ASCENDING" } ] } }
Update Comment

Update a comment on an issue.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.bugs.UPDATE

Parameter

Param Name
Data Type
Description
comment

String

required

Enter the comment content.

notify_users

JSONArray

max length : 7000
array size : 0-100

Enter the ZUIDs of the users to be notified.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter IDs of the attachments to be associated.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "-", "notify_users" : "-", "attachment_ids" : [ 23806000097533241 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"-\",\"notify_users\":\"-\",\"attachment_ids\":[23806000097533241]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "-", "notify_users" : "-", "attachment_ids" : [ 23806000097533241 ] }

Sample Response

200{ "comments" : [ { "created_time" : "2024-05-28T05:22:05.210Z", "can_edit_comment" : true, "last_modified_time" : "2024-05-28T05:22:05.210Z", "can_delete_comment" : true, "added_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" }, "added_via" : "Projects", "comment" : "
Great work on resolving this issue quickly. The missing dependency was a critical oversight, but the prompt investigation and fix have ensured that our deployment schedule remains on track.
", "id" : "139655000000505161", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Jennie Deva", "name" : "Jennie", "last_name" : "Deva", "id" : 73746290, "is_client_user" : false, "first_name" : "Jennie", "email" : "jenniedev@yahoo.com" } } ] }
Delete Comment

Remove a comment from an issue.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.bugs.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/issues/"1752587000000097233"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Task Lists

This module covers task list related operations within Zoho Projects. Use this API to retrieve, create, update, reorder, move, or delete task lists in both portals and projects.

Get Task Lists By Portal

Retrieve task lists from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/all-tasklists

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description

JSONObject

Enter filter criteria.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/all-tasklists?"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}],"module_name":"-"}],"pattern":"1AND2"}]&page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&view_id="0"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/all-tasklists");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}],"module_name":"-"}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ], "module_name" : "-" } ], "pattern" : "1 AND 2" } ] page : "1" per_page : "10" sort_by : "ASC(last_updated_time)" view_id : "0"

Sample Response

200{ "page_info" : { "per_page" : "200", "has_next_page" : "false", "page" : "1", "page_count" : "6" }, "tasklists" : [ { "created_time" : "2024-05-29T07:11:46.275Z", "sequence" : { "project_sequence" : 1, "milestone_sequence" : 1 }, "flag" : "internal", "milestone" : { "id" : "18000000000977" }, "last_updated_time" : "2024-07-17T07:12:52.876Z", "created_via" : "web", "meta_info" : { "is_rolled" : false, "has_comments" : false, "is_general" : false, "count_info" : { "filtered_task_count" : 31 }, "is_completed" : false, "is_none_milestone_tasklist" : true }, "name" : "TL", "project" : { "id" : 18000000005623 }, "id" : "18000000005735", "status" : "active" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Get All Project Task Lists

Retrieve task lists associated with a specific project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description

JSONObject

Enter the filter criteria.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists?"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}],"module_name":"-"}],"pattern":"1AND2"}]&page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&view_id="0"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}],"module_name":"-"}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ], "module_name" : "-" } ], "pattern" : "1 AND 2" } ] page : "1" per_page : "10" sort_by : "ASC(last_updated_time)" view_id : "0"

Sample Response

200{ "page_info" : { "per_page" : "200", "has_next_page" : "false", "page" : "1", "page_count" : "2" }, "tasklists" : [ { "created_time" : "2024-05-29T07:11:46.275Z", "sequence" : { "project_sequence" : 1, "milestone_sequence" : 1 }, "flag" : "internal", "milestone" : { "id" : "18000000000977" }, "last_updated_time" : "2024-07-17T07:12:52.876Z", "created_via" : "web", "meta_info" : { "is_rolled" : false, "has_comments" : false, "is_general" : false, "count_info" : { "filtered_task_count" : 31 }, "is_completed" : false, "is_none_milestone_tasklist" : true }, "name" : "TL", "id" : "18000000005735", "status" : "active" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Get Task List Details

Retrieve details from a task list.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]

OAuth Scope:

ZohoProjects.tasklists.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "created_time" : "2024-11-25T09:37:41.209Z", "sequence" : { "project_sequence" : "449", "milestone_sequence" : "1" }, "flag" : "internal", "milestone" : { "name" : "None", "id" : "4000000000800" }, "last_updated_time" : "2024-11-25T10:39:22.431Z", "created_via" : "api", "meta_info" : { "is_rolled" : "false", "has_comments" : "false", "is_general" : "false", "is_completed" : "false", "is_none_milestone_tasklist" : "true" }, "name" : "Update Tasklist From API", "id" : "4000001392009", "created_by" : { "zpuid" : "4000000002143", "name" : "Mark", "last_name" : "h1", "first_name" : "Mark", "email" : "harris.j+h1@zohotest.com", "zuid" : "19621084" }, "status" : "active" }
Create Task List

Add a Task list to the project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists

OAuth Scope:

ZohoProjects.tasklists.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 10000

Enter the name of the task list

milestone

JSONObject

Enter the associated milestone ID.

flag

String

max length : 100

Set the task list flag. Accepted values: Internal or External.

status

String

max length : 100

Enter the status of the task list.

JSONArray

max length : 10000

Enter the tag details.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Tasklist", "milestone" : { "id" : "4000000062001" }, "flag" : "internal", "status" : "active", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Tasklist", "milestone" : { "id" : "4000000062001" }, "flag" : "internal", "status" : "active", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }

Sample Response

201{ "created_time" : "2024-11-25T10:37:14.190Z", "sequence" : { "project_sequence" : "458", "milestone_sequence" : "10" }, "flag" : "internal", "milestone" : { "name" : "None", "id" : "4000000000800" }, "last_updated_time" : "2024-11-25T10:37:14.190Z", "created_via" : "api", "meta_info" : { "is_rolled" : "false", "has_comments" : "false", "is_general" : "false", "is_completed" : "false", "is_none_milestone_tasklist" : "true" }, "name" : "create tasklist from API", "id" : "4000001396003", "created_by" : { "zpuid" : "4000000002143", "name" : "Mark", "last_name" : "h1", "first_name" : "Mark", "email" : "harris.j+h1@zohotest.com", "zuid" : "19621084" }, "status" : "active" }
Update Task List

Modify details of the task list in a project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]

OAuth Scope:

ZohoProjects.tasklists.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 10000

Enter the task list name.

milestone

JSONObject

Enter the milestone information.

flag

String

max length : 100

Specify the task list flag. Accepted values: internal or external.

status

String

max length : 100

Enter the task list status.

JSONArray

max length : 10000

Enter the task list tag.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Tasklist", "milestone" : { "id" : "4000000062001" }, "flag" : "internal", "status" : "active", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Tasklist", "milestone" : { "id" : "4000000062001" }, "flag" : "internal", "status" : "active", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ] }

Sample Response

200{ "created_time" : "2024-11-25T09:37:41.209Z", "sequence" : { "project_sequence" : "449", "milestone_sequence" : "1" }, "flag" : "internal", "milestone" : { "name" : "None", "id" : "4000000000800" }, "last_updated_time" : "2024-11-25T10:39:22.431Z", "created_via" : "api", "meta_info" : { "is_rolled" : "false", "has_comments" : "false", "is_general" : "false", "is_completed" : "false", "is_none_milestone_tasklist" : "true" }, "name" : "Update Tasklist From API", "id" : "4000001392009", "created_by" : { "zpuid" : "4000000002143", "name" : "Mark", "last_name" : "h1", "first_name" : "Mark", "email" : "harris.j+h1@zohotest.com", "zuid" : "19621084" }, "status" : "active" }
Delete Task List

Remove a task list from the project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Task List Comments

This module covers operations related to task list comments within Zoho Projects. Use this API to retrieve, add, update, or delete comments and manage comment attachments in task lists.

Get Comments

Retrieve multiple comments from a task list.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/comments

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"?page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_updated_time)"

Sample Response

200{ "comments" : [ { "created_time" : "2025-01-06T07:04:50.097Z", "updated_time" : "2025-01-06T07:04:50.097Z", "attachments" : [ ], "added_via" : "web", "updated_by" : { "zpuid" : "4000000002471", "full_name" : "test one", "name" : "test", "last_name" : "one", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "saanakkya.sl+testone@zohotest.com" }, "comment" : "test from postman", "id" : "4000000028017", "created_by" : { "zpuid" : "4000000002471", "full_name" : "test one", "name" : "test", "last_name" : "one", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "saanakkya.sl+testone@zohotest.com" } } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Get Comment

Retrieve a specific comment from a task list

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.tasklists.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "id" : "4000000028017", "comment" : "test from postman", "attachments" : [ ], "created_time" : "2025-01-06T07:04:50.097Z", "updated_time" : "2025-01-06T07:04:50.097Z", "added_via" : "web", "created_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" } }
Add Comment

Add a comment to a task list.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/comments

OAuth Scope:

ZohoProjects.tasklists.CREATE

Parameter

Param Name
Data Type
Description
comment

String

required
max length : 500000

Enter the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the attachment IDs.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"a new comment\",\"attachments\":[23806000073742867]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }

Sample Response

201[ { "id" : "4000000028017", "comment" : "test from postman", "attachments" : [ ], "created_time" : "2025-01-06T07:04:50.097Z", "updated_time" : "2025-01-06T07:04:50.097Z", "added_via" : "web", "created_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" } } ]
Update Comment

Modify a comment in a task list.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.tasklists.UPDATE

Parameter

Param Name
Data Type
Description
comment

String

required
max length : 500000

Enter the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the attachment IDs.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"a new comment\",\"attachments\":[23806000073742867]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }

Sample Response

200[ { "id" : "4000000028017", "comment" : "xasd", "attachments" : [ ], "created_time" : "2025-01-06T07:04:50.097Z", "updated_time" : "2025-01-06T07:05:08.923Z", "added_via" : "web", "created_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" } } ]
Delete Comment

Remove a comment from a task list.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Task List Followers

This module covers operations related to task list followers within Zoho Projects. Use this API to retrieve followers, follow, or unfollow task lists.

Get Task List followers

Retrieve followers for a task list.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/followers

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/followers?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/followers");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "followers" : [ { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zohotest.com", "zuid" : "16469208" } ], "page_info" : { "per_page" : "25", "has_next_page" : "false", "page" : "1" } }
Follow Task List

Follow a task list in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/follow

OAuth Scope:

ZohoProjects.tasklists.CREATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/follow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/follow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

201{ "followers" : [ { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zohotest.com", "zuid" : "16469208" } ] }
Unfollow Task List

Unfollow a task list in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/unfollow

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/unfollow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasklists/[TASKLISTID]/unfollow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Tasks

This module covers task-related operations within Zoho Projects. Use this API to create, copy, move, delete, or get task details, manage baselines, set dependencies, and retrieve status or layout-specific work hour details.

Get Tasks By Portal

Retrieve task details from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/tasks

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Filter Details for the Task.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks?page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"task_name","field_name":"task_name","criteria_condition":"contains","value":"23806000000019001","relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1AND2"}]&sort_by="ASC(last_updated_time)"&view_id="23806000070526001"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"task_name","field_name":"task_name","criteria_condition":"contains","value":"23806000000019001","relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "task_name", "field_name" : "task_name", "criteria_condition" : "contains", "value" : "23806000000019001", "relative_columns" : [ { "cfid" : "2", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1 AND 2" } ] sort_by : "ASC(last_updated_time)" view_id : "23806000070526001"

Sample Response

200{ "page_info" : { "page" : 1, "per_page" : 100, "page_count" : 14, "has_next_page" : false }, "tasks" : [ { "tasklist" : { "id" : "4000000005629" }, "id" : "4000000005631", "prefix" : "T10-T1", "name" : "1", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "statuscol_darkshadegreen", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "priority" : "none", "owners_and_work" : { "work_type" : "standard", "total_work" : "00:00", "unit" : "hours_per_day", "copy_task_duration" : false, "owners" : [ { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "first_name" : "test", "last_name" : "one", "work_values" : "00:00" } ] }, "start_date" : "2024-12-16T00:00:00.000Z", "end_date" : "2024-12-19T00:00:00.000Z", "duration" : { "value" : "4", "type" : "days" }, "completion_percentage" : 0, "sequence" : { "sequence" : 1 }, "depth" : 0, "created_time" : "2024-12-16T05:53:37.674Z", "last_modified_time" : "2024-12-16T05:53:38.020Z", "is_completed" : false, "created_via" : "Projects", "created_by" : { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "none", "budget_info" : { "exchange_rate" : 1.0 }, "start" : "2024-12-16T12:00:00.000Z", "end" : "2024-12-19T12:00:00.000Z" } ] }
Get Tasks By Project

Retrieve task from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Filter Details for the Task.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks?page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"task_name","field_name":"task_name","criteria_condition":"contains","value":"23806000000019001","relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1AND2"}]&sort_by="ASC(last_updated_time)"&view_id="23806000070526001"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"task_name","field_name":"task_name","criteria_condition":"contains","value":"23806000000019001","relative_columns":[{"cfid":"2","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "task_name", "field_name" : "task_name", "criteria_condition" : "contains", "value" : "23806000000019001", "relative_columns" : [ { "cfid" : "2", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1 AND 2" } ] sort_by : "ASC(last_updated_time)" view_id : "23806000070526001"

Sample Response

200{ "page_info" : { "page" : 1, "per_page" : 100, "page_count" : 9, "has_next_page" : false }, "tasks" : [ { "tasklist" : { "id" : "4000000007001" }, "id" : "4000000007005", "prefix" : "RU1-T1", "name" : "test", "description" : "", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "statuscol_darkshadegreen", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "priority" : "none", "owners_and_work" : { "work_type" : "standard", "total_work" : "00:00", "unit" : "hours_per_day", "copy_task_duration" : false, "owners" : [ { "zuid" : 0, "zpuid" : "4000000004929", "name" : "Unassigned User", "email" : "Unassigned User", "first_name" : "Unassigned User", "last_name" : "", "work_values" : "00:00" } ] }, "duration" : { "value" : "0", "type" : "days" }, "completion_percentage" : 0, "sequence" : { "sequence" : 1 }, "depth" : 0, "created_time" : "2024-12-16T06:40:24.426Z", "last_modified_time" : "2024-12-20T03:22:07.120Z", "is_completed" : false, "created_via" : "web", "created_by" : { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "none", "budget_info" : { "exchange_rate" : 85.0 } } ] }
Get Task Details

Retrieve details of a task from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "tasklist" : { "id" : "4000000007001" }, "id" : "4000000023001", "prefix" : "RU1-T9", "name" : "2", "description" : "", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "statuscol_darkshadegreen", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "priority" : "none", "owners_and_work" : { "work_type" : "standard", "total_work" : "10:00", "unit" : "hours_per_day", "copy_task_duration" : false, "owners" : [ { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "first_name" : "test", "last_name" : "one", "work_values" : "10:00" } ] }, "duration" : { "value" : "0", "type" : "days" }, "completion_percentage" : 0, "sequence" : { "sequence" : 9 }, "depth" : 0, "created_time" : "2024-12-20T06:37:26.966Z", "last_modified_time" : "2024-12-27T10:31:14.593Z", "is_completed" : false, "created_via" : "web", "created_by" : { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "none", "budget_info" : { "exchange_rate" : 85.0 } }
Create a task

Add a task to the project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description

JSONObject

required

Enter the task list details.

parental_info

JSONObject

Enter parent task details if sub task is need to be created

name

String

required
max length : 10000

Enter the task name

description

String

max length : 80000

Enter the task description

JSONObject

max length : 1000

Enter the task status details if not provided default open will be taken

priority

String

Enter the task priority Possible values are none,low,medium,high

start_date

String

Enter the start date of the task

end_date

String

Enter the end date of the task

JSONObject

Enter the task duration

completion_percentage

int

Enter the task completion percentage

billing_type

String

Enter the billing type for the task Possible values are none,billable,non_billable

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of files to be uploaded

owners_and_work

JSONObject

max length : 100000

Enter the task owner name and work details

JSONArray

max length : 10000

Enter the tags for the task

JSONArray

max length : 100000

Add or remove teams associated with the task

recurrence

JSONObject

Enter recurrence details of the task.

budget_info

JSONObject

max length : 100000

Budget of the task.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Demo Try Admin", "description" : "Content Try", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2021-09-30T21:00:00.000Z", "end_date" : "2021-10-05T21:00:00.000Z", "duration" : { "value" : "23806000000019001", "type" : "Task" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 23806000073742867 ], "owners_and_work" : { "owners" : [ { "add" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "remove" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "zpuid" : "4000000002055", "work_values" : "-" } ], "work_type" : "-", "unit" : "days", "copy_task_duration" : "-" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "teams" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "recurrence" : { "frequency" : "-", "interval" : "-", "end_after_occurrences" : "-", "set_to_previous_businessday" : "-", "retain_comments" : "-", "retain_subtasks" : "-", "next_recurrence_after_close" : "-" }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Demo Try Admin\",\"description\":\"Content Try\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2021-09-30T21:00:00.000Z\",\"end_date\":\"2021-10-05T21:00:00.000Z\",\"duration\":{\"value\":\"23806000000019001\",\"type\":\"Task\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[23806000073742867],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"frequency\":\"-\",\"interval\":\"-\",\"end_after_occurrences\":\"-\",\"set_to_previous_businessday\":\"-\",\"retain_comments\":\"-\",\"retain_subtasks\":\"-\",\"next_recurrence_after_close\":\"-\"},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Demo Try Admin", "description" : "Content Try", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2021-09-30T21:00:00.000Z", "end_date" : "2021-10-05T21:00:00.000Z", "duration" : { "value" : "23806000000019001", "type" : "Task" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 23806000073742867 ], "owners_and_work" : { "owners" : [ { "add" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "remove" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "zpuid" : "4000000002055", "work_values" : "-" } ], "work_type" : "-", "unit" : "days", "copy_task_duration" : "-" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "teams" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "recurrence" : { "frequency" : "-", "interval" : "-", "end_after_occurrences" : "-", "set_to_previous_businessday" : "-", "retain_comments" : "-", "retain_subtasks" : "-", "next_recurrence_after_close" : "-" }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" } }

Sample Response

201{ "end_date" : "2024-09-14T18:30:00.000Z", "completion_percentage" : "0", "created_time" : "2024-07-12T10:37:27.540Z", "last_modified_time" : "2024-07-12T10:37:27.000Z", "prefix" : "QW1-T81", "created_via" : "api", "owners_and_work" : { "unit" : "hours_per_day", "work_type" : "standard", "copy_task_duration" : "false", "total_work" : "00:00", "owners" : [ { "zpuid" : "18000000004797", "work_values" : "00:00", "name" : "Unassigned User", "first_name" : "Unassigned User", "email" : "Unassigned User", "zuid" : 0 } ] }, "description" : "Description", "priority" : "none", "is_completed" : "false", "created_by" : { "zpuid" : "18000000002379", "name" : "test", "last_name" : "one", "first_name" : "test", "email" : "-", "zuid" : "22824487" }, "budget_info" : { "exchange_rate" : "1" }, "duration" : { "type" : "days", "value" : "4" }, "sequence" : { "sequence" : "60" }, "depth" : "0", "name" : "Antonietta_Schmitt@hotmail.com", "billing_type" : "none", "tasklist" : { "id" : "18000000005735" }, "id" : "18000000022007", "status" : { "is_closed_type" : "false", "color" : "statuscol_open", "color_hexcode" : "#74cb80", "name" : "Open", "id" : "18000000000476", "is_default" : "true" }, "start_date" : "2024-09-11T18:30:00.000Z" }
Update a Task

Modify details of the task in a project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description

JSONObject

Enter the task list details.

parental_info

JSONObject

Enter parent task details if sub task is need to be created.

name

String

max length : 10000

Enter the task name.

description

String

max length : 80000

Enter the task description.

JSONObject

max length : 1000

Enter the task status details if not provided default open will be taken.

priority

String

Enter the task priority Possible values are none,low,medium,high

start_date

String

Enter the start date of the task.

end_date

String

Enter the end date of the task.

JSONObject

Enter the end date of the task.

completion_percentage

int

Enter the task completion percentage.

billing_type

String

Enter the billing type for the task Possible values are none,billable,non_billable

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of files to be uploaded.

owners_and_work

JSONObject

max length : 100000

Enter the task owner name and work details.

JSONArray

max length : 100000
array size : 0-100

Enter the tags for the task.

JSONArray

max length : 100000
array size : 0-100

Add or remove teams associated with the task.

recurrence

JSONObject

max length : 100000

Enter recurrence details of the task.

JSONObject

max length : 100000

Enter the Reminder details of the task.

budget_info

JSONObject

max length : 100000

Enter the Budget details of the task.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Demo Try Admin", "description" : "Content Try", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2021-09-30T21:00:00.000Z", "end_date" : "2021-10-05T21:00:00.000Z", "duration" : { "value" : "23806000000019001", "type" : "Task" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 23806000073742867 ], "owners_and_work" : { "owners" : [ { "add" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "remove" : [ { "zpuid" : "4000000002055" } ], "zpuid" : "4000000002055", "work_values" : "-" } ], "work_type" : "-", "unit" : "days", "copy_task_duration" : "-" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "teams" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "recurrence" : { "frequency" : "-", "interval" : "-", "end_after_occurrences" : "-", "set_to_previous_businessday" : "-", "retain_comments" : "-", "retain_subtasks" : "-", "next_recurrence_after_close" : "-" }, "reminder" : { "reminder_criteria" : "on", "field_type" : "start_date", "custom_date" : "2023-12-20", "no_of_duration" : "2", "time" : "22:00", "duration_type" : "days", "emailtemplate_id" : "4000000008003", "reminder_notify_users" : [ { "type" : "Task", "values" : "-" } ] }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "hourly_budget" : "-", "hourly_budget_threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Demo Try Admin\",\"description\":\"Content Try\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2021-09-30T21:00:00.000Z\",\"end_date\":\"2021-10-05T21:00:00.000Z\",\"duration\":{\"value\":\"23806000000019001\",\"type\":\"Task\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[23806000073742867],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"frequency\":\"-\",\"interval\":\"-\",\"end_after_occurrences\":\"-\",\"set_to_previous_businessday\":\"-\",\"retain_comments\":\"-\",\"retain_subtasks\":\"-\",\"next_recurrence_after_close\":\"-\"},\"reminder\":{\"reminder_criteria\":\"on\",\"field_type\":\"start_date\",\"custom_date\":\"2023-12-20\",\"no_of_duration\":\"2\",\"time\":\"22:00\",\"duration_type\":\"days\",\"emailtemplate_id\":\"4000000008003\",\"reminder_notify_users\":[{\"type\":\"Task\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Demo Try Admin", "description" : "Content Try", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2021-09-30T21:00:00.000Z", "end_date" : "2021-10-05T21:00:00.000Z", "duration" : { "value" : "23806000000019001", "type" : "Task" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 23806000073742867 ], "owners_and_work" : { "owners" : [ { "add" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "remove" : [ { "zpuid" : "4000000002055" } ], "zpuid" : "4000000002055", "work_values" : "-" } ], "work_type" : "-", "unit" : "days", "copy_task_duration" : "-" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "teams" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "recurrence" : { "frequency" : "-", "interval" : "-", "end_after_occurrences" : "-", "set_to_previous_businessday" : "-", "retain_comments" : "-", "retain_subtasks" : "-", "next_recurrence_after_close" : "-" }, "reminder" : { "reminder_criteria" : "on", "field_type" : "start_date", "custom_date" : "2023-12-20", "no_of_duration" : "2", "time" : "22:00", "duration_type" : "days", "emailtemplate_id" : "4000000008003", "reminder_notify_users" : [ { "type" : "Task", "values" : "-" } ] }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "hourly_budget" : "-", "hourly_budget_threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" } }

Sample Response

200{ "end_date" : "2024-10-01T12:30:00.000Z", "completion_percentage" : "10", "created_time" : "2024-09-23T09:16:21.681Z", "last_modified_time" : "2024-11-26T06:00:37.975Z", "prefix" : "TE1-T7", "created_via" : "web", "owners_and_work" : { "unit" : "hours_per_day", "work_type" : "standard", "copy_task_duration" : "false", "total_work" : "00:00", "owners" : [ { "zpuid" : "18000000002379", "work_values" : null, "name" : "test_one", "last_name" : "one. ½.²", "first_name" : "test? ? ?,?@!$&([]-+/:'~?, ?", "email" : "saanakkya.sl+testone@zohotest.com", "zuid" : 22824487 } ] }, "description" : "human-resource", "priority" : "none", "is_completed" : "false", "created_by" : { "zpuid" : "18000000002379", "name" : "test_one", "last_name" : "one. ½.²", "first_name" : "test? ? ?,?@!$&([]-+/:'~?, ?", "email" : "saanakkya.sl+testone@zohotest.com", "zuid" : "22824487" }, "budget_info" : { "revenue_budget" : "2:00", "bcy_budget" : "12345:00", "exchange_rate" : "1", "threshold" : "234:00", "budget" : "12345:00" }, "duration" : { "type" : "days", "value" : "1" }, "sequence" : { "sequence" : "1" }, "depth" : "0", "name" : "XSS", "billing_type" : "non_billable", "tasklist" : { "id" : "18000000217001" }, "id" : "18000000266077", "status" : { "is_closed_type" : "false", "color" : "statuscol_open", "color_hexcode" : "#74cb80", "name" : "Open", "id" : "18000000000476" }, "start_date" : "2024-10-01T03:30:00.000Z" }
Delete a Task

Remove a task from the project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Copy a Task

Copy a task within a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/copy

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description
no_of_instances

int

required

Enter the number of instances to be created.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/copy' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'no_of_instances = "1"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/copy");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""no_of_instances"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

no_of_instances : "1"

Possible Errors

CANT_COPY_SUBTASK HTTP 403

Move Task

Move tasks to a task list in a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/move

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
target_tasklist_id

long

required

Enter the destination task list ID.

status_mapping

JSONArray

Enter the Status Details to map.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/move' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "target_tasklist_id" : "-", "status_mapping" : [ { "old_status" : { "id" : "4000000062001", "name" : "Demo Try Admin", "color" : "-", "type" : "Task" }, "new_status" : { "id" : "4000000062001", "name" : "Demo Try Admin", "color" : "-", "type" : "Task" } } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/move");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Demo Try Admin\",\"color\":\"-\",\"type\":\"Task\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Demo Try Admin\",\"color\":\"-\",\"type\":\"Task\"}}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "target_tasklist_id" : "-", "status_mapping" : [ { "old_status" : { "id" : "4000000062001", "name" : "Demo Try Admin", "color" : "-", "type" : "Task" }, "new_status" : { "id" : "4000000062001", "name" : "Demo Try Admin", "color" : "-", "type" : "Task" } } ] }

Sample Response

204 No Content
Task Comments

This module covers operations related to task comments within Zoho Projects. Use this API to retrieve, add, update, or delete comments and manage comment attachments in a Task .

Get Comments

Retrieve multiple comments from a task.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/comments

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort criteria.
Accepted values: ASC(field_name) or DESC(field_name)

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"?page="1"&per_page="10"&sort_by="ASC(last_updated_time)"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_by"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_updated_time)"

Sample Response

200{ "comments" : [ { "created_time" : "2025-01-16T09:50:40.313Z", "updated_time" : "2025-01-16T09:50:40.313Z", "sprints_id" : "-1", "attachments" : [ ], "added_via" : "web", "crm_id" : "-1", "updated_by" : { "zpuid" : "4000000002471", "full_name" : "test one", "name" : "test", "last_name" : "one", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "saanakkya.sl+testone@zohotest.com" }, "comment" : "
This task doesn't have any logged hours. Is there a specific reason for that? Please provide logged hours if needed.

zp[@zpuser#831791684#Project User - (Closed)]zpzp[@zpuser#768626224#Project User - (Closed)]zpzp[@zpuser#819434540#Project User - (Closed)]zpzp[@zpuser#764394813#Project User - (Closed)]zpzp[@zpuser#862848712#Project User - (Closed)]zp 
", "id" : "4000000040001", "created_by" : { "zpuid" : "4000000002471", "full_name" : "test one", "name" : "test", "last_name" : "one", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "saanakkya.sl+testone@zohotest.com" }, "desk_id" : "-1" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Add Comment

Add a comment to a task.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/comments

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description
comment

String

required
max length : 500000

Enter the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the attachment IDs.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"a new comment\",\"attachments\":[23806000073742867]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }

Sample Response

201[ { "id" : "4000000025025", "comment" : "zp[@zpuser#95095233#Project User - (Closed)]zp", "attachments" : [ ], "created_time" : "2024-12-27T10:31:14.566Z", "updated_time" : "2024-12-27T10:31:14.566Z", "added_via" : "api", "created_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "sprints_id" : "-1", "desk_id" : "-1", "crm_id" : "-1" } ]
Update Comment

Modify a comment in a task.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
comment

String

required
max length : 500000

Enter the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the attachment IDs.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"comment\":\"a new comment\",\"attachments\":[23806000073742867]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "comment" : "a new comment", "attachments" : [ 23806000073742867 ] }

Sample Response

200[ { "id" : "4000000025001", "comment" : "
zf------ zp[@zpuser#21312768#Project User - (Closed)]zp   
", "attachments" : [ ], "created_time" : "2024-12-27T10:25:03.222Z", "updated_time" : "2024-12-27T10:31:25.937Z", "added_via" : "api", "created_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "saanakkya.sl+testone@zohotest.com", "is_client_user" : false, "first_name" : "test", "last_name" : "one", "full_name" : "test one" }, "sprints_id" : "-1", "desk_id" : "-1", "crm_id" : "-1" } ]
Delete Comment

Remove a comment from a task.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Task Custom View

This module covers operations related to task custom view within Zoho Projects. Use this API to create new custom views in a project or retrieve form data for custom views.

Get Custom View Form Data

Retrieve the data of a task custom view from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/tasks/customviews/form

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
project_id

String

Enter the project ID.

view_id

String

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/form?project_id="23806000074760021"&view_id="23806000070526001"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/form");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""project_id"", "");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

project_id : "23806000074760021" view_id : "23806000070526001"

Sample Response

200{ "customized_fields" : [ { "is_selected" : true, "name" : "Owner", "id" : "4000000000164" } ], "fields" : [ { "cfid" : "86", "column_name" : "MILESTONETITLE", "display_name" : "zp.dependview.milestone", "is_default" : true, "table_name" : "Milestone", "field_type" : "singleline" } ] }
Update Portal Custom View

Modify the details of a custom view in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/mytasks/customviews/[CUSTOMVIEWID]

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 250

Enter the custom view name.

description

String

max length : 500

Enter the custom view description.

criteria

String

Enter the criteria information.

criteria_pattern

String

Specify the criteria pattern.

module_id

String

Enter the module ID.

access_type

String

Specify who can access the custom view. Accepted values: me

accessed_by

JSONArray

array size : 0-100

Specify the project accessibility type. All, None, and Specific projects

project_accessibility_type

String

Project Accessiblity type

project_ids

JSONArray

array size : 0-100

Enter the project IDs.

is_mytasks_view_enabled

String

Specify whether to display the custom view in Tasks under the Overview section. Accepted values: true,false

is_customised_column_view_enabled

String

Specify whether the columns are customized in the custom view. Accepted values: true,false

customised_columns

String

Specify the customised column in custom view

view_type

String

View Type
Possible Inputs are my_views

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/mytasks/customviews/"1752587000000097269"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "-", "description" : "-", "criteria" : "-", "criteria_pattern" : "-", "module_id" : "1752587000000097269", "access_type" : "-", "accessed_by" : "-", "project_accessibility_type" : "-", "project_ids" : "-", "is_mytasks_view_enabled" : "-", "is_customised_column_view_enabled" : "-", "customised_columns" : "-", "view_type" : "date" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/mytasks/customviews/"1752587000000097269"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"criteria\":\"-\",\"criteria_pattern\":\"-\",\"module_id\":\"1752587000000097269\",\"access_type\":\"-\",\"accessed_by\":\"-\",\"project_accessibility_type\":\"-\",\"project_ids\":\"-\",\"is_mytasks_view_enabled\":\"-\",\"is_customised_column_view_enabled\":\"-\",\"customised_columns\":\"-\",\"view_type\":\"date\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "-", "description" : "-", "criteria" : "-", "criteria_pattern" : "-", "module_id" : "1752587000000097269", "access_type" : "-", "accessed_by" : "-", "project_accessibility_type" : "-", "project_ids" : "-", "is_mytasks_view_enabled" : "-", "is_customised_column_view_enabled" : "-", "customised_columns" : "-", "view_type" : "date" }
Delete Custom View

Remove a task custom view from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Set View as Default (Portal)

Mark a custom view as the default view for the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/setdefaultview

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/setdefaultview' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/setdefaultview");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Mark View as Favourite (Portal)

Mark a custom view as a favorite view for the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/markfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/markfavourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/markfavourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
UnMark View as Favourite (Portal)

Remove a custom view from the favorite views in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/unmarkfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/unmarkfavourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/tasks/customviews/"1752587000000097269"/unmarkfavourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Get Task Custom Views in project

Retrieve task custom views from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

sort_column

String

Enter the sort criteria for the column. Example: posted_time,last_updated_time

sort_order

String

Enter the sort order. Accepted values: ascending,descending

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews?page="1"&per_page="10"&sort_column="last_modified_time"&sort_order="descending"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""sort_column"", "");
   uriBuilder.addParameter(""sort_order"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" sort_column : "last_modified_time" sort_order : "descending"

Sample Response

200{ "taskcustomviews" : [ { "created_time" : "2024-08-08T06:56:52.129Z", "access_type" : "me", "last_modified_time" : "2024-08-08T06:56:52.135Z", "shared_users" : [ { "zpuid" : "15067667", "displayname" : "Arun Solen", "email" : "arun.solen@zoho.com", "zuid" : "15067667" } ], "criteria" : "[{\"cfid\":\"4000000000173\",\"module_type\":\"task\",\"column_name\":\"CUSTOM_STATUSID\",\"criteria_condition\":\"is\",\"value\":[\"4000000000476\"],\"table_name\":\"TodoListItem\",\"field_type\":\"picklist\"}]", "project_accessibility_type" : "none", "criteria_pattern" : "1", "is_customised_column_view_enabled" : false, "description" : "Pending work items are listed in this view.", "view_type" : "custom_views", "last_modified_by" : { "zpuid" : "4000000006061", "displayname" : "Arun Solen", "email" : "arun.solen@zoho.com", "zuid" : "15067667" }, "is_favourite" : false, "created_by" : { "zpuid" : "4000000006061", "displayname" : "Arun Solen", "email" : "arun.solen@zoho.com", "zuid" : "15067667" }, "is_mytasks_view_enabled" : false, "associated_projects" : [ ], "name" : "My Pending work Items", "id" : "4000000042013", "has_edit_permission" : true } ] }
Add a new Custom view in a project

Create a task custom view in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 250

Enter the custom view name.

description

String

max length : 500

Enter the custom view description.

criteria

String

max length : 40000

Enter the criteria information.

criteria_pattern

String

max length : 10000

Specify the criteria pattern.

module_id

String

Enter the module ID.

access_type

String

Specify who can access the custom view. Accepted values: me

accessed_by

JSONArray

max length : 5000
array size : 0-100

Enter the custom user ID who can access the custom view.

project_accessibility_type

String

Project Accessiblity type

project_ids

JSONArray

array size : 0-100

Enter the project IDs.

is_mytasks_view_enabled

String

Specify whether to display the custom view in Tasks under the Overview section. Accepted values: true,false

is_customised_column_view_enabled

String

Specify whether the columns are customized in the custom view. Accepted values: true,false

customised_columns

String

max length : 10000

Specify the customised column in custom view

view_type

String

View Type
Possible Inputs are my_views

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "My Pending work Items", "description" : "Pending work items are listed in this view.", "criteria" : "-", "criteria_pattern" : "(( 1 AND 2 ) AND 3 )", "module_id" : "1752587000000097269", "access_type" : "all", "accessed_by" : "[23806000067962644]", "project_accessibility_type" : "all", "project_ids" : "[1752587000000094003]", "is_mytasks_view_enabled" : "false", "is_customised_column_view_enabled" : "true", "customised_columns" : "[{\"sequence\":1,\"name\":\"Status\",\"id\":\"114778000000021005\"},{\"sequence\":2,\"name\":\"Start Date\",\"id\":\"114778000000021007\"},{\"sequence\":3,\"name\":\"Due Date\",\"id\":\"114778000000021009\"},{\"sequence\":4,\"name\":\"Duration\",\"id\":\"114778000000021011\"}]", "view_type" : "date" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"My Pending work Items\",\"description\":\"Pending work items are listed in this view.\",\"criteria\":\"-\",\"criteria_pattern\":\"(( 1 AND 2 ) AND 3 )\",\"module_id\":\"1752587000000097269\",\"access_type\":\"all\",\"accessed_by\":\"[23806000067962644]\",\"project_accessibility_type\":\"all\",\"project_ids\":\"[1752587000000094003]\",\"is_mytasks_view_enabled\":\"false\",\"is_customised_column_view_enabled\":\"true\",\"customised_columns\":\"[{\\\"sequence\\\":1,\\\"name\\\":\\\"Status\\\",\\\"id\\\":\\\"114778000000021005\\\"},{\\\"sequence\\\":2,\\\"name\\\":\\\"Start Date\\\",\\\"id\\\":\\\"114778000000021007\\\"},{\\\"sequence\\\":3,\\\"name\\\":\\\"Due Date\\\",\\\"id\\\":\\\"114778000000021009\\\"},{\\\"sequence\\\":4,\\\"name\\\":\\\"Duration\\\",\\\"id\\\":\\\"114778000000021011\\\"}]\",\"view_type\":\"date\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "My Pending work Items", "description" : "Pending work items are listed in this view.", "criteria" : "-", "criteria_pattern" : "(( 1 AND 2 ) AND 3 )", "module_id" : "1752587000000097269", "access_type" : "all", "accessed_by" : "[23806000067962644]", "project_accessibility_type" : "all", "project_ids" : "[1752587000000094003]", "is_mytasks_view_enabled" : "false", "is_customised_column_view_enabled" : "true", "customised_columns" : "[{\"sequence\":1,\"name\":\"Status\",\"id\":\"114778000000021005\"},{\"sequence\":2,\"name\":\"Start Date\",\"id\":\"114778000000021007\"},{\"sequence\":3,\"name\":\"Due Date\",\"id\":\"114778000000021009\"},{\"sequence\":4,\"name\":\"Duration\",\"id\":\"114778000000021011\"}]", "view_type" : "date" }

Sample Response

201{ "taskcustomviews" : [ { "id" : "4000005610005", "name" : "My Pending work Items", "description" : "Pending work items are listed in this view.", "shared_users" : [ { "zpuid" : "15841162", "displayname" : "Alen Kirk", "email" : "alen.kirk@zoho.com", "zuid" : "15841162" } ], "criteria" : "[{\"cfid\":\"86\",\"module_type\":\"milestone\",\"column_name\":\"MILESTONETITLE\",\"criteria_condition\":\"is\",\"value\":[\"test\"],\"table_name\":\"Milestone\",\"field_type\":\"singleline\"}]", "criteria_pattern" : "1", "is_customised_column_view_enabled" : true, "is_mytasks_view_enabled" : false, "associated_projects" : [ ], "has_edit_permission" : true, "project_accessibility_type" : "none", "access_type" : "me", "view_type" : "custom_views", "is_favourite" : false, "created_time" : "2023-09-11T04:45:18.737Z", "last_modified_time" : "2023-09-11T04:45:18.739Z", "created_by" : { "zpuid" : "4000000000987", "displayname" : "Alen Kirk", "email" : "alen.kirk@zoho.com", "zuid" : "15841162" }, "last_modified_by" : { "zpuid" : "4000000000987", "displayname" : "Alen Kirk", "email" : "alen.kirk@zoho.com", "zuid" : "15841162" } } ] }
Set View as Default (Project)

Mark a task custom view as the default view for a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews/[CUSTOMVIEWID]/setdefaultview

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/setdefaultview' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/setdefaultview");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Mark View as Favourite (Project)

Mark a task custom view as the favourite view for a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews/[CUSTOMVIEWID]/markfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/markfavourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/markfavourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Unmark View as Favourite (Project)

Remove a custom view from the favorite views for a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews/[CUSTOMVIEWID]/unmarkfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/unmarkfavourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/customviews/"1752587000000097269"/unmarkfavourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Task Followers

This module covers operations related to task follower within Zoho Projects. Use this API to retrieve task followers, follow a task, add followers, or unfollow a task.

Get Task Followers

Retrieve followers for a task.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/followers

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/followers?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/followers");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "followers" : [ { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zohotest.com", "zuid" : "16469208" } ], "page_info" : { "per_page" : "25", "has_next_page" : "false", "page" : "1" } }
Self Follow a Task

Follow a task in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/follow

OAuth Scope:

ZohoProjects.tasks.CREATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/follow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/follow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

201{ "followers" : { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zohotest.com", "zuid" : "16469208" } }
Add Task Followers

Add followers to a task.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/followers

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description
followers

JSONArray

required
array size : >=0

Enter the follower details.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/followers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "followers" : [ { "zpuid" : "4000000002055" } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/followers");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "followers" : [ { "zpuid" : "4000000002055" } ] }

Sample Response

207{ "followers" : [ { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zohotest.com", "zuid" : "16469208" } ], "errors" : [ { "field_value" : "[4000000285019]", "message" : "You are not authorized to add followers to the task", "message_key" : "zp.followers.taskperm", "field_name" : "zpuid" } ] }
Unfollow a Task

Unfollow a task in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/unfollow

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/unfollow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/unfollow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Status Timeline

This module covers operations related to the status timeline within Zoho Projects. Use this API to retrieve or export task status timelines and status history at the project or portal level.

Get Task Status Timeline

Retrieve the status timeline from a task

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/status-timeline

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/status-timeline?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/tasks/"1752587000000097101"/status-timeline");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200[ { "updated_status" : { "color" : "statuscol_open", "name" : "Open", "id" : "8000001289007", "type" : "open", "is_closed" : "false" }, "updated_on" : "2024-08-12T09:32:39.819Z", "updated_by" : { "zpuid" : "8000000002051", "last_name" : "VV", "id" : "16113268", "is_client_user" : "false", "display_name" : "raj557 VV", "first_name" : "raj557", "email" : "kalirajan.rt+557@zohotest.com" }, "previous_status" : { "name" : "-", "type" : "open", "is_closed" : "false" } } ]
Get Status History of Tasks (Project)

Retrieve the status history of tasks from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/taskstatushistory

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

long

Enter the last modification time

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/taskstatushistory?page="1"&per_page="10"&last_modified_time="1631538698839"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/taskstatushistory");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" last_modified_time : "1631538698839"

Sample Response

200[ { "name" : "RJPM", "status_history" : [ { "updated_on" : "2024-07-10T10:55:26.276Z", "updated_status" : { "name" : "no_color_status", "id" : "8000000786005", "type" : "open" }, "updated_by" : { "name" : "raj557 VV", "id" : "16113268", "email" : "kalirajan.rt+557@zohotest.com", "zp_id" : "8000000002051" }, "transition_time" : { "duration" : "334 days 23 hrs 32 mins 41 secs", "duration_in_millis" : "28942361038" }, "previous_status" : { "name" : "Open", "id" : "8000000000353", "type" : "open" } } ], "project" : { "id" : "8000000705005" }, "id" : "8000000717058", "status" : { "name" : "no_color_status", "id" : "8000000786005", "type" : "open" } } ]
Get Status History of Tasks (Portal)

Retrieve the status history of tasks from a portal.

GET

/api/v3/portal/[PORTALID]/taskstatushistory

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

long

Enter the last modification time

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/taskstatushistory?page="1"&per_page="10"&last_modified_time="1631538698839"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/taskstatushistory");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" last_modified_time : "1631538698839"

Sample Response

200[ { "name" : "Task for dependent cases", "status_history" : [ ], "project" : { "id" : "23806000070526786" }, "id" : "23806000084023490", "status" : { "name" : "Open", "id" : "23806000000019001" } }, { "name" : "Sub task for dependent cases", "status_history" : [ ], "project" : { "id" : "23806000070526786" }, "id" : "23806000084023554", "status" : { "name" : "Open", "id" : "23806000000019001" } } ]
Export Task Status Timeline

Export Task Status Timeline

POST

/api/v3/portal/[PORTALID]/exportstatustimeline

OAuth Scope:

ZohoProjects.tasks.READ

Parameter

Param Name
Data Type
Description
projId

String

required

Id of the project.

taskId

String

required

Id of the Task.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/exportstatustimeline' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'projId = "1752587000000094003"' --form 'taskId = "1752587000000094001"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/exportstatustimeline");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""projId"", "");
   uriBuilder.addParameter(""taskId"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

projId : "1752587000000094003" taskId : "1752587000000094001"

Sample Response

200{ "downloadURL" : "\"https://kalirajan-12526.csez.zohocorpin.com:8920/portal/download/kalirajandotrt512zohotestdotcom/downloadaction.do?file=projects-ede888631dd552c0bd40fd6aa430bb143baf708eddb79873f75fd8575b2dd169f9d985d958d7d9e83a238f42bb6e4a3ab5b38e4a574337c259a0bb6edba41c53cfa823ce817373a45bb6a29e4e218e4939d74e556ef5680be0e6234cfbb6e5a6\"", "status" : "\"success\"" }
Get Baselines

Retrieve baselines from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/baselines

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/baselines' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/baselines");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "BASELINEDETAILS" : [ { "BASELINE_ID" : "4000000135001", "IS_TASKS_LOADED" : true, "CREATED_TIME" : "2024-09-09T01:57:29.001Z", "MAXIMUM_DATE" : "2025-02-25T05:47:56.274Z", "MINIMUM_DATE" : "2024-09-10T05:47:56.274Z", "BASELINE_NAME" : "s" } ], "BASELINECOUNT" : "1" }
Get Task Details From Baseline

Retrieve tasks from a baseline.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/baselinedetails

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
baselineId

long

required

Enter the baseline ID.

index

int

Enter the index. E.g. 0

range

int

Enter the range to retrieve. E.g. 10

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/baselinedetails?baselineId="23806000097557084"&index="1"&range="100"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/baselinedetails");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""baselineId"", "");
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

baselineId : "23806000097557084" index : "1" range : "100"

Sample Response

200{ "TASKDETAILS" : [ { "STARTDATE" : "2024-09-10T05:47:56.274Z", "DURTYPE" : "days", "TASK_ID" : "4000000005520", "DURATION" : "5", "ENDDATE" : "2024-09-14T05:47:56.274Z" } ] }
Timesheets

This module covers timesheet related operations within Zoho Projects. Use this API to manage time logs, generate timesheet reports, and configure timesheet-related settings.

Time Logs

This module covers time log related operations within Zoho Projects. Use this API to retrieve, add, update, or delete individual time logs and get detailed log information.

Get Particular Time Logs Details

Retrieve time log details from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/logs/[LOGID]

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
type

String

required

Enter the log type.
Accepted values: task,issue,general

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]?type="task"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""type"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

type : "task"

Sample Response

200{ "date" : "2024-08-21", "module_detail" : { "prefix" : "SD1-I1", "name" : "Software Debugger Bug", "id" : "8000000008112", "type" : "bug" }, "notes" : "Timesheet log details:\nStart Time -08-21-2024 04:15 PM End Time -08-22-2024 09:59 AM \nTime spent - 00:04", "cf_single_line" : "Single Line custom field Value", "log_notes" : "Timesheet log details:\nStart Time -08-21-2024 04:15 PM End Time -08-22-2024 09:59 AM \nTime spent - 00:04", "cf_currency" : { "amount" : "10.0", "formatted_amount" : " 10.00", "currency_id" : "", "currency_code" : "" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "cf_date" : "2024-08-22", "cf_pick_list" : "Picklist 1", "type" : "issue", "added_by" : { "zpuid" : "8000000002411", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "cf_phone" : "1234567890", "cf_user_pick_list" : { "zpuid" : "8000000002411", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "billing_status" : "Billable", "id" : "8000000011005", "cf_multi_line" : "Mingle Line custom field Value", "owner" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "approver" : { "zpuid" : "8000000002411", "name" : "mark", "zuid" : "24925026" }, "created_time" : "2024-08-22T04:29:55.908Z", "last_modified_time" : "2024-08-22T04:30:18.383Z", "approval" : { "status" : "Pending" }, "end_time" : "09:59 AM", "cf_url" : "projects.zoho.com", "cf_email" : "mark_zylker@zoho.com", "start_time" : "04:15 PM", "log_hour" : "00:04" }
Add Time Log

Add a time log to a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/log

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
log_name

String

max length : 1000

Enter the log name

date

String

required

Enter the date to add log

bill_status

String

required

Enter the billing status

hours

String

Enter the log hours

notes

String

max length : 10000

Enter the additional information for the log

owner_zpuid

long

Enter the ZPUID of the owner

approver

long

Enter the ZPUID of the approver

start_time

String

Enter the start time

end_time

String

Enter the end time

JSONObject

required
max length : 1000

Enter the details of the module

custom_fields

JSONObject

Enter the custom field details

sprints_logid

String

Enter the Zoho Sprints log ID

status

String

Enter the approval status of the time log

cost_rate_per_hour

double

Enter the Cost Per Hour

for_timer

boolean

Specify whether the log is added from timer. Accepted values: true or false

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/log' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "log_name" : "Enter a name for the general time log", "date" : "2024-12-11", "bill_status" : "Billable", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "sprints_logid" : "-", "status" : "on", "cost_rate_per_hour" : "1", "for_timer" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/log");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"bill_status\":\"Billable\",\"hours\":\"01.00\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"custom_fields\":{\"cf_number\":\"-\",\"cf_user_picklist\":\"-\",\"cf_single_line\":\"-\",\"cf_multi_line\":\"-\",\"cf_email\":\"-\",\"cf_date\":\"-\",\"cf_decimal\":\"-\",\"cf_check_box\":\"-\"},\"sprints_logid\":\"-\",\"status\":\"on\",\"cost_rate_per_hour\":\"1\",\"for_timer\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "log_name" : "Enter a name for the general time log", "date" : "2024-12-11", "bill_status" : "Billable", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "sprints_logid" : "-", "status" : "on", "cost_rate_per_hour" : "1", "for_timer" : "false" }

Sample Response

200{ "owner" : { "zpuid" : "8000000008075", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=22822935", "name" : "mark", "zuid" : "22822935" }, "date" : "2024-08-21", "created_time" : "2024-08-21T09:56:48.810Z", "notes" : "Timesheet Notes", "last_modified_time" : "2024-08-21T09:56:48.810Z", "cf_single_line" : "Single Line custom field Value", "approval" : { "status" : "Pending" }, "log_notes" : "Timesheet Notes", "cf_currency" : { "amount" : "10.0", "formatted_amount" : " 10.00", "currency_id" : "", "currency_code" : "" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "cf_url" : "projects.zoho.com", "cf_date" : "2024-08-21", "cf_pick_list" : "Picklist 1", "type" : "general", "cf_email" : "mark_zylker@zoho.com", "added_by" : { "zpuid" : "8000000008075", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "22822935" }, "cf_phone" : "1234567890", "name" : "Feature Testing", "cf_user_pick_list" : { "zpuid" : "8000000008075", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "22822935" }, "billing_status" : "Billable", "id" : "8000000008094", "log_hour" : "01:00", "cf_multi_line" : "Mingle Line custom field Value" }
Update Time Log

Modify the time log in a project

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/logs/[LOGID]

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Parameter

Param Name
Data Type
Description
log_name

String

max length : 1000

Enter the log name

date

String

Enter the date to update the log

bill_status

String

Enter the billing status

approval_status

String

Enter the Enter the additional information for the log. of the time log

hours

String

Enter the log hours

notes

String

max length : 10000

Enter the additional information for the log

owner_zpuid

long

Enter the ZPUID of the owner

approver

long

Enter the ZPUID of the approver

start_time

String

Enter the start time

end_time

String

Enter the end time

JSONObject

required
max length : 1000

Enter the details of the module

custom_fields

JSONObject

Enter the custom field details

extra_data

JSONObject

Enter additional information

cost_rate_per_hour

double

Enter the Cost Per Hour

is_draft

String

Specify whether the log will be added as draft. Accepted values: true or false

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "log_name" : "Enter a name for the general time log", "date" : "2024-12-11", "bill_status" : "Billable", "approval_status" : "Approved", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : "{\"type\":\"issue\",\"id\":\"33000000019040\"}", "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "extra_data" : { "start_time" : "01:00 AM", "end_time" : "02:00 AM", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets." }, "cost_rate_per_hour" : "1", "is_draft" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"bill_status\":\"Billable\",\"approval_status\":\"Approved\",\"hours\":\"01.00\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"33000000019040\\\"}\",\"custom_fields\":{\"cf_number\":\"-\",\"cf_user_picklist\":\"-\",\"cf_single_line\":\"-\",\"cf_multi_line\":\"-\",\"cf_email\":\"-\",\"cf_date\":\"-\",\"cf_decimal\":\"-\",\"cf_check_box\":\"-\"},\"extra_data\":{\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "log_name" : "Enter a name for the general time log", "date" : "2024-12-11", "bill_status" : "Billable", "approval_status" : "Approved", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : "{\"type\":\"issue\",\"id\":\"33000000019040\"}", "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "extra_data" : { "start_time" : "01:00 AM", "end_time" : "02:00 AM", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets." }, "cost_rate_per_hour" : "1", "is_draft" : "false" }

Sample Response

200{ "date" : "2024-08-21", "module_detail" : { "prefix" : "SD1-I1", "name" : "Software Debugger Bug", "id" : "8000000008112", "type" : "bug" }, "notes" : "Timesheet log details:\nStart Time -08-21-2024 04:15 PM End Time -08-22-2024 09:59 AM \nTime spent - 00:04", "cf_single_line" : "Single Line custom field Value", "cf_currency" : { "amount" : "10.0", "formatted_amount" : " 10.00", "currency_id" : "", "currency_code" : "" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "cf_date" : "2024-08-22", "cf_pick_list" : "Picklist 1", "type" : "issue", "added_by" : { "zpuid" : "8000000002411", "name" : "mark pd", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "cf_phone" : "1234567890", "cf_user_pick_list" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "billing_status" : "Billable", "id" : "8000000011005", "cf_multi_line" : "Mingle Line custom field Value", "owner" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "approver" : { "zpuid" : "8000000002411", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : "24925026" }, "created_time" : "2024-08-22T04:29:55.908Z", "last_modified_time" : "2024-08-22T04:51:27.585Z", "approval" : { "zpuid" : "8000000002411", "name" : "mark", "time" : "2024-08-22T04:51:27.585Z", "zuid" : "24925026", "email" : "mark_zylker@zoho.com", "status" : "Approved" }, "end_time" : "09:59 AM", "cf_url" : "projects.zoho.com", "cf_email" : "mark_zylker@zoho.com", "start_time" : "04:15 PM", "log_hour" : "00:04" }
Delete Time Log

Remove the time log from a project

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/logs/[LOGID]

OAuth Scope:

ZohoProjects.timesheets.DELETE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the module type.
Accepted values: task,issue,general

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "module" : { "id" : "4000000004947", "type" : "task" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/logs/[LOGID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "module" : { "id" : "4000000004947", "type" : "task" } }

Sample Response

204 No Content
Bulk Time Logs

This module covers bulk time log related operations within Zoho Projects. Use this API to retrieve, add, update, or delete multiple time logs across projects.

Get All Time Logs

Retrieve all time logs from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/timesheet

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

view_type

String

View of Type
Accepted values : day,week,month,customdate

start_date

String

Enter the start date

end_date

String

Enter the end date

JSONObject

Enter the filter criteria.

JSONObject

required

Enter the details of the module

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet?page="1"&per_page="10"&view_type="curmonth"&start_date="06-16-2022"&end_date="06-16-2022"&filter={"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["NonBillable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1AND2AND3AND4"}&module={"id":"4000000004947","type":"task"}&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""start_date"", "");
   uriBuilder.addParameter(""end_date"", "");
   uriBuilder.addParameter(""filter"", "{"project":"23806000074760021","assignee":"2253831617","billtype":"billable","approvaltype":"-","tsheetperiod":"-","clientcompany":"-","content":"Sample content","invoicestatus":"-","usergroups":"[53856179]","criteria":[{"cfid":"23806000091006001","field_name":"status","custom_feild":"-","field_type":"start_date","criteria_condition":"is","value":"[\"53831617\"]","relative_columns":[{"cfid":"23806000091006001","offset":"-","unit":"days","prior":"-"}]}],"pattern":"1","cf_single_line":"-","cf_user_picklist":"-","cf_number":"-","cf_date":"-","cf_decimal":"-","cf_multi_line":"-","cf_email":"-"}");
   uriBuilder.addParameter(""module"", "{"id":"4000000062001","type":"task"}");
   uriBuilder.addParameter(""frompage"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" view_type : "curmonth" start_date : "06-16-2022" end_date : "06-16-2022" filter : {"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["Non Billable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1 AND 2 AND 3 AND 4"} module : {"id":"4000000004947","type":"task"}

Sample Response

200{ "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "00:02", "total_hours" : "00:02" }, "time_logs" : [ { "date" : "2024-12-19", "log_details" : [ { "owner" : { "zpuid" : "4000000002471", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=27812151", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 27812151 }, "date" : "2024-12-19", "created_time" : "2024-12-19T19:29:20.771Z", "module_detail" : { "prefix" : "SD1-T30", "name" : "Test Case Sign Off", "id" : "4000000007111", "type" : "task" }, "notes" : "Task is now closed. Here are the time log details.\n00.01 hours have been logged successfully based on the time log restrictions.\nTimesheet log details:\nStart Time - 12-19-2024 07:29 PM End time 12-19-2024 07:29 PM\nTime spent - 00.01", "last_modified_time" : "2024-12-19T19:29:20.771Z", "approval" : { "zpuid" : "4000000002471", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "time" : "2024-12-19T19:29:20.771Z", "zuid" : 27812151, "status" : "Approved" }, "end_time" : "07:29 PM", "project" : { "name" : "Software Development", "id" : "4000000006895" }, "type" : "task", "start_time" : "07:29 PM", "added_by" : { "zpuid" : "4000000002471", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 27812151 }, "billing_status" : "Billable", "id" : "4000000020229", "log_hour" : "00:01" }, { "owner" : { "zpuid" : "4000000002471", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=27812151", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 27812151 }, "date" : "2024-12-19", "created_time" : "2024-12-19T19:25:19.705Z", "module_detail" : { "prefix" : "SD1-T29", "name" : "Test case creation", "id" : "4000000007108", "type" : "task" }, "notes" : "Task is now closed. Here are the time log details.\n00.01 hours have been logged successfully based on the time log restrictions.\nTimesheet log details:\nStart Time - 12-19-2024 07:25 PM End time 12-19-2024 07:25 PM\nTime spent - 00.01", "last_modified_time" : "2024-12-19T19:25:19.705Z", "approval" : { "zpuid" : "4000000002471", "name" : "Mark Zylker", "time" : "2024-12-19T19:25:19.705Z", "zuid" : 27812151, "email" : "mark_zylker@zoho.com", "status" : "Approved" }, "end_time" : "07:25 PM", "project" : { "name" : "Software Development", "id" : "4000000006895" }, "type" : "task", "start_time" : "07:25 PM", "added_by" : { "zpuid" : "4000000002471", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 27812151 }, "billing_status" : "Billable", "id" : "4000000020193", "log_hour" : "00:01" } ], "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "00:02", "total_hours" : "00:02" } } ] }
Get All Project Time Logs

Retrieve all time logs from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheet

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

view_type

String

Enter the view type.
Accepted values: day,week,month,customdate,projectspan

start_date

String

Enter the start date

end_date

String

Enter the end date

JSONObject

Enter the filter criteria.

JSONObject

required

Enter the details of the module

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet?page="1"&per_page="10"&view_type="curmonth"&start_date="06-16-2022"&end_date="06-16-2022"&filter={"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["NonBillable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1AND2AND3AND4"}&module={"id":"4000000004947","type":"task"}&view_id="23806000074760021"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""start_date"", "");
   uriBuilder.addParameter(""end_date"", "");
   uriBuilder.addParameter(""filter"", "{"project":"23806000074760021","assignee":"2253831617","billtype":"billable","approvaltype":"-","tsheetperiod":"-","clientcompany":"-","content":"Sample content","invoicestatus":"-","usergroups":"[53856179]","criteria":[{"cfid":"23806000091006001","field_name":"status","custom_feild":"-","field_type":"start_date","criteria_condition":"is","value":"[\"53831617\"]","relative_columns":[{"cfid":"23806000091006001","offset":"-","unit":"days","prior":"-"}]}],"pattern":"1","cf_single_line":"-","cf_user_picklist":"-","cf_number":"-","cf_date":"-","cf_decimal":"-","cf_multi_line":"-","cf_email":"-"}");
   uriBuilder.addParameter(""module"", "{"id":"4000000062001","type":"task"}");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" view_type : "curmonth" start_date : "06-16-2022" end_date : "06-16-2022" filter : {"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["Non Billable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1 AND 2 AND 3 AND 4"} module : {"id":"4000000004947","type":"task"} view_id : "23806000074760021"

Sample Response

200{ "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "01:00", "total_hours" : "01:00" }, "time_logs" : [ { "date" : "2024-08-06", "log_details" : [ { "owner" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.csez.zohocorpin.com/file?fs=thumb&exp=600&ID=24925026", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : 24925026 }, "date" : "2024-08-06", "created_time" : "2024-08-06T11:03:11.031Z", "module_detail" : { "prefix" : "SD1-T4", "name" : "Blueprint sign-off", "id" : "8000000005992", "type" : "task" }, "notes" : "", "last_modified_time" : "2024-08-06T11:03:11.031Z", "approval" : { "zpuid" : "8000000002411", "name" : "mark", "time" : "2024-08-06T11:03:11.031Z", "zuid" : 24925026, "email" : "mark_zylker@zoho.com", "status" : "Approved" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "type" : "task", "added_by" : { "zpuid" : "8000000002411", "name" : "mark", "email" : "mark_zylker@zoho.com", "zuid" : 24925026 }, "billing_status" : "Billable", "id" : "8000000007001", "log_hour" : "01:00" } ], "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "01:00", "total_hours" : "01:00" } } ] }
Add Time logs

Add multiple time logs to the Zoho Projects portal

POST

/api/v3/portal/[PORTALID]/addbulktimelogs

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
log_object

JSONArray

required

Enter the time log details

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/addbulktimelogs' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"log_object" = [{"project_id":"23806000074760021","item_id":"-","log_name":"Enter a name for the general time log","type":"task","date":"2024-12-11","bill_status":"Billable","hours":"01.00","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","custom_fields":{"cf_number":"-","cf_user_picklist":"-","cf_single_line":"-","cf_multi_line":"-","cf_email":"-","cf_date":"-","cf_decimal":"-","cf_check_box":"-"},"sprints_logid":"-","status":"on","unique_key":"-","cost_rate_per_hour":"1"}]'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/addbulktimelogs");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""log_object"", "{"project_id":"23806000074760021","item_id":"-","log_name":"Enter a name for the general time log","type":"task","date":"2024-12-11","bill_status":"Billable","hours":"01.00","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","custom_fields":{"cf_number":"-","cf_user_picklist":"-","cf_single_line":"-","cf_multi_line":"-","cf_email":"-","cf_date":"-","cf_decimal":"-","cf_check_box":"-"},"sprints_logid":"-","status":"on","unique_key":"-","cost_rate_per_hour":"1"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"log_object" : [ { "project_id" : "23806000074760021", "item_id" : "-", "log_name" : "Enter a name for the general time log", "type" : "task", "date" : "2024-12-11", "bill_status" : "Billable", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner" : "-", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "sprints_logid" : "-", "status" : "on", "unique_key" : "-", "cost_rate_per_hour" : "1" } ]

Sample Response

200{ "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "02:00", "total_hours" : "02:00" }, "time_logs" : [ { "date" : "2024-04-29", "log_details" : [ { "owner" : { "zpuid" : "5000000002151", "image_url" : "https://contacts.csez.zohocorpin.com/file?fs=thumb&exp=600&ID=21705927", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 21705927 }, "date" : "2024-04-29", "created_time" : "2024-05-03T05:21:51.984Z", "module_detail" : { "prefix" : "SD1-T13", "name" : "Scope and Wireframe sign-off", "id" : "5000000005266", "type" : "task" }, "notes" : "", "last_modified_time" : "2024-05-03T05:21:51.984Z", "approval" : { "status" : "Pending" }, "project" : { "name" : "Software Development", "id" : "5000000005107" }, "type" : "task", "added_by" : { "zpuid" : "5000000002151", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 21705927 }, "billing_status" : "Billable", "id" : "5000000009007", "log_hour" : "01:00" }, { "owner" : { "zpuid" : "5000000002151", "image_url" : "https://contacts.csez.zohocorpin.com/file?fs=thumb&exp=600&ID=21705927", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 21705927 }, "date" : "2024-04-29", "created_time" : "2024-05-03T05:21:51.982Z", "module_detail" : { "prefix" : "SD1-T8", "name" : "Requirement Gathering", "id" : "5000000005251", "type" : "task" }, "notes" : "", "last_modified_time" : "2024-05-03T05:21:51.982Z", "approval" : { "status" : "Pending" }, "project" : { "name" : "Software Development", "id" : "5000000005107" }, "type" : "task", "added_by" : { "zpuid" : "5000000002151", "name" : "Mark Zylker", "email" : "mark_zylker@zoho.com", "zuid" : 21705927 }, "billing_status" : "Billable", "id" : "5000000009005", "log_hour" : "01:00" } ], "log_hours" : { "non_billable_hours" : "00:00", "billable_hours" : "02:00", "total_hours" : "02:00" } } ] }
Update Time Logs

Modify time logs in the Zoho Projects portal

PATCH

/api/v3/portal/[PORTALID]/logs

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the log ID

date

String

Enter the date to update the log

bill_status

String

Enter the billing status

approval_status

String

Enter the approval status of the time log

hours

String

Enter the log hours

notes

String

max length : 10000

Enter the additional information for the log

owner_zpuid

long

Enter the ZPUID of the owner

approver

long

Enter the ZPUID of the approver

start_time

String

Enter the start time

end_time

String

Enter the end time

module

String

required

Enter the module name

custom_fields

JSONObject

Enter the custom field details

extra_data

JSONObject

Enter additional information

cost_rate_per_hour

double

Enter the Cost Per Hour

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/logs' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "id" : "4000000062001", "date" : "2024-12-11", "bill_status" : "Billable", "approval_status" : "Approved", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "extra_data" : { "start_time" : "01:00 AM", "end_time" : "02:00 AM", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets." }, "cost_rate_per_hour" : "1" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/logs");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"id\":\"4000000062001\",\"date\":\"2024-12-11\",\"bill_status\":\"Billable\",\"approval_status\":\"Approved\",\"hours\":\"01.00\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"custom_fields\":{\"cf_number\":\"-\",\"cf_user_picklist\":\"-\",\"cf_single_line\":\"-\",\"cf_multi_line\":\"-\",\"cf_email\":\"-\",\"cf_date\":\"-\",\"cf_decimal\":\"-\",\"cf_check_box\":\"-\"},\"extra_data\":{\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.\"},\"cost_rate_per_hour\":\"1\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "id" : "4000000062001", "date" : "2024-12-11", "bill_status" : "Billable", "approval_status" : "Approved", "hours" : "01.00", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "custom_fields" : { "cf_number" : "-", "cf_user_picklist" : "-", "cf_single_line" : "-", "cf_multi_line" : "-", "cf_email" : "-", "cf_date" : "-", "cf_decimal" : "-", "cf_check_box" : "-" }, "extra_data" : { "start_time" : "01:00 AM", "end_time" : "02:00 AM", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting timesheets." }, "cost_rate_per_hour" : "1" }

Sample Response

200{ "project_type" : "active", "all_project_items_in_single_sheet" : "true", "schedule_info" : { "executed_count" : "0", "ends_after_type" : "0", "skip_type" : "1", "time_span" : "1", "next_schedule_time" : "2024-09-04T06:00:00.000Z", "name" : "testing api", "repetative_type" : "1", "id" : "4000000032069", "status" : "on" }, "created_by" : { "zpuid" : "4000000002411", "name" : "gokulanand", "id" : "4000000002411" }, "filter" : { "criteria" : [ { "cfid" : 11, "criteria_condition" : "is", "value" : [ "4000000005668" ] } ], "pattern" : "1" }, "notify_users" : [ { "zpuid" : "4000000002411", "name" : "gokulanand", "id" : "4000000002411" } ], "group_by" : "date", "id" : "4000000032067", "time" : "2024-09-04T06:00:00.000Z", "is_scheduled" : "true", "is_file_info_needed" : "false", "custom_view" : "4000000000938", "time_period" : { "duration_type" : "current", "span" : "week" }, "file_format" : "xlsx", "status" : "scheduled" }
Delete Time Logs

Remove time logs from the Zoho Projects portal

DELETE

/api/v3/portal/[PORTALID]/timesheet/bulkdelete

OAuth Scope:

ZohoProjects.timesheets.DELETE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the log ID

module

String

required

Enter the log type.
Accepted values : task,issue,general

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/bulkdelete' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "id" : "4000000062001", "module" : { "id" : "4000000004947", "type" : "task" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/bulkdelete");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "id" : "4000000062001", "module" : { "id" : "4000000004947", "type" : "task" } }

Sample Response

200
Timesheet Reports

This module covers operations related to timesheet reports within Zoho Projects. Use this API to retrieve timesheet reports at the portal or project level.

Get Timesheet Report for Portal

Retrieve timesheet reports from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/timesheet/report

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

report_type

String

required

Enter the report type.
Accepted values: user,module

view_type

String

Enter the view type.
Accepted values: day,week,month

start_date

String

Enter the start date

JSONObject

Enter the filter criteria.

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/report?page="1"&per_page="10"&report_type="user"&view_type="month"&start_date="06-16-2022"&filter={"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["NonBillable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1AND2AND3AND4"}&view_id="23806000074760021"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/report");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""report_type"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""start_date"", "");
   uriBuilder.addParameter(""filter"", "{"project":"23806000074760021","assignee":"2253831617","billtype":"billable","approvaltype":"-","tsheetperiod":"-","clientcompany":"-","content":"Sample content","invoicestatus":"-","usergroups":"[53856179]","criteria":[{"cfid":"23806000091006001","field_name":"status","custom_feild":"-","field_type":"start_date","criteria_condition":"is","value":"[\"53831617\"]","relative_columns":[{"cfid":"23806000091006001","offset":"-","unit":"days","prior":"-"}]}],"pattern":"1","cf_single_line":"-","cf_user_picklist":"-","cf_number":"-","cf_date":"-","cf_decimal":"-","cf_multi_line":"-","cf_email":"-"}");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" report_type : "user" view_type : "month" start_date : "06-16-2022" filter : {"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["Non Billable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1 AND 2 AND 3 AND 4"} view_id : "23806000074760021"

Sample Response

200[ { "prefix" : "VI-2", "name" : "Software Development", "log_hours" : { "consolidated_total" : "05:00", "consolidated_billing" : "05:00", "consolidated_report" : [ { "date" : "2024-08-21", "total" : "02:00", "billable" : "02:00" } ], "consolidated_non_billing" : "00:00", "module_report" : [ { "name" : "Feature Testing", "log_hours" : { "consolidated_total" : "01:00", "consolidated_billing" : "01:00", "consolidated_report" : [ { "date" : "2024-08-21", "total" : "01:00", "billable" : "01:00" } ], "consolidated_non_billing" : "00:00" }, "id" : "8000000008094", "type" : "general" } ] }, "id" : "8000000005863" } ]
Get Timesheet Report for Project

Retrieve timesheet reports from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheet/report

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

report_type

String

required

Enter the report type.
Accepted values: user,module

view_type

String

Enter the view type.
Accepted values: day,week,month

start_date

String

Enter the start date

JSONObject

Enter the filter criteria.

view_id

long

Enter the custom view ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/report?page="1"&per_page="10"&report_type="user"&view_type="curmonth"&start_date="06-16-2022"&filter={"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["NonBillable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1AND2AND3AND4"}&view_id="23806000074760021"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/report");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""report_type"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""start_date"", "");
   uriBuilder.addParameter(""filter"", "{"project":"23806000074760021","assignee":"2253831617","billtype":"billable","approvaltype":"-","tsheetperiod":"-","clientcompany":"-","content":"Sample content","invoicestatus":"-","usergroups":"[53856179]","criteria":[{"cfid":"23806000091006001","field_name":"status","custom_feild":"-","field_type":"start_date","criteria_condition":"is","value":"[\"53831617\"]","relative_columns":[{"cfid":"23806000091006001","offset":"-","unit":"days","prior":"-"}]}],"pattern":"1","cf_single_line":"-","cf_user_picklist":"-","cf_number":"-","cf_date":"-","cf_decimal":"-","cf_multi_line":"-","cf_email":"-"}");
   uriBuilder.addParameter(""view_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" report_type : "user" view_type : "curmonth" start_date : "06-16-2022" filter : {"criteria":[{"field_name":"user","criteria_condition":"is","value":["4000000002411"]},{"field_name":"created_time","criteria_condition":"Yesterday","value":["Yesterday"]},{"field_name":"billstatus","criteria_condition":"is","value":["Non Billable"]},{"field_name":"approval_status","criteria_condition":"is","value":["Approved","Unapproved"]},{"field_name":"ts_single","criteria_condition":"is","value":["single"]}],"pattern":"1 AND 2 AND 3 AND 4"} view_id : "23806000074760021"
Custom Views

This module covers custom view related operations within Zoho Projects. Use this API to create, update, delete, and manage timesheet custom views, including setting views as default or marking them as favorites.

Set View as Default (Portal)

Set a timesheet custom view as the default view across the portal

POST

/api/v3/portal/[PORTALID]/timesheets/customviews/[CUSTOMVIEWID]/set-default-view

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheets/customviews/"1752587000000097269"/set-default-view' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheets/customviews/"1752587000000097269"/set-default-view");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Set View as Default (Project)

Set a timesheet custom view as the default view in a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheets/customviews/[CUSTOMVIEWID]/set-default-view

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheets/customviews/"1752587000000097269"/set-default-view' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheets/customviews/"1752587000000097269"/set-default-view");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Mark View as Favorite (Project)

Mark a timesheet custom view as a favorite view in a project

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheets/customviews/[CUSTOMVIEWID]/mark-favourite

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheets/customviews/"1752587000000097269"/mark-favourite' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheets/customviews/"1752587000000097269"/mark-favourite");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Approvers

This module covers operations related to timesheet approval within Zoho Projects. Use this API to retrieve and update default timesheet approvers.

Get default approver

Retrieve the default approver of the user in a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheet/approver

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/approver' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/approver");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Update Default Approver

Modify the default timesheet approver of the user in a project

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheet/approver

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/approver' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/approver");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Pins

This module covers operations related to pinned timesheets within Zoho Projects. Use this API to create, update, retrieve, or delete user pins associated with timesheets.

Get Pinned Time Logs for a Project

Retrieve all pinned entries in the timesheet weekly form from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/timesheet/pin

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
userId

String

Enter the ZPUID of the user.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/pin?userId="53831945"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/timesheet/pin");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""userId"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

userId : "53831945"

Sample Response

201{ }
Get Pinned Time Logs

Retrieve all pinned entries in the timesheet weekly form from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/timesheet/pin

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
pinId

String

Enter the pin ID

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin?pinId="23806000067962644"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""pinId"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

pinId : "23806000067962644"

Sample Response

201{ }
Delete Timesheet Pin

Remove a pinned timesheet from the Zoho Projects portal

DELETE

/api/v3/portal/[PORTALID]/timesheet/pin/[PINID]

OAuth Scope:

ZohoProjects.timesheets.CREATE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin/[PINID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin/[PINID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Create Timesheet Pin

Pin a timesheet in the Zoho Projects Portal

POST

/api/v3/portal/[PORTALID]/timesheet/pin

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
project_id

long

Enter the project ID

module

String

Enter the module name

is_billing

boolean

Specify whether timesheet is billable. Accepted values: true or false

zpuid

String

Enter the ZPUID of the user.

sequence

int

Enter the sequence order of the pin

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "project_id" : "23806000074760021", "module" : { "id" : "4000000004947", "type" : "task" }, "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "project_id" : "23806000074760021", "module" : { "id" : "4000000004947", "type" : "task" }, "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }
Update Timesheet Pin

Modify an existing timesheet pin

PATCH

/api/v3/portal/[PORTALID]/timesheet/pin/[PINID]

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
project_id

long

Enter the project ID

module

String

Enter the module name

is_billing

boolean

Specify whether timesheet is billable. Accepted values: true or false

zpuid

String

Enter the ZPUID of the user.

sequence

int

Enter the sequence order of the pin

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin/[PINID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "project_id" : "23806000074760021", "module" : { "id" : "4000000004947", "type" : "task" }, "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/timesheet/pin/[PINID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "project_id" : "23806000074760021", "module" : { "id" : "4000000004947", "type" : "task" }, "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }
Settings

This module covers operations related to timesheet settings within Zoho Projects. Use this API to retrieve, update, or configure metadata and settings related to timesheets.

Get Timesheet Settings Meta Data

Retrieve meta data of the time logs

GET

/api/v3/portal/[PORTALID]/settings/timelog/meta-data

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog/meta-data' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog/meta-data");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "timer_restriction_obj" : { "has_task_timer_running" : "false", "has_issue_timer_running" : "false", "has_generic_timer_running" : "false" }, "is_people_integrated" : "false", "exclude_reminder_for" : { "profiles" : [ { "name" : "Portal Owner", "id" : "8000000002837" } ] }, "is_tsapproval_available" : "true", "threshold" : "1439", "is_draft_supported" : "false", "user_restriction_obj" : { "has_user_timer_not_in_team" : "false", "has_other_user_timer" : "false" } }
Get Timesheet Settings

Retrieve the current timesheet settings configuration of a project.

GET

/api/v3/portal/[PORTALID]/settings/timelog

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "overlap_restriction" : "allow", "restrict_timelogs" : { "weekend" : "false", "holiday" : "false", "zpeople_leave" : "false" }, "loghour_restriction" : { "is_enabled" : "false" }, "reminder" : { "is_enabled" : "false" }, "timelog_configuration" : { "log_type" : "both", "is_generallog_enabled" : "true", "is_tasklog_enabled" : "true", "is_issuelog_enabled" : "true" }, "closed_entity_restriction" : "false", "approval" : { "is_enabled" : "true", "is_auto_approval" : "false", "type" : "allowed_approvers", "email_notification" : { "is_enabled" : "false" } }, "is_draft_enabled" : "false", "period_settings" : { "future_log" : "not_allow", "past_log" : "allow" }, "allow_timelog_for" : "owners", "multi_timer_restriction" : "false", "workhour_restriction" : "false" }
Update Timesheet Settings

Modify the timesheet settings of a project

PATCH

/api/v3/portal/[PORTALID]/settings/timelog

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Parameter

Param Name
Data Type
Description
allow_timelog_for

String

Enter the user restriction for logging time. Accepted values: owners,everyone,teams

closed_entity_restriction

boolean

Specify whether the logging time for closed tasks/issues is allowed. Accepted values: true or false

multi_timer_restriction

boolean

Specify whether to restrict multiple timers. Accepted values: true or false

workhour_restriction

boolean

Specify whether to enable restriction based on task work hours. Accepted values: true or false

restrict_timelogs

JSONObject

Specify restrictions for time logs in JSON format

timelog_configuration

JSONObject

Specify configuration for time logs in JSON format

overlap_restriction

String

Enter overlap restriction for time logs. Accepted values : allow,warn,restrict

period_settings

JSONObject

Specify period restrictions for logging

loghour_restriction

JSONObject

Specify whether to enable daily/weekly hour limit. Accepted values: true,false

JSONObject

Specify reminder settings for time logs in JSON format

JSONObject

Specify timesheet approval settings in JSON format

is_draft_enabled

boolean

Specify whether to enable timesheet drafts. Accepted values: true or false

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "allow_timelog_for" : "everyone", "closed_entity_restriction" : "true", "multi_timer_restriction" : "false", "workhour_restriction" : "true", "restrict_timelogs" : { "weekend" : "-", "holiday" : "-", "zpeople_leave" : "-" }, "timelog_configuration" : { "log_type" : "-", "is_tasklog_enabled" : "-", "is_issuelog_enabled" : "-", "is_generallog_enabled" : "-" }, "overlap_restriction" : "allow", "period_settings" : { "past_log" : "-", "future_log" : "-", "is_editlog_restricted" : "-", "period_customized_data" : { "past_value" : "-", "past_unit" : "-", "future_value" : "-", "future_unit" : "-" } }, "loghour_restriction" : { "is_enabled" : "-", "max_per_day" : "-", "max_per_week" : "-" }, "reminder" : { "is_enabled" : "-", "threshold" : "-", "daily_reminder" : { "minutes" : "-", "condition" : "-", "notify_running_timers" : "-" }, "weekly_reminder" : { "minutes" : "-", "condition" : "-" }, "exclude_reminder_for" : { "users" : { "add" : "-", "remove" : "-" }, "profiles" : { "add" : "-", "remove" : "-" } } }, "approval" : { "is_enabled" : "-", "type" : "task", "is_auto_approval" : "-", "email_notification" : { "is_enabled" : "-", "frequency" : "-", "time" : "22:00" } }, "is_draft_enabled" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/timelog");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"restrict_timelogs\":{\"weekend\":\"-\",\"holiday\":\"-\",\"zpeople_leave\":\"-\"},\"timelog_configuration\":{\"log_type\":\"-\",\"is_tasklog_enabled\":\"-\",\"is_issuelog_enabled\":\"-\",\"is_generallog_enabled\":\"-\"},\"overlap_restriction\":\"allow\",\"period_settings\":{\"past_log\":\"-\",\"future_log\":\"-\",\"is_editlog_restricted\":\"-\",\"period_customized_data\":{\"past_value\":\"-\",\"past_unit\":\"-\",\"future_value\":\"-\",\"future_unit\":\"-\"}},\"loghour_restriction\":{\"is_enabled\":\"-\",\"max_per_day\":\"-\",\"max_per_week\":\"-\"},\"reminder\":{\"is_enabled\":\"-\",\"threshold\":\"-\",\"daily_reminder\":{\"minutes\":\"-\",\"condition\":\"-\",\"notify_running_timers\":\"-\"},\"weekly_reminder\":{\"minutes\":\"-\",\"condition\":\"-\"},\"exclude_reminder_for\":{\"users\":{\"add\":\"-\",\"remove\":\"-\"},\"profiles\":{\"add\":\"-\",\"remove\":\"-\"}}},\"approval\":{\"is_enabled\":\"-\",\"type\":\"task\",\"is_auto_approval\":\"-\",\"email_notification\":{\"is_enabled\":\"-\",\"frequency\":\"-\",\"time\":\"22:00\"}},\"is_draft_enabled\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "allow_timelog_for" : "everyone", "closed_entity_restriction" : "true", "multi_timer_restriction" : "false", "workhour_restriction" : "true", "restrict_timelogs" : { "weekend" : "-", "holiday" : "-", "zpeople_leave" : "-" }, "timelog_configuration" : { "log_type" : "-", "is_tasklog_enabled" : "-", "is_issuelog_enabled" : "-", "is_generallog_enabled" : "-" }, "overlap_restriction" : "allow", "period_settings" : { "past_log" : "-", "future_log" : "-", "is_editlog_restricted" : "-", "period_customized_data" : { "past_value" : "-", "past_unit" : "-", "future_value" : "-", "future_unit" : "-" } }, "loghour_restriction" : { "is_enabled" : "-", "max_per_day" : "-", "max_per_week" : "-" }, "reminder" : { "is_enabled" : "-", "threshold" : "-", "daily_reminder" : { "minutes" : "-", "condition" : "-", "notify_running_timers" : "-" }, "weekly_reminder" : { "minutes" : "-", "condition" : "-" }, "exclude_reminder_for" : { "users" : { "add" : "-", "remove" : "-" }, "profiles" : { "add" : "-", "remove" : "-" } } }, "approval" : { "is_enabled" : "-", "type" : "task", "is_auto_approval" : "-", "email_notification" : { "is_enabled" : "-", "frequency" : "-", "time" : "22:00" } }, "is_draft_enabled" : "-" }

Sample Response

200{ "timelog_settings_response" : { "overlap_restriction" : "allow", "restrict_timelogs" : { "weekend" : "false", "holiday" : "false", "zpeople_leave" : "false" }, "loghour_restriction" : { "is_enabled" : "false" }, "reminder" : { "is_enabled" : "false" }, "timelog_configuration" : { "log_type" : "both", "is_generallog_enabled" : "true", "is_tasklog_enabled" : "true", "is_issuelog_enabled" : "true" }, "closed_entity_restriction" : "false", "approval" : { "is_enabled" : "true", "is_auto_approval" : "false", "type" : "all", "email_notification" : { "is_enabled" : "false" } }, "is_draft_enabled" : "false", "period_settings" : { "future_log" : "not_allow", "past_log" : "allow" }, "allow_timelog_for" : "owners", "multi_timer_restriction" : "false", "workhour_restriction" : "false" } }
Forums

This module covers forum related operations within Zoho Projects. Use this API to create, update, delete, or move forums, retrieve forum details, and manage tasks or comments associated with forums.

Get Forums in a Project

Retrieve the forums from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums

OAuth Scope:

ZohoProjects.forums.READ

Query Parameter

Param Name
Data Type
Description
sort_by

String

Enter the sort criteria. Accepted values:
created_time,updated_time,last_activity

sort_order

String

Enter the sort order. Accepted values:
asc,desc

page

int

Enter the page number.

per_page

String

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums?sort_by="created_time"&sort_order="desc"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""sort_order"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sort_by : "created_time" sort_order : "desc" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "forums" : [ { "comment_count" : 0, "created_time" : "2021-09-03T13:10:02.034Z", "flag" : "internal", "last_modified_time" : "2021-09-03T13:10:02.033Z", "mail_to" : "yLFo4w868675N6700kx6700kKM0872878F@zohoprojects.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/739121528/projects/1752587000000041077/forums/1752587000000095015" }, "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "is_sticky_post" : true, "title" : "Forum Projects Discusion", "task_count" : 0, "last_activity_time" : "2021-09-03T13:10:02.033Z", "is_announcement_post" : false, "followers_count" : 1, "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000095015", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } }, { "comment_count" : 0, "created_time" : "2021-09-03T12:55:24.825Z", "flag" : "internal", "last_modified_time" : "2021-09-03T12:55:24.825Z", "mail_to" : "yLFo4wk0x73Ox6700kx6700rM0870pKl@zohoprojects.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/739121528/projects/1752587000000041077/forums/1752587000000094001" }, "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "is_sticky_post" : false, "title" : "Discusstion Group", "task_count" : 0, "last_activity_time" : "2021-09-03T12:55:24.825Z", "is_announcement_post" : false, "followers_count" : 1, "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000094001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ], "page_info" : { "per_page" : 10, "has_next_page" : false, "count" : 2, "page" : 1 } }
View Forum Details

View Forum Details in a Project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]

OAuth Scope:

ZohoProjects.forums.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "forums" : [ { "comment_count" : 0, "created_time" : "2021-09-03T13:10:02.034Z", "flag" : "internal", "attachments" : [ ], "last_modified_time" : "2021-09-03T13:10:02.033Z", "mail_to" : "yLFo4w868675N6700kx6700kKM0872878F@zohoprojects.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/739121528/projects/1752587000000041077/forums/1752587000000095015" }, "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "is_sticky_post" : true, "title" : "Forum Projects Discusion", "content" : "content", "task_count" : 0, "last_activity_time" : "2021-09-03T13:10:02.033Z", "added_via" : "WEB", "is_announcement_post" : false, "followers_count" : 1, "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000095015", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Get Tasks of a Forum

Retrieve the tasks from a forum.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/tasks

OAuth Scope:

ZohoProjects.forums.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/tasks?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/tasks");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 }, "tasks" : [ { "name" : "Create new Subscription for new customer", "closed" : false, "owners" : [ { "zpuid" : "1752587000000041216", "name" : "patriciab+t3", "email" : "patriciab+t3@zohotest.com", "zuid" : 739578686 } ], "id" : "1752587000000041607", "tasklist" : { "name" : "Subscription Process", "id" : "1752587000000041603" }, "priority" : "Low", "key" : "GM1-T12", "status" : { "name" : "In Progress", "closed" : false, "id" : "1752587000000031001", "color_code" : "#08aeea", "color_class" : "statuscol_blue" } } ] }
Add New Forum

Add a new forum to a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums

OAuth Scope:

ZohoProjects.forums.CREATE

Parameter

Param Name
Data Type
Description
title

String

required
max length : 100

Enter the forum title.

content

String

required

Enter the forum content.

category_id

long

required

Enter the project category ID.

tags

JSONArray

max length : 7000
array size : 0-100

Enter the tags to add to the forum post.

flag

String

Mark the forum as internal (visible only to project users) or external (visible to both project and client users)
Accepted values: internal,external

type

String

Enter the forum type.
Accepted values: normal,question

is_sticky

String

Specify whether to mark the post as sticky
Accepted values: true,false

is_announcement

String

Specify whether to mark the post as announcement
Accepted values: true,false

notify

JSONArray

max length : 7000
array size : 0-100

Enter the ZPUID of the users to notify.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "title" : "Forum Projects Discusion", "content" : "content", "category_id" : 1752587000000041000, "tags" : [ 1752587000000041200 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "notify" : "true", "attachment_ids" : [ 1752587000000094000 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"title\":\"Forum Projects Discusion\",\"content\":\"content\",\"category_id\":1752587000000041000,\"tags\":[1752587000000041200],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[1752587000000094000]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "title" : "Forum Projects Discusion", "content" : "content", "category_id" : 1752587000000041000, "tags" : [ 1752587000000041200 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "notify" : "true", "attachment_ids" : [ 1752587000000094000 ] }

Sample Response

200{ "forums" : [ { "comment_count" : 0, "created_time" : "2021-09-03T12:56:42.324Z", "flag" : "internal", "attachments" : [ ], "last_modified_time" : "2021-09-03T12:56:42.324Z", "mail_to" : "yLFo4wk0x75tx6700kx6700rM0870pKl@zohoprojects.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/739121528/projects/1752587000000041077/forums/1752587000000095001" }, "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "is_sticky_post" : true, "title" : "Forum Projects Discusion", "content" : "content", "task_count" : 0, "last_activity_time" : "2021-09-03T12:56:42.324Z", "added_via" : "WEB", "is_announcement_post" : false, "followers_count" : 1, "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000095001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Update Forum

Modify a forum in a Project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]

OAuth Scope:

ZohoProjects.forums.UPDATE

Parameter

Param Name
Data Type
Description
title

String

max length : 100

Enter the forum title.

content

String

Enter the forum content.

category_id

long

Enter the project category ID.

tags

JSONArray

max length : 7000
array size : 0-100

Enter the tags to add to the forum post.

flag

String

Mark the forum as internal (visible only to project users) or external (visible to both project and client users)
Accepted values: internal,external

type

String

Enter the forum type.
Accepted values: normal,question

is_sticky

String

Specify whether to mark the post as sticky
Accepted values: true,false

is_announcement

String

Specify whether to mark the post as announcement
Accepted values: true,false

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs.

delete_attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs to remove.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "title" : "Forum Projects Discusion", "content" : "content", "category_id" : 1752587000000041000, "tags" : [ 1752587000000041200 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "attachment_ids" : [ 1752587000000094000 ], "delete_attachment_ids" : [ 1752587000000094000 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"title\":\"Forum Projects Discusion\",\"content\":\"content\",\"category_id\":1752587000000041000,\"tags\":[1752587000000041200],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[1752587000000094000],\"delete_attachment_ids\":[1752587000000094000]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "title" : "Forum Projects Discusion", "content" : "content", "category_id" : 1752587000000041000, "tags" : [ 1752587000000041200 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "attachment_ids" : [ 1752587000000094000 ], "delete_attachment_ids" : [ 1752587000000094000 ] }

Sample Response

200{ "forums" : [ { "comment_count" : 1, "created_time" : "2021-09-03T12:56:42.324Z", "flag" : "internal", "attachments" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630645555361", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000095001", "created_by" : "patriciab@zohocorp.com", "uploadedZpuid" : "1752587000000036003", "app_name" : "ZFS_Global", "permanent_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "entity_type" : "forum", "size" : "234862", "associated_by" : "738624987", "preview_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "attachment_id" : "1752587000000094011", "name" : "accounts.png", "associated_by_name" : "Patricia Boyle A", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-03T13:05:55.298Z", "mail_to" : "yLFo4wk0x75tx6700kx6700rM0870pKl@zohoprojects.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/739121528/projects/1752587000000041077/forums/1752587000000095001" }, "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "question", "is_sticky_post" : true, "title" : "Forum Projects Discussion", "content" : "Forum Sample content", "tags" : [ { "name" : "Inventory", "id" : "1752587000000041135", "color_class" : "bg-tag5" } ], "task_count" : 0, "last_activity_time" : "2021-09-03T13:05:55.298Z", "added_via" : "WEB", "is_announcement_post" : true, "followers_count" : 1, "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000095001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Delete Forum

Remove a forum post from the project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Forum Comments

This module covers operations related to forum comments within Zoho Projects. Use this API to retrieve, add, update, or delete comments associated with forums.

Get Comments

Retrieve comments from a forum.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments

OAuth Scope:

ZohoProjects.forums.READ

Query Parameter

Param Name
Data Type
Description
sort_by

String

Enter the sort criteria
Accepted values: created_time,updated_time

sort_order

String

Enter the sort order
Accepted values: asc,desc

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"?sort_by="created_time"&sort_order="desc"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""sort_order"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sort_by : "created_time" sort_order : "desc" page : "1" per_page : "10"

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T13:01:11.775Z", "is_best_answer" : false, "attachments" : [ ], "last_modified_time" : "2021-09-06T13:01:11.774Z", "level" : "1", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "content" : "
I am very happy to invite all of you for a grand success party owing to the launch of Zylker 6.0. We have scheduled it on the 18th of November 2018. We are expected to be at St.Andrews Hall by 4:30 pm. The evening will start with a music concert, some wine-n-dine, and a DJ night. See you there!
", "forum_id" : "1752587000000095015", "last_activity_time" : "2021-09-06T13:01:11.778Z", "added_via" : "web", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000097003" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Get Comment

Retrieve a specific comment from a forum.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.forums.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T13:01:11.775Z", "is_best_answer" : false, "attachments" : [ ], "last_modified_time" : "2021-09-06T13:01:11.774Z", "level" : "1", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "content" : "
Dear team,

I am very happy to invite all of you for a grand success party owing to the launch of Zylker 6.0. We have scheduled it on the 18th of November 2018. We are expected to be at St.Andrews Hall by 4:30 pm. The evening will start with a music concert, some wine-n-dine, and a DJ night. See you there!

-Helen
", "forum_id" : "1752587000000095015", "added_via" : "web", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "id" : "1752587000000097003" } ] }
Get Forum Comments without Forum ID

Retrieve details of forum comments without the forum ID.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forumcomments/[FORUMCOMMENTID]

OAuth Scope:

ZohoProjects.forums.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forumcomments/"1752587000000097013"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forumcomments/"1752587000000097013"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T16:08:56.069Z", "is_best_answer" : false, "attachments" : [ ], "last_modified_time" : "2021-09-06T16:08:56.068Z", "level" : "1", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000097013", "name" : "patriciab.dev", "last_name" : "Vel", "id" : "759539796", "is_client_user" : false, "first_name" : "Sakthi ", "email" : "patriciab.dev@gmail.com" }, "type" : "answer", "content" : "Sample content", "forum_id" : "1752587000000095015", "added_via" : "web", "posted_by" : { "zpuid" : "1752587000000097013", "name" : "patriciab.dev", "last_name" : "Vel", "id" : "759539796", "is_client_user" : false, "first_name" : "Sakthi ", "email" : "patriciab.dev@gmail.com" }, "id" : "1752587000000099003" } ] }
Add Comment

Add a comment to a forum post.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments

OAuth Scope:

ZohoProjects.forums.CREATE

Parameter

Param Name
Data Type
Description
content

String

required

Enter the comment.

type

String

Enter the comment type. Accepted values: question,answer,normal

notify

JSONArray

max length : 7000
array size : 0-100

Enter the ZPUID of the users to notify.

root_id

long

Enter the ID of the root comment.

parent_id

long

Enter the ID of the parent comment.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "content", "type" : "normal", "notify" : "true", "root_id" : "1752587000000097101", "parent_id" : "1752587000000097208", "attachment_ids" : [ 1752587000000094000 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"content\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"1752587000000097101\",\"parent_id\":\"1752587000000097208\",\"attachment_ids\":[1752587000000094000]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "content", "type" : "normal", "notify" : "true", "root_id" : "1752587000000097101", "parent_id" : "1752587000000097208", "attachment_ids" : [ 1752587000000094000 ] }

Sample Response

200{ "forum_comments" : { "created_time" : "2021-09-06T13:09:04.596Z", "is_best_answer" : false, "attachments" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630904944607", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000096009", "created_by" : "patriciab@zohocorp.com", "uploadedZpuid" : "1752587000000036003", "app_name" : "ZFS_Global", "permanent_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "entity_type" : "forum_comment", "size" : "234862", "associated_by" : "738624987", "preview_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "attachment_id" : "1752587000000094011", "name" : "accounts.png", "associated_by_name" : "Patricia Boyle A", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-06T13:09:04.596Z", "level" : "2", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "content" : "Sample content", "forum_id" : "1752587000000095015", "parent_posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "added_via" : "web", "parent_id" : "1752587000000097003", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "root_id" : "1752587000000097003", "id" : "1752587000000096009" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Update Comment In a Forum

Modify a comment in a forum.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.forums.UPDATE

Parameter

Param Name
Data Type
Description
content

String

required

Enter the comment.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs.

delete_attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs to remove.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "content", "attachment_ids" : [ 1752587000000094000 ], "delete_attachment_ids" : [ 1752587000000094000 ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"content\",\"attachment_ids\":[1752587000000094000],\"delete_attachment_ids\":[1752587000000094000]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "content", "attachment_ids" : [ 1752587000000094000 ], "delete_attachment_ids" : [ 1752587000000094000 ] }

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T13:13:28.338Z", "is_best_answer" : false, "attachments" : [ ], "last_modified_time" : "2021-09-06T13:16:23.546Z", "level" : "2", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "type" : "normal", "content" : "Projects Comments", "forum_id" : "1752587000000095015", "parent_posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "added_via" : "web", "parent_id" : "1752587000000097003", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "A", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia Boyle", "email" : "patriciab@zohocorp.com" }, "root_id" : "1752587000000097003", "id" : "1752587000000096019" } ] }
Delete Comment

Remove a comment from a forum.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Mark Best Answer

Mark response as the best answer in a forum.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]/markbestanswer

OAuth Scope:

ZohoProjects.forums.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"/markbestanswer' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"/markbestanswer");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "is_best_answer" : true, "comment_id" : 1752587000000096000 }
Unmark Best Answer

Unmark the best answer response in the forum.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]/markbestanswer

OAuth Scope:

ZohoProjects.forums.UPDATE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"/markbestanswer' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/"Test Comment"/"1752587000000097046"/markbestanswer");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "is_best_answer" : false, "comment_id" : 1752587000000096000 }
Forum Categories

This module covers operations related to the forum category within Zoho Projects. Use this API to retrieve, add, update, or delete categories associated with forums.

Get Categories

Retrieve categories in a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/categories

OAuth Scope:

ZohoProjects.forums.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the index for the record.

range

int

Enter the range for the record.

sort_by

String

Enter the sort criteria.
Accepted values: created_time,updated_time

sort_order

String

Enter the sort order.
Accepted values: asc,desc

searchTerm

String

Enter the search term to fetch.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories?index="1"&range="100"&sort_by="created_time"&sort_order="desc"&searchTerm=-' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""sort_order"", "");
   uriBuilder.addParameter(""searchTerm"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

index : "1" range : "100" sort_by : "created_time" sort_order : "desc" searchTerm : -

Sample Response

200{ "categories" : [ { "name" : "tdvhycgvhj", "id" : "9000000005825" } ] }
Add New Category

Add a new forum category.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/categories

OAuth Scope:

ZohoProjects.forums.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 200

Enter the name of the category.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Inventory Discussion" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Inventory Discussion\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Inventory Discussion" }

Sample Response

201{ "categories" : [ { "name" : "zsdxfcgvhbjkhjghf", "id" : "9000000005821" } ] }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Update Category

Update the forum category name in a project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/categories/[CATEGORIEID]

OAuth Scope:

ZohoProjects.forums.UPDATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 200

Enter the name of the category.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories/"1752587000000097234"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Inventory Discussion" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories/"1752587000000097234"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Inventory Discussion\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Inventory Discussion" }

Sample Response

200{ "categories" : [ { "name" : "tdvhycgvhj ", "id" : "9000000005825" } ] }
Delete Category

Remove forum category from a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/categories/[CATEGORIEID]

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories/"1752587000000097234"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/categories/"1752587000000097234"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Forum Followers

This module covers forum follower operations within Zoho Projects. Use this API to follow or unfollow forums and retrieve a list of followers.

Get Followers Of a Forum

Retrieve the followers of a forum.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/followers

OAuth Scope:

ZohoProjects.forums.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/followers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/followers");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "followers" : [ { "zpuid" : "1752587000000043001", "name" : "Kumar", "last_name" : "A", "id" : "739604840", "is_client_user" : false, "first_name" : "Kumar", "email" : "patriciab+t1@zohotest.com" }, { "zpuid" : "1752587000000097013", "name" : "patriciab.dev", "last_name" : "Vel", "id" : "759539796", "is_client_user" : false, "first_name" : "Sakthi ", "email" : "patriciab.dev@gmail.com" } ] }
Follow Forum

Follow a forum post to receive forum notifications.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/follow

OAuth Scope:

ZohoProjects.forums.CREATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/follow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/follow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Unfollow Forum

Unfollow a forum post to stop receiving forum notifications.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/unfollow

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/unfollow' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/forums/"1752587000000097035"/unfollow");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Events

This module covers event-related operations within Zoho Projects. Use this API to create, update, delete, and retrieve events or event details, including participants.

Get Project Events

Retrieve the events associated with a project within the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events

OAuth Scope:

ZohoProjects.events.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Specify the number of entries per page.

JSONObject

Specify the additional filter criteria for the events.

status

String

Specify the Status of the event.

ids

String

Enter the IDs of events to retrieve.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events?page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&status=-&ids="4000000029001"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""status"", "");
   uriBuilder.addParameter(""ids"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ] status : - ids : "4000000029001"

Sample Response

200{ "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "1", "page" : "1" }, "events" : [ { "updated_on" : "2024-05-10T07:31:48.308Z", "starts_at" : "2024-05-11T07:30:00.000Z", "updatedby" : { "user_type" : "1", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "66295825" }, "add_to_office365" : false, "is_open" : true, "title" : "Quarterly Meeting", "remind_before" : "on time", "duration" : { "duration" : "30 minutes", "hours" : "0", "minutes" : "30", "days" : "0", "duration_milli" : "1800000" }, "recurrence" : { "name" : "only once", "count" : "1", "type" : "count", "frequency" : "only once" }, "addEventToO365" : false, "created_on" : "2024-05-10T07:31:48.308Z", "createdby" : { "user_type" : "1", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "66295825" }, "comment_mail_id" : "c88c2Md80r8Fx67079EB003m0x671maC7k0l@zylker.com", "location" : "Conference Hall 5", "id" : "103368000002494001", "ends_at" : "2024-05-11T08:00:00.000Z" } ] }
Get Event Details

Retrieve the details of an event within a project in the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]

OAuth Scope:

ZohoProjects.events.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "updated_on" : "2024-05-10T07:31:48.308Z", "starts_at" : "2024-05-11T07:30:00.000Z", "add_to_office365" : "false", "is_open" : "true", "attendees" : [ { "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" } ], "addedvia" : "v3", "title" : "Quarterly Meeting", "created_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "remind_before" : "on time", "duration" : { "duration" : "30 minutes", "hours" : "0", "minutes" : "30", "days" : "0", "duration_milli" : "1800000" }, "recurrence" : { "name" : "only once", "count" : "1", "type" : "count", "frequency" : "only once" }, "addEventToO365" : "false", "project_id" : "103368000001263005", "created_on" : "2024-05-10T07:31:48.308Z", "comment_mail_id" : "c88c2Md80r8Fx67079EB003m0x671maC7k0l@zylker.com", "updated_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "location" : "Conference Hall 5", "id" : "103368000002494001", "ends_at" : "2024-05-11T08:00:00.000Z" }
Get Event Participants

Retrieve the participants of an event within the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/events/[EVENTID]/participants

OAuth Scope:

ZohoProjects.events.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Specify the number of entries per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/events/[EVENTID]/participants?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/events/[EVENTID]/participants");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "2", "page" : "1" }, "users" : [ { "user_type" : "1", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "66295825" } ] }
Add New Event

Create a new event within a project in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events

OAuth Scope:

ZohoProjects.events.CREATE

Parameter

Param Name
Data Type
Description
title

String

required
max length : 150

Enter the title of the event.

starts_at

String

required

Enter the start date and time in the ISO8601 format.

ends_at

String

required

Enter the end date and time in the ISO8601 format.

remind_before

String

Specify the reminder duration before the event.

recurrence_frequency

String

Specify the recurrence frequency of the event.
Available recurrence types : only once, every day, every week, every month, every year.

recurrence_count

int

Specify the recurrence count for the event.

location

String

max length : 200

Specify the Location of the event.

attendees

JSONArray

required
max length : 7000
array size : 0-500

Specify the attendees for the event.

attachment_ids

JSONArray

Enter Attachment IDs for the event.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "title" : "admin Event", "starts_at" : "2022-06-15T12:48:53.523Z", "ends_at" : "2022-06-15T13:48:53.524Z", "remind_before" : "on time", "recurrence_frequency" : "every day", "recurrence_count" : "5", "location" : "chennai", "attendees" : "[23806000000152047]", "attachment_ids" : " [23806000097572061]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"title\":\"admin Event\",\"starts_at\":\"2022-06-15T12:48:53.523Z\",\"ends_at\":\"2022-06-15T13:48:53.524Z\",\"remind_before\":\"on time\",\"recurrence_frequency\":\"every day\",\"recurrence_count\":\"5\",\"location\":\"chennai\",\"attendees\":\"[23806000000152047]\",\"attachment_ids\":\" [23806000097572061]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "title" : "admin Event", "starts_at" : "2022-06-15T12:48:53.523Z", "ends_at" : "2022-06-15T13:48:53.524Z", "remind_before" : "on time", "recurrence_frequency" : "every day", "recurrence_count" : "5", "location" : "chennai", "attendees" : "[23806000000152047]", "attachment_ids" : " [23806000097572061]" }

Sample Response

201{ "updated_on" : "2024-05-10T07:31:48.308Z", "starts_at" : "2024-05-11T07:30:00.000Z", "add_to_office365" : "false", "is_open" : "true", "attendees" : [ { "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" } ], "addedvia" : "v3", "title" : "Quarterly Meeting", "created_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "remind_before" : "on time", "duration" : { "duration" : "30 minutes", "hours" : "0", "minutes" : "30", "days" : "0", "duration_milli" : "1800000" }, "recurrence" : { "name" : "only once", "count" : "1", "type" : "count", "frequency" : "only once" }, "addEventToO365" : "false", "project_id" : "103368000001263005", "created_on" : "2024-05-10T07:31:48.308Z", "comment_mail_id" : "c88c2Md80r8Fx67079EB003m0x671maC7k0l@zylker.com", "updated_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "location" : "Conference Hall 5", "id" : "103368000002494001", "ends_at" : "2024-05-11T08:00:00.000Z" }
Update Event

Update details of an event in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]

OAuth Scope:

ZohoProjects.events.UPDATE

Parameter

Param Name
Data Type
Description
title

String

max length : 150

Specify the new title for the event.

starts_at

String

Enter the start date and time in the ISO8601 format.

ends_at

String

Enter the end date and time in the ISO8601 format.

remind_before

String

Specify the reminder duration before the event.

recurrence_frequency

String

Specify the recurrence frequency of the event.
Available recurrence types : only once, every day, every week, every month, every year.

recurrence_count

int

Specify the new recurrence count for the event.

location

String

max length : 200

Specify the new Location for the event.

attendees

JSONArray

max length : 7000
array size : 0-500

Specify the updated list of attendees for the event.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "title" : "admin Event", "starts_at" : "2022-06-15T12:48:53.523Z", "ends_at" : "2022-06-15T13:48:53.524Z", "remind_before" : "on time", "recurrence_frequency" : "every day", "recurrence_count" : "5", "location" : "chennai", "attendees" : "[23806000000152047]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"title\":\"admin Event\",\"starts_at\":\"2022-06-15T12:48:53.523Z\",\"ends_at\":\"2022-06-15T13:48:53.524Z\",\"remind_before\":\"on time\",\"recurrence_frequency\":\"every day\",\"recurrence_count\":\"5\",\"location\":\"chennai\",\"attendees\":\"[23806000000152047]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "title" : "admin Event", "starts_at" : "2022-06-15T12:48:53.523Z", "ends_at" : "2022-06-15T13:48:53.524Z", "remind_before" : "on time", "recurrence_frequency" : "every day", "recurrence_count" : "5", "location" : "chennai", "attendees" : "[23806000000152047]" }

Sample Response

200{ "updated_on" : "2024-05-10T07:31:53.843Z", "starts_at" : "2024-05-11T05:30:00.000Z", "add_to_office365" : "false", "is_open" : "true", "attendees" : [ { "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" } ], "addedvia" : "v3", "title" : "Quarterly Meeting", "created_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "remind_before" : "on time", "duration" : { "duration" : "30 minutes", "hours" : "0", "minutes" : "30", "days" : "0", "duration_milli" : "1800000" }, "recurrence" : { "name" : "only once", "count" : "1", "type" : "count", "frequency" : "only once" }, "addEventToO365" : "false", "project_id" : "103368000001263005", "created_on" : "2024-05-10T07:31:48.308Z", "comment_mail_id" : "c88c2Md80r8Fx67079EB003m0x671maC7k0l@zylker.com", "updated_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "location" : "Conference Hall 2", "id" : "103368000002494001", "ends_at" : "2024-05-11T06:00:00.000Z" }
Delete Project Event

Delete an event associated with a project in the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]

OAuth Scope:

ZohoProjects.events.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Event Comments

This module covers comment operations for events within Zoho Projects. Use this API to add, update, delete, or retrieve comments related to events.

Get Event Comments

Retrieve the comments associated with an event in a project within the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]/comments

OAuth Scope:

ZohoProjects.events.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Specify the number of entries per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ }
Get Event Comment by ID

Retrieve an event comment by its unique identifier within the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/eventcomments/[EVENTCOMMENTID]

OAuth Scope:

ZohoProjects.events.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/eventcomments/[EVENTCOMMENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/eventcomments/[EVENTCOMMENTID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

201{ "updated_on" : "2024-05-10T07:31:50.874Z", "event_id" : "103368000002494001", "created_on" : "2024-05-10T07:31:50.874Z", "project_id" : "103368000001263005", "added_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "addedvia" : "v3", "id" : "103368000002494009", "content" : "During this meeting, we will discuss the following topics: Review of the previous quarter's performance, Goals and objectives for the next quarter, and Any other relevant business." }
Add New Event Comment

Add a new comment to an event associated with a project in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]/comments

OAuth Scope:

ZohoProjects.events.CREATE

Parameter

Param Name
Data Type
Description
content

String

required
max length : 65000

Content for the event comment.

attachment_ids

JSONArray

Array of attachment IDs associated with the comment.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Zoho Projects API", "attachment_ids" : " [23806000097572061]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Zoho Projects API", "attachment_ids" : " [23806000097572061]" }

Sample Response

201{ "updated_on" : "2024-05-10T07:31:50.874Z", "event_id" : "103368000002494001", "attachments" : "[]", "created_on" : "2024-05-10T07:31:50.874Z", "project_id" : "103368000001263005", "added_by" : { "invoiceRate" : "120.000", "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "role" : "admin", "roleId" : "103368000000048005", "name" : "Monica", "last_name" : "Hemsworth", "id" : "66295825", "is_client_user" : "false", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "addedvia" : "v3", "id" : "103368000002494009", "content" : "During this meeting, we will discuss the following topics: Review of the previous quarter's performance, Goals and objectives for the next quarter, and Any other relevant business." }
Update Event Comment

Update an existing comment associated with an event in a project within the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.events.UPDATE

Parameter

Param Name
Data Type
Description
content

String

required

Content for the event comment.

attachment_ids

JSONArray

Array of attachment IDs associated with the comment.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "content" : "Zoho Projects API", "attachment_ids" : " [23806000097572061]" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "content" : "Zoho Projects API", "attachment_ids" : " [23806000097572061]" }

Sample Response

204 No Content
Delete Event Comment

Delete a comment associated with an event in a project within the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/events/[EVENTID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.events.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"/"1752587000000097046"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/events/[EVENTID]/"Test Comment"/"1752587000000097046"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Attachments

This module covers attachment related operations within Zoho Projects. Use this API to retrieve, upload, associate, or disassociate attachments for projects.

Get Project Attachments

Retrieve attachment details from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/attachments

OAuth Scope:

ZohoProjects.portals.READ, WorkDrive.workspace.ALL,WorkDrive.files.ALL

Query Parameter

Param Name
Data Type
Description
entity_type

String

required

Enter the module name.
Available Modules:project_comment,status,status_comment,milestone_comment,tasklist_comment,task,task_comment,bug,bug_resolution,bug_comment,event,event_comment,forum,forum_comment,announcement_comment,zoho_meeting_comment

entity_id

long

required

Enter the module ID.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments?entity_type="task"&entity_id="6000000006079"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""entity_type"", "");
   uriBuilder.addParameter(""entity_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

entity_type : "task" entity_id : "6000000006079"

Sample Response

200{ "attachment" : [ { "attachment_id" : "170876000015530007", "name" : "coder 1.jpg", "type" : "image/jpeg", "size" : "198091", "third_party_file_id" : "muo5y81f02cc9388f4aa3868c5698498cb52d", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712723408594", "associated_by" : "703961433", "associated_by_name" : "Monica Hemsworth", "associated_time_long" : "1712723410560", "permanent_url" : "https://workdrive.zoho.com/file/muo5y81f02cc9388f4aa3868c5698498cb52d", "uploadedZpuid" : "170876000007981001", "trashed" : false }, { "attachment_id" : "170876000015530009", "name" : "coder 2.png", "type" : "image/png", "size" : "700661", "third_party_file_id" : "muo5y7b0436ba9c5e4a17b6833ab53994b239", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712723408753", "associated_by" : "703961433", "associated_by_name" : "Monica Hemsworth", "associated_time_long" : "1712723410560", "permanent_url" : "https://workdrive.zoho.com/file/muo5y7b0436ba9c5e4a17b6833ab53994b239", "uploadedZpuid" : "170876000007981001", "trashed" : false }, { "attachment_id" : "170876000015530011", "name" : "coder 3.jpg", "type" : "image/jpeg", "size" : "2482517", "third_party_file_id" : "muo5y87425740d6004b1aa3750138a2e0e7b7", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712723409130", "associated_by" : "703961433", "associated_by_name" : "Monica Hemsworth", "associated_time_long" : "1712723410560", "permanent_url" : "https://workdrive.zoho.com/file/muo5y87425740d6004b1aa3750138a2e0e7b7", "uploadedZpuid" : "170876000007981001", "trashed" : false }, { "attachment_id" : "170876000015530013", "name" : "coder 4.jpg", "type" : "image/jpeg", "size" : "4671262", "third_party_file_id" : "muo5y46d1ca2633e146a98f923157f9d61e62", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712723409668", "associated_by" : "703961433", "associated_by_name" : "Monica Hemsworth", "associated_time_long" : "1712723410560", "permanent_url" : "https://workdrive.zoho.com/file/muo5y46d1ca2633e146a98f923157f9d61e62", "uploadedZpuid" : "170876000007981001", "trashed" : false }, { "attachment_id" : "170876000015530015", "name" : "coder 5.jpg", "type" : "image/jpeg", "size" : "4741672", "third_party_file_id" : "muo5ya5bb63c567154a90a28cae028addb440", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712723410250", "associated_by" : "703961433", "associated_by_name" : "Monica Hemsworth", "associated_time_long" : "1712723410560", "permanent_url" : "https://workdrive.zoho.com/file/muo5ya5bb63c567154a90a28cae028addb440", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }
Get Attachment Details

Retrieve details of an attachment from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/attachments/[ATTACHMENTID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "attachment" : [ { "attachment_id" : "170876000015521051", "name" : "coder.png", "type" : "image/jpeg", "size" : "3973545", "third_party_file_id" : "59cfudc90534a56194e5fbe3802e9e35fa980", "entity_id" : "-1", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712664912090", "associated_time_long" : "-1", "permanent_url" : "https://workdrive.zoho.com/file/59cfudc90534a56194e5fbe3802e9e35fa980", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }
Upload Gobal Attachments

Upload attachments to the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/attachments

OAuth Scope:

ZohoProjects.portals.CREATE, WorkDrive.workspace.ALL,WorkDrive.files.ALL

Parameter

Param Name
Data Type
Description
attachment_details

JSONObject

Enter the storage type and location details of the attachments.

attachments

JSONArray

Enter additional details of an attachment.

document_ids

JSONArray

Enter the document ID.

upload_file

file

max size : 125mb
limit : 0-10

Specify the file or files to be uploaded.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/attachments' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"attachment_details" = [{"storage_type":"workdrive","location_details":{"folder_id":"23806000097545166","project_id":"1752587000000097024"}}]' --form '"attachments" = [{"attachment_id":"23806000097323570","name":"Zoho-ApprovaLogo.png","type":"application/octet-stream","size":"9162","preview_url":"-","download_url":"-","permanent_url":"-","created_by":"projects+api@zohocorp.com","created_time":"1654508530946","third_party_file_id":"170658000000605263","app_domain":"zfsGlobal","app_id":"2","version":"","entity_id":"6000000006079","entity_type":"task","associated_by":"","extra_data":{"set_by_record":"false"}}]' --form 'document_ids = "[\"17525870000000970\"]"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/attachments");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""attachment_details"", "{"storage_type":"workdrive","location_details":{"folder_id":"23806000097545166","project_id":"1752587000000097024"}}");
   uriBuilder.addParameter(""attachments"", "{"attachment_id":"23806000097323570","name":"Zoho-ApprovaLogo.png","type":"application/octet-stream","size":"9162","preview_url":"-","download_url":"-","permanent_url":"-","created_by":"projects+api@zohocorp.com","created_time":"1654508530946","third_party_file_id":"170658000000605263","app_domain":"zfsGlobal","app_id":"2","version":"","entity_id":"6000000006079","entity_type":"task","associated_by":"","extra_data":{"set_by_record":"false"}}");
   uriBuilder.addParameter(""document_ids"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"attachment_details" : [ { "storage_type" : "workdrive", "location_details" : { "folder_id" : "23806000097545166", "project_id" : "1752587000000097024" } } ] "attachments" : [ { "attachment_id" : "23806000097323570", "name" : "Zoho-ApprovaLogo.png", "type" : "application/octet-stream", "size" : "9162", "preview_url" : "-", "download_url" : "-", "permanent_url" : "-", "created_by" : "projects+api@zohocorp.com", "created_time" : "1654508530946", "third_party_file_id" : "170658000000605263", "app_domain" : "zfsGlobal", "app_id" : "2", "version" : "", "entity_id" : "6000000006079", "entity_type" : "task", "associated_by" : "", "extra_data" : { "set_by_record" : "false" } } ] document_ids : "[\"17525870000000970\"]"

Sample Response

201{ "attachment" : [ { "attachment_id" : "170876000015521051", "name" : "coder.png", "type" : "image/jpeg", "size" : "3973545", "third_party_file_id" : "59cfudc90534a56194e5fbe3802e9e35fa980", "entity_id" : "-1", "app_domain" : "workdriveUpload", "app_id" : "4", "app_name" : "WorkdriveUpload", "created_by" : "703961433", "created_time" : "1712664912090", "associated_by" : "703961433", "associated_time_long" : "1712664912090", "permanent_url" : "https://workdrive.zoho.com/file/59cfudc90534a56194e5fbe3802e9e35fa980", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }
Associate Attachment

Associate an attachment to a module in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/attachments/[ATTACHMENTID]

OAuth Scope:

ZohoProjects.portals.CREATE, WorkDrive.workspace.ALL,WorkDrive.files.ALL

Parameter

Param Name
Data Type
Description
entity_type

String

required

Enter the module name.
Available entities:project_comment,status,status_comment,milestone_comment,tasklist_comment,task,task_comment,bug,bug_resolution,bug_comment,event,event_comment,forum,forum_comment,announcement_comment,zoho_meeting_comment

entity_id

long

required

Enter the module ID.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'entity_type = "task"' --form 'entity_id = "6000000006079"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""entity_type"", "");
   uriBuilder.addParameter(""entity_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

entity_type : "task" entity_id : "6000000006079"

Sample Response

201{ "attachment" : [ { "attachment_id" : "170876000015521051", "name" : "coder.png", "type" : "image/jpeg", "size" : "3973545", "third_party_file_id" : "59cfudc90534a56194e5fbe3802e9e35fa980", "entity_id" : "170876000015496423", "entity_type" : "task", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "WorkDrive", "created_by" : "703961433", "created_time" : "1712664912090", "associated_by" : "703961433", "associated_time_long" : "1712669548967", "preview_url" : "https://previewengine-accl.zoho.com/thumbnail/WD/59cfudc90534a56194e5fbe3802e9e35fa980?x-cli-msg=eyJtb2R1bGUiOiJ0YXNrIiwiZW50aXR5X2lkIjoiMTcwODc2MDAwMDE1NDk2MDIxXzE3MDg3NjAwMDAxNTQ5NjQyMyJ9&size=l", "download_url" : "https://download-accl.zoho.com/v1/workdrive/download/59cfudc90534a56194e5fbe3802e9e35fa980?x-cli-msg=%7B%22module%22%3A%22task%22%2C%22entity_id%22%3A%22170876000015496021_170876000015496423%22%7D", "permanent_url" : "https://workdrive.zoho.com/file/59cfudc90534a56194e5fbe3802e9e35fa980?authId=%7B%22module%22%3A%22task%22%2C%22entity_id%22%3A%22170876000015496021_170876000015496423%22%7D", "entityName" : "TASK", "uploadedZpuid" : "170876000007981001", "webhookId" : "59cfudc90534a56194e5fbe3802e9e35fa980-5756566000000770011", "trashed" : false } ] }
Disassociate Attachment

Disassociate an attachment from a module in a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/attachments/[ATTACHMENTID]

OAuth Scope:

ZohoProjects.portals.DELETE, WorkDrive.workspace.ALL,WorkDrive.files.ALL

Parameter

Param Name
Data Type
Description
entity_type

String

required

Enter the module name.
Available entities:project_comment,status,status_comment,milestone_comment,tasklist_comment,task,task_comment,bug,bug_resolution,bug_comment,event,event_comment,forum,forum_comment,announcement_comment,zoho_meeting_comment

entity_id

long

required

Enter the module ID.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"?entity_type="task"&entity_id="6000000006079"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/attachments/"1752587000000097260"");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""entity_type"", "");
   uriBuilder.addParameter(""entity_id"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

entity_type : "task" entity_id : "6000000006079"

Sample Response

201
Leaves

This module covers all leave-related operations within Zoho Projects. Use this API to retrieve, add, update, or delete leave records. To enable the leave module for your portal, please send an email to support@zohoprojects.com.

Get All Leaves

Retrieve all the leaves from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/leave

OAuth Scope:

ZohoProjects.leave.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the index number to retrieve. Should be greater than or equal to 0.

range

int

Enter the number of records to retrieve. Should be less than or equal to 200.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave?index="1"&range="100"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

index : "1" range : "100"

Sample Response

200{ "leaves" : [ { "reason" : "Not feeling well", "created_time" : "2024-06-25T04:43:21.357Z", "reference_id" : "202", "from_date" : "2024-07-31T18:30:00.000Z", "to_date" : "2024-08-30T18:30:00.000Z", "id" : "6000000142077", "type" : "Sick Leave", "user" : { "zpuid" : 6000000020001, "name" : "John", "last_name" : "John", "first_name" : "John", "email" : "john@zylker.com", "zuid" : 15336607 } } ], "page_info" : { "has_next_page" : "false", "index" : "1", "range" : "200" } }
Get Leave Details

Retrieve specific leave details from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/leave/[LEAVEID]

OAuth Scope:

ZohoProjects.leave.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "leaves" : [ { "reason" : "Vacation", "created_time" : "2024-08-06T09:36:31.456Z", "reference_id" : "201", "from_date" : "2024-07-01T00:00:00.000Z", "to_date" : "2024-07-31T23:59:59.000Z", "id" : "6000000155001", "type" : "Casual Leave", "user" : { "zpuid" : 6000000002159, "name" : "Muralidharan", "last_name" : "M", "first_name" : "Muralidharan", "email" : "muralidharan@zylker.com", "zuid" : 16704016 } } ] }
Add Leaves

Create a leave in the Zoho Projects portal. A maximum of 100 leaves can be added in a request. Multiple user leaves cannot be added with a single request.

POST

/api/v3/portal/[PORTALID]/leave

OAuth Scope:

ZohoProjects.leave.CREATE

Parameter

Param Name
Data Type
Description

JSONObject

required

Enter the ZPUID of the user in JSONObject.

type

String

required

Enter the Leave type. A maximum of 100 characters can be added.

from_date

String

required

Enter the start date of the leave. E.g. 2024-07-02T10:00:00Z

to_date

String

required

Enter the end date of the leave. E.g. 2024-07-02T10:00:00Z

reason

String

max length : 250

Enter the reason for the leave. A maximum of 250 characters can be added.

reference_id

String

max length : 250

Enter the reference ID. A maximum of 250 characters can be added.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "user" : { "zpuid" : "4000000002055" }, "type" : "Task", "from_date" : "-", "to_date" : "-", "reason" : "-", "reference_id" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Task\",\"from_date\":\"-\",\"to_date\":\"-\",\"reason\":\"-\",\"reference_id\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "user" : { "zpuid" : "4000000002055" }, "type" : "Task", "from_date" : "-", "to_date" : "-", "reason" : "-", "reference_id" : "-" }

Sample Response

204 No Content
Update Leave

Update the leave details in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/leave/[LEAVEID]

OAuth Scope:

ZohoProjects.leave.UPDATE

Parameter

Param Name
Data Type
Description

JSONObject

required

Enter the ZPUID of the user in JSONObject.

type

String

required

Enter the Leave type. A maximum of 100 characters can be added.

from_date

String

required

Enter the start date of the leave. E.g. 2024-07-02T10:00:00Z

to_date

String

required

Enter the end date of the leave. E.g. 2024-07-02T10:00:00Z

reason

String

max length : 250

Enter the reason for the leave. A maximum of 250 characters can be added.

reference_id

String

max length : 250

Enter the reference ID. A maximum of 250 characters can be added.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "user" : { "zpuid" : "4000000002055" }, "type" : "Task", "from_date" : "-", "to_date" : "-", "reason" : "-", "reference_id" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Task\",\"from_date\":\"-\",\"to_date\":\"-\",\"reason\":\"-\",\"reference_id\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "user" : { "zpuid" : "4000000002055" }, "type" : "Task", "from_date" : "-", "to_date" : "-", "reason" : "-", "reference_id" : "-" }

Sample Response

204 No Content
Delete Leave

Remove a leave from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/leave/[LEAVEID]

OAuth Scope:

ZohoProjects.leave.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/leave/[LEAVEID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Users

This module covers user-related operations within Zoho Projects. Use this API to manage portal users, client users, and resources. You can retrieve user details, add or deactivate users, update user profiles, and view the projects a user is associated with.

Get All Portal Users, Client Users, and Contacts

Retrieve all users, client users, and contacts from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/users

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

int

Enter the user type.
Accepted values are 1 (Users), 2 (Client Users), 3 (Client Contacts).

view_type

String

Enter the view type.
Accepted values are 0 (Inactive), 1 (Active).

sort

String

Specify the sort order. E.g. alphabetical:asc

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

ids

String

Enter the user IDs.

company_ids

String

Enter the client company IDs.

view

String

Enter the data view type.
Accepted values: list, grid.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users?type="0"&view_type="1"&sort="alphabetical:asc"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&ids="23806000006417155"&company_ids=-&view=-&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""email"", "");
   uriBuilder.addParameter(""type"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""company_ids"", "");
   uriBuilder.addParameter(""view"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

type : "0" view_type : "1" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ] ids : "23806000006417155" company_ids : - view : -

Sample Response

200{ "page_info" : { "per_page" : "100", "has_next_page" : "true", "count" : "189", "page" : "1" }, "users" : [ { "updated_time" : "2024-03-07T07:50:20.347Z", "added_time" : "2021-07-27T14:39:49.031Z", "is_active" : true, "role" : { "name" : "Administrator", "id" : "103368000000048005", "type" : "1" }, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : true, "profile" : { "name" : "Portal Owner", "id" : "103368000000048352", "type" : "1", "is_default" : true }, "last_name" : "Hemsworth", "display_name" : "Monica", "zuid" : "66295825", "last_accessed_on" : "2024-05-10T07:32:28.422Z", "full_name" : "Monica Hemsworth", "user_type" : "1", "id" : "103368000000048003", "invoice" : "120.0", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "120.0", "cost_per_hour" : "120.0" } } ] }
Get User Details

Retrieve details of a user from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "updated_time" : "2024-05-10T07:39:15.862Z", "added_time" : "2024-05-10T07:39:14.876Z", "is_active" : "true", "role" : { "name" : "Administrator", "id" : "103368000000048005", "type" : "1" }, "deactivated_by" : "Monica Hemsworth", "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : "false", "profile" : { "name" : "Contractor", "id" : "103368000000048364", "type" : "8", "is_default" : "true" }, "last_name" : "Hemsworth", "reporting_to" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "zuid" : "66295825" }, "display_name" : "Monica", "zuid" : "69014231", "full_name" : "Monica Hemsworth", "user_type" : "1", "id" : "103368000002484141", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "0.000", "cost_per_hour" : "0.000", "type" : "none" } }
Get All User's Project(s)

Retrieve all projects associated with a user from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/users/[USERID]/projects

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
status

String

Enter the project status. E.g. Open

search_term

String

Enter a search term.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[USERID]/projects?status=-&search_term="demo"&page="1"&per_page="10"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[USERID]/projects");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""status"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""show_all"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

status : - search_term : "demo" page : "1" per_page : "10"

Sample Response

200{ "projects" : [ { "number" : 253, "is_owner" : false, "name" : "deal 2", "is_strict_project" : false, "id" : "103368000001263005", "status" : "active", "group" : { "prefix" : "", "name" : "zp.projset.ungroupproj", "id" : "103368000000025001", "is_default" : true, "type" : "public" } } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
Add User to Portal

Add a new user to the specified Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/users

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

required

Enter the user details.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"userdetails" = [{"email_id":"zohoprojects@zoho.com","role_id":"23806000000035001","profile_id":"2223806000000022149","project_ids":"[\"23806000074760021\"]","bulk_projects":{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}},"rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","include_projects":"86559000000045345","applyportalrate":"-","reporting_manager":"23806000006123455432"}]'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""userdetails"", "{"email_id":"zohoprojects@zoho.com","role_id":"23806000000035001","profile_id":"2223806000000022149","project_ids":"[\"23806000074760021\"]","bulk_projects":{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}},"rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","include_projects":"86559000000045345","applyportalrate":"-","reporting_manager":"23806000006123455432"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"userdetails" : [ { "email_id" : "zohoprojects@zoho.com", "role_id" : "23806000000035001", "profile_id" : "2223806000000022149", "project_ids" : "[\"23806000074760021\"]", "bulk_projects" : { "select_all" : "false", "selected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "unselected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "rateupdatedprojects" : { "longkey" : "1752587000000097269" }, "costrateupdatedprojects" : { "longkey" : "1752587000000097269" } }, "rate" : "1", "cost_rate_per_hour" : "-", "revenue_budget" : "-", "cost_budget" : "-", "budget_threshold" : "-", "hourly_budget" : "-", "hourly_budget_threshold" : "-", "include_projects" : "86559000000045345", "applyportalrate" : "-", "reporting_manager" : "23806000006123455432" } ]

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "7000044352064" }, "existing_users_list" : "[]", "active_user_count" : "10", "email_with_null_zuid" : [ "\"monica.hemsworth@zylker.com\"" ], "deactivated_Users" : "[]", "trouble_shoot" : "https://zoho.com/projects/help/add-project-users.html#troubleshoot-tips", "new_Users" : "[]", "success_emailId" : [ "\"monica.hemsworth@zylker.com\"" ], "users" : [ { "is_viewer_follower" : false, "profile_type" : 6, "role" : "Manager", "is_user_closed" : false, "loginname" : "0", "active" : 1, "reporting_to" : "zp.general.none", "REPORTING_TO" : { "zpuid" : "7000000002623", "full_name" : "zp.general.none", "email" : "Any User", "zuid" : "-1" }, "is_resend_invite" : false, "role_name" : "Manager", "profile_name" : "Manager", "zpuid" : "7000044352064", "last_updated_time" : 0, "role_id" : "7000000000991", "profile_id" : "7000000002347", "name" : "Monica Hemsworth", "is_user_confirmed" : false, "is_customized" : false, "is_group_user" : false, "id" : "0", "last_accessed_time" : "", "is_following" : false, "email" : "monica.hemsworth@zylker.com" } ], "is_portal_owner" : "true", "remaining_user_count" : "990", "curr_projid" : "0", "is_invoice_integ" : "false", "is_admin" : "true", "is_crmplus_plus" : "false", "user_count" : { "Contractor" : "1", "Employee" : "6", "jointadmin" : "1", "admin" : "1", "portalusers" : "10", "Manager" : "1" }, "existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "in_active_user_count" : "0", "success_zpuid" : [ "\"7000044352064\"" ] }
Add Client User to Portal

Add a client user to the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/clientuser

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

required

Enter the client user details.

force_add

boolean

Specify whether to convert existing contact users to client users.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clientuser' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"userdetails" = [{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","company_name":"jkywbycc01222022","company_id":"2223806000097701045","project_ids":"[\"23806000074760021\"]","bulk_projects":{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}},"rate":"1","include_projects":"86559000000045345","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-"}]' --form 'force_add = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clientuser");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""userdetails"", "{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","company_name":"jkywbycc01222022","company_id":"2223806000097701045","project_ids":"[\"23806000074760021\"]","bulk_projects":{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}},"rate":"1","include_projects":"86559000000045345","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-"}");
   uriBuilder.addParameter(""force_add"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"userdetails" : [ { "email_id" : "zohoprojects@zoho.com", "profile_id" : "2223806000000022149", "company_name" : "jkywbycc01222022", "company_id" : "2223806000097701045", "project_ids" : "[\"23806000074760021\"]", "bulk_projects" : { "select_all" : "false", "selected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "unselected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "rateupdatedprojects" : { "longkey" : "1752587000000097269" }, "costrateupdatedprojects" : { "longkey" : "1752587000000097269" } }, "rate" : "1", "include_projects" : "86559000000045345", "cost_rate_per_hour" : "-", "revenue_budget" : "-", "cost_budget" : "-", "budget_threshold" : "-", "hourly_budget" : "-", "hourly_budget_threshold" : "-" } ] force_add : "true"

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "103368000002484148" }, "existing_users_list" : "[]", "active_user_count" : "189", "email_with_null_zuid" : [ "\"monica.hemsworth@zylker.com\"" ], "trouble_shoot" : "https://zoho.com/projects/help/add-project-users.html#troubleshoot-tips", "success_emailId" : [ "\"monica.hemsworth@zylker.com\"" ], "Deactivated_Users" : "[]", "users" : [ { "is_active" : true, "profile_type" : 3, "is_user_closed" : false, "company_id" : "103368000000048925", "is_resend_invite" : false, "current_zpuid" : "103368000000048003", "profile_name" : "client", "zpuid" : "103368000002484148", "profile_id" : 103368000000079017, "company_name" : "Prime Minister", "name" : "Monica Hemsworth", "is_user_confirmed" : false, "id" : "2", "email" : "monica.hemsworth@zylker.com" } ], "is_portal_owner" : "true", "remaining_user_count" : "431", "is_invoice_integ" : "true", "is_admin" : "true", "is_crmplus_plus" : "false", "Existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "user_count" : { "Contractor" : "82", "jointadmin" : "4", "New Profile" : "1", "admin" : "44", "portalusers" : "211", "Employeeu" : "20", "Manager" : "59", "Profile1" : "1" }, "in_active_user_count" : "22", "client_user_count" : "380", "success_zpuid" : [ "103368000002484148" ], "New_Users" : "[]" }
Update User Profile and Rate in Portal

Update the user profile and rate in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
companyrole

long

Enter the role ID of the user.

companyprofile

long

Enter the profile ID of the user.

invoice

String

Enter the invoice rate, e.g., $30 per hour.

costrate

String

Enter the cost per hour, e.g., $15 per hour.

isapplyportalrate

boolean

Specify whether the user rate applies at the portal level.
Accepted values:true, false

bulkprojects

JSONObject

Enter details of multiple projects.

reporting_manager

long

Specify the reporting manager.

notify

boolean

Specify whether the user should be notified about updates.
Accepted values: true, false.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'companyrole = - ' --form 'companyprofile = - ' --form 'invoice = - ' --form 'costrate = - ' --form 'isapplyportalrate = - ' --form '"bulkprojects" = [{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}}]' --form 'reporting_manager = "23806000006123455432"' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""companyrole"", "");
   uriBuilder.addParameter(""companyprofile"", "");
   uriBuilder.addParameter(""invoice"", "");
   uriBuilder.addParameter(""costrate"", "");
   uriBuilder.addParameter(""isapplyportalrate"", "");
   uriBuilder.addParameter(""bulkprojects"", "{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}}");
   uriBuilder.addParameter(""reporting_manager"", "");
   uriBuilder.addParameter(""is_readonly"", "");
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

companyrole : - companyprofile : - invoice : - costrate : - isapplyportalrate : - "bulkprojects" : [ { "select_all" : "false", "selected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "unselected" : { "group_ids" : "[\"2380600000612345\"]", "project_ids" : "[\"23806000074760021\"]" }, "rateupdatedprojects" : { "longkey" : "1752587000000097269" }, "costrateupdatedprojects" : { "longkey" : "1752587000000097269" } } ] reporting_manager : "23806000006123455432" notify : "true"

Sample Response

200{ "CURR_PROJID" : "0", "ISOFFICEUSER" : "false", "CURR_USERZUID" : "66295825", "CURR_USERZPUID" : "103368000000048003", "USERLIST" : [ { "ISRESENDINVITE" : false, "PROFILE_ID" : "103368000000048364", "DISPLAYNAME" : "Monica", "ZPUID" : "103368000002484141", "reporting_to" : "Monica Hemsworth", "REPORTING_TO" : { "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "zuid" : "66295825" }, "INVOICE" : "0.00", "EMAIL" : "monica.hemsworth@zylker.com", "ISACTIVE" : true, "ZPRole" : "Administrator", "reporting_to_zpuid" : "103368000000048003", "COST_PER_HOUR" : "100.00", "PROFILE_NAME" : "Contractor", "last_updated_time" : 1715326760885, "role_id" : "103368000000048005", "ISUSERCLOSED" : false, "PROFILETYPE" : 8, "LOGINNAME" : 69014231 } ], "ACTIVEUSERCOUNT" : "189", "CURRENCY_CODE" : "?", "ISINVINTEG" : "true", "INACTIVEUSERCOUNT" : "22", "REMAININGUSERCOUNT" : "431", "SUBORDINATE_USER_COUNT" : "177", "ISPORTALOWNER" : "true", "ISADMIN" : "true", "USERCNT" : { "Contractor" : "82", "jointadmin" : "4", "New Profile" : "1", "admin" : "44", "portalusers" : "211", "Employeeu" : "20", "Manager" : "59", "Profile1" : "1" }, "CURR_ROLE" : "admin", "REMAININGREADONLYUSERCOUNT" : "405", "ISUPGRADE" : "false", "ISCRMPLUSPORTAL" : "false", "ISDEMOUSER" : "false", "DIRECT_USER_COUNT" : "177" }
Activate a User

Activate a user in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]/activate

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the user about the activation.
Accepted values: true or false.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]/activate' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]/activate");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Activated Successfully" }
Deactivate User

Deactivate a user in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]/deactivate

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the user about the deactivation.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]/deactivate' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]/deactivate");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   uriBuilder.addParameter(""reporting_manager"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Deactivated Successfully" }
Activate Client User

Activate a client user in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/client-users/[ZPUID | EMAILID]/activate

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the user about the activation.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/client-users/[ZPUID | EMAILID]/activate' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/client-users/[ZPUID | EMAILID]/activate");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Activated Successfully" }
Deactivate Client User

Deactivate a client user in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/client-users/[ZPUID | EMAILID]/deactivate

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the client user about the deactivation.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/client-users/[ZPUID | EMAILID]/deactivate' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/client-users/[ZPUID | EMAILID]/deactivate");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Deactivated Successfully" }
Delete user from portal with zpuid|zuid|email

Remove a user from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.DELETE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the user
Accepted values:true,false

reporting_manager

long

Enter the reporting manager of the user.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]?notify="true"&reporting_manager="23806000006123455432"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   uriBuilder.addParameter(""reporting_manager"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true" reporting_manager : "23806000006123455432"
Project Users

This module covers operations related to project users within Zoho Projects. Use this API to retrieve, add, and delete users associated with a project. You can manage client users, non-project users, and view specific user details within the context of a project.

Get All Users

Retrieve all users from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

int

Enter the user type.
Accepted values are 1 (Users), 2 (Client Users), 3 (Client Contacts).

view_type

String

Enter the view type.
Accepted values are 0 (Inactive), 1 (Active).

sort

String

Enter the sort order. E.g. last_accessed_time:desc

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

ids

String

Enter the user IDs.

company_ids

String

Enter the client company IDs.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users?type="0"&view_type="1"&sort="alphabetical:asc"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&ids="23806000006417155"&company_ids=-&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""type"", "");
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""company_ids"", "");
   uriBuilder.addParameter(""view"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

type : "0" view_type : "1" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ] ids : "23806000006417155" company_ids : -

Sample Response

200{ "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "51", "page" : "1" }, "users" : [ { "added_time" : "2024-02-08T17:06:04.860Z", "is_active" : true, "role" : { "name" : "Administrator", "id" : "103368000000048005", "type" : "1" }, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Admin", "id" : "103368000000048355", "type" : "2", "is_default" : true }, "last_name" : "Hemsworth", "reporting_to" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "zuid" : "66295825" }, "display_name" : "Monica", "full_name" : "Monica Hemsworth", "user_type" : "1", "id" : "103368000002316003", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "0.000", "cost_per_hour" : "0.000", "type" : "none" } } ] }
Get Project User Details.

Retrieve details of a user from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/[ZPUID | EMAILID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "updated_time" : "2024-05-10T07:39:15.862Z", "added_time" : "2024-05-10T07:39:14.876Z", "is_active" : "true", "role" : { "name" : "Administrator", "id" : "103368000000048005", "type" : "1" }, "deactivated_by" : "Monica Hemsworth", "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : "false", "profile" : { "name" : "Contractor", "id" : "103368000000048364", "type" : "8", "is_default" : "true" }, "last_name" : "Hemsworth", "reporting_to" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "103368000000048003", "first_name" : "Monica", "zuid" : "66295825" }, "display_name" : "Monica", "zuid" : "69014231", "full_name" : "Monica Hemsworth", "user_type" : "1", "id" : "103368000002484141", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "0.000", "cost_per_hour" : "0.000", "type" : "none" } }
Add User to Project

Add users to the project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/projectusers

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

Enter the user details.

notify

boolean

Specify Whether to notify users.
Accepted values: True or False

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/projectusers' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"userdetails" = [{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","role_id":"23806000000035001","rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","is_readonly":"-"}]' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/projectusers");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""userdetails"", "{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","role_id":"23806000000035001","rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","is_readonly":"-"}");
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"userdetails" : [ { "email_id" : "zohoprojects@zoho.com", "profile_id" : "2223806000000022149", "role_id" : "23806000000035001", "rate" : "1", "cost_rate_per_hour" : "-", "revenue_budget" : "-", "cost_budget" : "-", "budget_threshold" : "-", "is_readonly" : "-" } ] notify : "true"

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "103368000002484141" }, "trouble_shoot" : "https://zoho.com/projects/help/add-project-users.html#troubleshoot-tips", "success_emailId" : [ "\"monica.hemsworth@zylker.com\"" ], "users" : [ { "is_viewer_follower" : false, "profile_type" : 8, "role" : "Administrator", "is_user_closed" : false, "loginname" : "69014231", "active" : 1, "reporting_to" : "Monica Hemsworth", "REPORTING_TO" : { "zpuid" : "103368000000048003", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "zuid" : "66295825" }, "is_resend_invite" : false, "role_name" : "Administrator", "profile_name" : "Contractor", "zpuid" : "103368000002484141", "last_updated_time" : 0, "role_id" : "103368000000048005", "profile_id" : "103368000000048364", "name" : "Monica", "is_user_confirmed" : false, "is_customized" : false, "is_group_user" : false, "id" : "69014231", "last_accessed_time" : "", "is_following" : false, "email" : "monica.hemsworth@zylker.com", "budget" : { "revenue_budget" : "0.000", "budget_threshold" : "0.000", "cost_rate_per_hour" : "0.000" } } ], "is_portal_owner" : "true", "curr_projid" : "103368000001263005", "is_admin" : "true", "is_invoice_integ" : "true", "is_crmplus_plus" : "false", "user_count" : { "Contractor" : "82", "jointadmin" : "4", "New Profile" : "1", "admin" : "44", "portalusers" : "211", "Employeeu" : "20", "Manager" : "59", "Profile1" : "1" }, "existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "success_zpuid" : [ "\"103368000002484141\"" ] }
Add Client User to Project

Add client users to the project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/clientuser

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

Enter the client user details.

notify

boolean

Specify Whether to notify users.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clientuser' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form '"userdetails" = [{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","role_id":"23806000000035001","rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","is_readonly":"-"}]' --form 'notify = "true"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clientuser");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""userdetails"", "{"email_id":"zohoprojects@zoho.com","profile_id":"2223806000000022149","role_id":"23806000000035001","rate":"1","cost_rate_per_hour":"-","revenue_budget":"-","cost_budget":"-","budget_threshold":"-","is_readonly":"-"}");
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"userdetails" : [ { "email_id" : "zohoprojects@zoho.com", "profile_id" : "2223806000000022149", "role_id" : "23806000000035001", "rate" : "1", "cost_rate_per_hour" : "-", "revenue_budget" : "-", "cost_budget" : "-", "budget_threshold" : "-", "is_readonly" : "-" } ] notify : "true"

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "103368000002484148" }, "email_with_null_zuid" : [ "\"monica.hemsworth@zylker.com\"" ], "trouble_shoot" : "https://zoho.com/projects/help/add-project-users.html#troubleshoot-tips", "success_emailId" : [ "\"monica.hemsworth@zylker.com\"" ], "users" : [ { "is_viewer_follower" : false, "profile_type" : 3, "role" : "Client", "is_user_closed" : false, "company_id" : 103368000000048925, "loginname" : "0", "active" : 1, "is_resend_invite" : false, "role_name" : "Client", "profile_name" : "client", "zpuid" : "103368000002484148", "last_updated_time" : 0, "role_id" : "103368000000048013", "profile_id" : "103368000000079017", "company_name" : "Prime Minister", "name" : "Monica Hemsworth", "is_user_confirmed" : false, "is_customized" : false, "is_group_user" : false, "id" : "0", "is_following" : false, "email" : "monica.hemsworth@zylker.com", "budget" : { "revenue_budget" : "0.000", "budget_threshold" : "0.000", "cost_rate_per_hour" : "0.000" } } ], "is_portal_owner" : "true", "curr_projid" : "103368000001263005", "is_admin" : "true", "is_invoice_integ" : "true", "is_crmplus_plus" : "false", "user_count" : { "Contractor" : "82", "jointadmin" : "4", "New Profile" : "1", "admin" : "44", "portalusers" : "211", "Employeeu" : "20", "Manager" : "59", "Profile1" : "1" }, "existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "success_zpuid" : [ "\"103368000002484148\"" ] }
Delete user from a project with zpuid|zuid|email

Remove a user from a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.DELETE

Parameter

Param Name
Data Type
Description
notify

String

required

Specify whether to notify the user.
Accepted values:true,false

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/[ZPUID | EMAILID]?notify="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"
User Hierarchy

Use this API to retrieve the reportees of a user within Zoho Projects.

Get Subordinates of the User

Retrieve subordinates of a user from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/user/[USERID]/descendants

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the index of the record.

range

int

Enter the range of the record.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/user/[USERID]/descendants?index="1"&range="100"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/user/[USERID]/descendants");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

index : "1" range : "100"

Sample Response

200{ "parent" : { "user_status" : { "is_active" : "true", "last_updated_time" : "0", "type" : "1", "is_confirmed_user" : "true" }, "basic_info" : { "zpuid" : "4000000002143", "role" : { "name" : "Administrator", "id" : "4000000002145" }, "profile" : { "name" : "Portal Owner", "id" : "4000000002502" }, "last_name" : "Doe", "profile_image_url" : "https://contacts.csez.zohocorpin.com/file?fs=thumb&exp=600&ID=18891770", "display_name" : "John Doe", "first_name" : "John", "email" : "john.doe@zylker.com", "zuid" : "18891770" }, "total_reports" : "5", "direct_reports" : "5", "level" : "1" }, "descendants" : [ { "user_status" : { "is_active" : true, "last_updated_time" : "0", "type" : 1, "is_confirmed_user" : true }, "basic_info" : { "zpuid" : "4000000005001", "role" : { "name" : "Administrator", "id" : "4000000002145" }, "profile" : { "name" : "Custom Admin", "id" : "4000000010001" }, "last_name" : "Edward", "profile_image_url" : "https://contacts.csez.zohocorpin.com/file?fs=thumb&exp=600&ID=16194581", "display_name" : "Charles Edward", "first_name" : "Charles", "email" : "charles.edward@zylker.com", "zuid" : "16194581" }, "total_reports" : 0, "direct_reports" : 0, "level" : 2 } ] }
User Exports

This module covers operations related to user export within Zoho Projects. Use this API to export, retrieve export history, and export details for both portal and project users.

Get User Export Details by Export ID

Retrieve exported users from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/users/export/[EXPORTID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export/[EXPORTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export/[EXPORTID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "id" : "4000000443007", "created_time" : "2024-12-24T09:40:21.974Z", "exported_by" : { "id" : "4000000002143", "first_name" : "John", "last_name" : "Doe", "full_name" : "John Doe", "email" : "john.doe@zylker.com", "zuid" : "18891770" }, "type" : "portal_users", "status" : "completed", "format" : "xlsx", "download_url" : "https://projectsapi.zoho.com/portal/download/johndotdoezylkerdotcom/downloadaction.do?file=projects-283ca486b5bfaac931fc8747339313a23be87d5e6a5a9e898626feb7e9e611bbf534a113153709274838fdde8895bc72", "sheet_url" : "https://projectsapi.zoho.com/portal/download/johndotdoezylkerdotcom/viewonline.do?file=projects-283ca486b5bfaac931fc8747339313a23be87d5e6a5a9e898626feb7e9e611bbf534a113153709274838fdde8895bc72" }
Get Project User Export Details by Export ID

Retrieve exported users from a project using the export ID.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/export/[EXPORTID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export/[EXPORTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export/[EXPORTID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "created_time" : "2024-08-20T08:30:43.374Z", "exported_by" : { "full_name" : "Cole Anderson", "last_name" : "Anderson", "id" : "7000000000987", "first_name" : "Cole", "email" : "cole.anderson@zylker.com", "zuid" : "15827778" }, "format" : "xlsx", "download_url" : "https://projectsapi.zoho.com/portal/download/coledotandersonzylkerdotcom/downloadaction.do?file=projects-283ca486b5bfaac931fc8747339313a23c848da625b276a86a31f9a844a7f710f283228ade05655188f9f569b6002ae8", "sheet_url" : "https://projectsapi.zoho.com/portal/download/coledotandersonzylkerdotcom/viewonline.do?file=projects-283ca486b5bfaac931fc8747339313a23c848da625b276a86a31f9a844a7f710f283228ade05655188f9f569b6002ae8", "project" : { "number" : "14", "name" : "project f", "id" : "7000044278065" }, "id" : "7000044378593", "type" : "project_allclients", "status" : "completed" }
Get Portal User Export History

Retrieve the export history of portal users from past 15 days.

GET

/api/v3/portal/[PORTALID]/users/export

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

String

required

Enter the export type.
Accepted values: portal_users,all_project_users,portal_clientusers,all_project_clientusers,portal_clients,all_project_clients,portal_contacts,all_project_contacts,portal_allclients

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export?type="0"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""type"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

type : "0" page : "1" per_page : "10"

Sample Response

200{ "exports" : [ { "created_time" : "2024-11-11T10:40:13.680Z", "exported_by" : { "full_name" : "Hari", "last_name" : "", "id" : "4000000002411", "first_name" : "Hari", "email" : "haripriya.ss+newcsez@zohotest.com", "zuid" : "25586378" }, "format" : "xlsx", "id" : "4000000086001", "type" : "all_project_users", "status" : "completed" } ], "page_info" : { "per_page" : 25, "has_next_page" : false, "count" : 1, "page" : 1 } }
Get Project User Export History

Retrieve the export history of project users from past 15 days

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/export

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

String

required

Enter the export type.
Accepted values: project_users,project_clientusers,project_clients,project_contacts,project_allclients

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export?type="0"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""type"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

type : "0" page : "1" per_page : "10"

Sample Response

200{ "exports" : [ { "created_time" : "2024-11-11T11:10:25.664Z", "exported_by" : { "full_name" : "Hari", "last_name" : "", "id" : "4000000002411", "first_name" : "Hari", "email" : "haripriya.ss+newcsez@zohotest.com", "zuid" : "25586378" }, "format" : "csv", "project" : { "number" : "43", "name" : "Test 1", "id" : "4000000040029" }, "id" : "4000000088001", "type" : "project_users", "status" : "completed" } ], "page_info" : { "per_page" : 25, "has_next_page" : false, "count" : 1, "page" : 1 } }
Initiate Portal User Export

Export the portal users from the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/users/export

OAuth Scope:

ZohoProjects.users.READ

Parameter

Param Name
Data Type
Description
type

String

required

Enter the export type.
Accepted values: portal_users,all_project_users,portal_clientusers,all_project_clientusers,portal_clients,all_project_clients,portal_contacts,all_project_contacts,portal_allclients

format

String

required

Enter the file format to export.
Accepted values: csv,xlsx

access_code

String

Enter the encryption password.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "type" : "0", "format" : "-", "access_code" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/users/export");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"type\":\"0\",\"format\":\"-\",\"access_code\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "type" : "0", "format" : "-", "access_code" : "-" }

Sample Response

202{ "id" : "7000044378571", "message" : "Export initiated successfully", "status" : "inprogress" }
Initiate Project User Export

Export the project users from the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/export

OAuth Scope:

ZohoProjects.users.READ

Parameter

Param Name
Data Type
Description
type

String

required

Enter the export type.
Accepted values: project_users,project_clientusers,project_clients,project_contacts,project_allclients

format

String

required

Enter the file format to export.
Accepted values: csv,xlsx

access_code

String

Enter the encryption password.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "type" : "0", "format" : "-", "access_code" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/users/export");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"type\":\"0\",\"format\":\"-\",\"access_code\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "type" : "0", "format" : "-", "access_code" : "-" }

Sample Response

202{ "id" : "7000044378593", "message" : "Export initiated successfully", "status" : "inprogress" }
Teams

This module covers team management related operations within Zoho Projects. Use this API to manage teams, get team details, associate them with projects, and update team meta details.

Get Team Details

Retrieve team details from the Zoho projects portal.

GET

/api/v3/portal/[PORTALID]/teams

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
id

long

Enter the team ID.

search_term

String

Enter the team name

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

String

Enter the last modification time.

sort_by

String

Enter the sort order. Accepted values: ASC,DESC.

Response JSON Keys

created_time : String

Represents the time at which the team was created

email_verified : Boolean

Represents whether the team email address is verified or not

name : String

Name of the team

updated_by : Json Object

Represents the details of the user who has updated the team

id : String

Unique ID of the team

created_by : Json Object

Represents the details of the user who has created the team

lead : Json Object

Represents the details of the team lead

email : String

Email address of the team

per_page : String

Represents the number of records per page

has_next_page : String

Represents whether the next page is available or not

posible value

true:Next page is available

false:Next page isn't available

count : String

Represents the total number of teams

page : String

Represents the page number

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams?id="4000000062001"&search_term="Dev"&page="1"&per_page="10"&last_modified_time="2023-11-30T05:59:21.188Z"&sort_by="desc(name)"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""id"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   uriBuilder.addParameter(""sort_by"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

id : "4000000062001" search_term : "Dev" page : "1" per_page : "10" last_modified_time : "2023-11-30T05:59:21.188Z" sort_by : "desc(name)"

Sample Response

200{ "teams" : [ { "created_time" : "2023-11-30T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-30T05:59:21.188Z", "name" : "Development Team", "updated_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "id" : "4000000062001", "created_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "lead" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "email" : "devs-team@zylker.com" }, { "created_time" : "2023-11-28T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-29T05:59:21.188Z", "name" : "Support Team", "updated_by" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "id" : "4000000015029", "created_by" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "lead" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "email" : "support-reps@zylker.com" } ], "page_info" : { "per_page" : "2", "has_next_page" : "true", "count" : "37", "page" : "1" } }
Get Project's Teams

Retrieve teams from a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/teams

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
id

long

Enter the team ID.

search_term

String

Enter the team name

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

String

Enter the last modification time.

sort_by

String

Enter the sort order. Accepted values: ASC,DESC.

Response JSON Keys

created_time : String

Represents the time at which the team was created

email_verified : Boolean

Represents whether the team email address is verified or not

name : String

Name of the team

updated_by : Json Object

Represents the details of the user who has updated the team

id : String

Unique ID of the team

created_by : Json Object

Represents the details of the user who has created the team

lead : Json Object

Represents the details of the team lead

email : String

Email address of the team

per_page : String

Represents the number of records per page

has_next_page : String

Represents whether the next page is available or not

posible value

true:Next page is available

false:Next page isn't available

count : String

Represents the total number of teams

page : String

Represents the page number

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/teams?id="4000000062001"&search_term="Dev"&page="1"&per_page="10"&last_modified_time="2023-11-30T05:59:21.188Z"&sort_by="desc(name)"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/teams");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""id"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   uriBuilder.addParameter(""sort_by"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

id : "4000000062001" search_term : "Dev" page : "1" per_page : "10" last_modified_time : "2023-11-30T05:59:21.188Z" sort_by : "desc(name)"

Sample Response

200{ "teams" : [ { "created_time" : "2023-11-30T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-30T05:59:21.188Z", "name" : "Development Team", "updated_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "id" : "4000000062001", "created_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "lead" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "email" : "devs-team@zylker.com" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "1", "page" : "1" } }
Get Team Users

Retrieve users from Teams

GET

/api/v3/portal/[PORTALID]/teams/users

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
team_ids

JSONArray

Enter the team IDs.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

String

Enter the last modification time.

Response JSON Keys

name : String

Name of the team

associated_teams : Json Array

Represents the team IDs to which the user is associated

per_page : String

Represents the number of records per page

has_next_page : String

Represents whether the next page is available or not

posible value

true:Next page is available

false:Next page isn't available

count : String

Represents the total number of teams

page : String

Represents the page number

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/users?team_ids="[4000000062001,4000000015029]"&page="1"&per_page="10"&last_modified_time="2023-11-30T05:59:21.188Z"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/users");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""team_ids"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

team_ids : "[4000000062001,4000000015029]" page : "1" per_page : "10" last_modified_time : "2023-11-30T05:59:21.188Z"

Sample Response

200{ "team_users" : [ { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "associated_teams" : [ "4000000062001" ], "zuid" : "18891770" }, { "zpuid" : "4000000005067", "name" : "Carla Gracia", "associated_teams" : [ "4000000062001" ], "zuid" : "16279483" }, { "zpuid" : "4000000005073", "name" : "Davidson G", "associated_teams" : [ "4000000062001" ], "zuid" : "16279531" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "3", "page" : "1" } }
Get Team's Projects

Retrieve projects associated with multiple teams.

GET

/api/v3/portal/[PORTALID]/teams/projects

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
team_ids

JSONArray

Enter the team IDs.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

last_modified_time

String

Enter the last modification time.

Response JSON Keys

per_page : String

Represents the number of records per page

has_next_page : String

Represents whether the next page is available or not

posible value

true:Next page is available

false:Next page isn't available

count : String

Represents the total number of teams

page : String

Represents the page number

name : String

Name of the team

id : String

Unique ID of the team

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/projects?team_ids="[4000000062001,4000000015029]"&page="1"&per_page="10"&last_modified_time="2023-11-30T05:59:21.188Z"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/projects");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""team_ids"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""last_modified_time"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

team_ids : "[4000000062001,4000000015029]" page : "1" per_page : "10" last_modified_time : "2023-11-30T05:59:21.188Z"

Sample Response

200{ "team_projects" : [ { "id" : "4000000005325", "name" : "Code Optimization", "associated_teams" : [ "4000000062001" ] }, { "id" : "4000000008020", "name" : "Code Test Plugin", "associated_teams" : [ "4000000062001" ] } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "2", "page" : "1" } }
Create Team

Create a new team in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/teams

OAuth Scope:

ZohoProjects.teams.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 50

Enter the name of the team.

project_ids

JSONObject

required

Enter the IDs of the projects.

JSONObject

required

Enter the IDs of the users.

lead

long

required

Enter the ID of the team lead.

email

String

max length : 100

Enter the team's email address.

notify

boolean

Specify whether to notify the users.
Accepted values:true,false

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Development Team", "project_ids" : { "add" : "[4000000005103, 4000000005133]" }, "user_ids" : { "add" : "[4000000005103, 4000000005133]" }, "lead" : "4000000005103", "email" : "devs-team@zylker.com", "notify" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Development Team", "project_ids" : { "add" : "[4000000005103, 4000000005133]" }, "user_ids" : { "add" : "[4000000005103, 4000000005133]" }, "lead" : "4000000005103", "email" : "devs-team@zylker.com", "notify" : "false" }

Sample Response

200{ "created_time" : "2023-11-30T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-30T05:59:21.188Z", "name" : "Development Team", "updated_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "id" : "4000000062001", "created_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "lead" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "email" : "devs-team@zylker.com" }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

FORBIDDEN HTTP 403

Update Team

Modify the details of an existing team in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/teams/[TEAMID]

OAuth Scope:

ZohoProjects.teams.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 50

Enter the name of the team.

project_ids

JSONObject

Enter the IDs of the projects.

JSONObject

Enter the IDs of the users.

lead

long

Enter the ID of the team lead.

email

String

max length : 100

Enter the team's email address.

notify

boolean

Specify whether to notify the users.
Accepted values:true,false

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/[TEAMID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "Development Team", "project_ids" : { "add" : "[4000000005103, 4000000005133]", "remove" : "[4000000014077, 4000000008020]" }, "user_ids" : { "add" : "[4000000005103, 4000000005133]", "remove" : "[4000000014077, 4000000008020]" }, "lead" : "4000000005103", "email" : "devs-team@zylker.com", "notify" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/[TEAMID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\",\"remove\":\"[4000000014077, 4000000008020]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\",\"remove\":\"[4000000014077, 4000000008020]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "Development Team", "project_ids" : { "add" : "[4000000005103, 4000000005133]", "remove" : "[4000000014077, 4000000008020]" }, "user_ids" : { "add" : "[4000000005103, 4000000005133]", "remove" : "[4000000014077, 4000000008020]" }, "lead" : "4000000005103", "email" : "devs-team@zylker.com", "notify" : "false" }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Delete Team

Remove a team from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/teams/[TEAMID]

OAuth Scope:

ZohoProjects.teams.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/[TEAMID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/teams/[TEAMID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Add Team in a Project

Add an existing team to a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/associate-teams

OAuth Scope:

ZohoProjects.teams.CREATE

Parameter

Param Name
Data Type
Description
team_ids

JSONArray

Enter the team IDs to add.

notify

boolean

Specify whether to notify the users.
Accepted values:true,false

Response JSON Keys

created_time : String

Represents the time at which the team was created

email_verified : Boolean

Represents whether the team email address is verified or not

name : String

Name of the team

updated_by : Json Object

Represents the details of the user who has updated the team

id : String

Unique ID of the team

created_by : Json Object

Represents the details of the user who has created the team

lead : Json Object

Represents the details of the team lead

email : String

Email address of the team

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/associate-teams' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "team_ids" : "[4000000062001,4000000015029]", "notify" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/associate-teams");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "team_ids" : "[4000000062001,4000000015029]", "notify" : "false" }

Sample Response

200{ "teams" : [ { "created_time" : "2023-11-30T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-30T05:59:21.188Z", "name" : "Development Team", "updated_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "id" : "4000000062001", "created_by" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "lead" : { "zpuid" : "4000000002143", "name" : "Aaron Gilbert", "zuid" : "18891770" }, "email" : "devs-team@zylker.com" }, { "created_time" : "2023-11-28T05:59:21.188Z", "email_verified" : true, "last_updated_time" : "2023-11-29T05:59:21.188Z", "name" : "Support Team", "updated_by" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "id" : "4000000015029", "created_by" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "lead" : { "zpuid" : "4000000005091", "name" : "Thompson K", "zuid" : "16469952" }, "email" : "support-reps@zylker.com" } ] }
Remove Team from a Project

Remove an existing team from a project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/dissociate-teams/[DISSOCIATE-TEAMID]

OAuth Scope:

ZohoProjects.teams.DELETE

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/dissociate-teams/[DISSOCIATE-TEAMID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/dissociate-teams/[DISSOCIATE-TEAMID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Profiles

This module covers profile-related operations. Use this API to manage portal profiles, update profile permissions, and set default profiles for your users.

Get All Portal Profiles

Retrieve all Profiles from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/profiles

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
sort_by

String

Enter the sort order.
Accepted values: ASC or DESC.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

ids

String

Enter the profile IDs.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles?sort_by="ASC(last_updated_time)"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&ids="4000000029001"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""type"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sort_by : "ASC(last_updated_time)" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ] ids : "4000000029001"

Sample Response

200{ "page_info" : { "per_page" : "25", "has_next_page" : "false", "count" : "12", "page" : "1" }, "profiles" : [ { "is_primary" : true, "name" : "Manager", "id" : "7000000002347", "type" : "6", "is_default" : true } ] }
Get Profile Details

Retrieve details of the profile from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "is_primary" : "true", "name" : "Client", "id" : "7000000002356", "type" : "3", "is_default" : "true" }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Create Profile

Create new profiles in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/profiles

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
name

String

required

Enter the profile name.

type

String

Enter the profile type.
Accepted values: Normal or Client.

is_primary

boolean

Specify whether the profile should be marked as default.
Accepted values: true or false.

clone_from

long

Enter the ID of an existing profile to clone from, if applicable.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "-", "type" : "Task", "is_primary" : "false", "clone_from" : "-" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"-\",\"type\":\"Task\",\"is_primary\":\"false\",\"clone_from\":\"-\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "-", "type" : "Task", "is_primary" : "false", "clone_from" : "-" }

Sample Response

201{ "is_primary" : "true", "name" : "Client (Primary & Cloned)", "is_customized" : "false", "id" : "7000044368029", "type" : "3", "is_default" : "false" }
Update Profile

Modify the details of an existing profile in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]

OAuth Scope:

ZohoProjects.portals.UPDATE

Parameter

Param Name
Data Type
Description
name

String

required

Enter the updated profile name.

is_primary

boolean

Specify whether the profile should be marked as default.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "-", "is_primary" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"-\",\"is_primary\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "-", "is_primary" : "false" }

Sample Response

204 No Content
Set Default profile

Set a default profile in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]/setprimary

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]/setprimary' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]/setprimary");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Delete Profile

Remove a profile from a Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]

OAuth Scope:

ZohoProjects.portals.DELETE

Parameter

Param Name
Data Type
Description
alternate_profile

long

Enter the ID of the alternate profile.
If provided, users with the profile being deleted will be migrated to this alternate profile.
If left blank, users will be migrated to the default profile.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]?alternate_profile="4000000002858"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/profiles/[PROFILEID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""alternate_profile"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

alternate_profile : "4000000002858"

Sample Response

204 No Content
Roles

This module covers role-related operations within Zoho Projects. Use this API to create, update, delete, and assign default roles to users.

Get All Portal Roles

Retrieves all roles from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/roles

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
sort_by

String

Enter the sort order.
Accepted values: ASC or DESC.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

ids

String

Enter the role IDs.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles?sort_by="ASC(last_updated_time)"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]&ids="4000000029001"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""sort_by"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""type"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

sort_by : "ASC(last_updated_time)" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ] ids : "4000000029001"

Sample Response

200{ "roles" : [ { "is_primary" : true, "name" : "Normal edited (Primary)", "id" : "7000044368047", "type" : "0" } ], "page_info" : { "per_page" : "25", "has_next_page" : "false", "count" : "12", "page" : "1" } }
Get Role Details

Retrieve the details of a role from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/roles/[ROLEID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "is_primary" : "true", "name" : "Contractor", "id" : "7000000000995", "type" : "1" }
Create Role

Create a new role in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/roles

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
name

String

required

Enter the role name.

sequence

int

Enter the sequence number for the role.

is_primary

boolean

Specify whether the role is default.
Accepted values: True or False.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "-", "sequence" : "5", "is_primary" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"-\",\"sequence\":\"5\",\"is_primary\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "-", "sequence" : "5", "is_primary" : "false" }

Sample Response

201{ "is_primary" : "false", "name" : "Normal-2 (Non Primary)", "id" : "7000044368063", "type" : "0" }
Update Role

Modify the existing role in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/roles/[ROLEID]

OAuth Scope:

ZohoProjects.portals.UPDATE

Parameter

Param Name
Data Type
Description
name

String

required

Enter the role name.

sequence

int

Enter the sequence number for the role.

is_primary

boolean

Specify whether the role is default.
Accepted values: True or False.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "-", "sequence" : "5", "is_primary" : "false" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"-\",\"sequence\":\"5\",\"is_primary\":\"false\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "-", "sequence" : "5", "is_primary" : "false" }

Sample Response

204 No Content
Set Default role

Set the default role in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/roles/[ROLEID]/setprimary

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]/setprimary' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]/setprimary");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Delete Role

Remove a role from a Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/roles/[ROLEID]

OAuth Scope:

ZohoProjects.portals.DELETE

Parameter

Param Name
Data Type
Description
alternate_role

long

Enter the ID of the alternate role.
If provided, users with the role being deleted will be migrated to this alternate role.
If left blank, users will be migrated to the default role.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]?alternate_role="4000000002417"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/roles/[ROLEID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""alternate_role"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

alternate_role : "4000000002417"

Sample Response

204 No Content
Clients

This module covers client related operations within Zoho Projects. Use this API to manage client details, associate clients with projects, and update client information.

Get Clients

Retrieve client details from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/clients

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
ids

String

Enter the client company IDs.

sort

String

Enter the sort order.
Accepted values: ASC or DESC.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients?ids="4000000029001"&sort="alphabetical:asc"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

ids : "4000000029001" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "clients" : [ { "zipcode" : "SW1A 2AA", "address_second" : "Downing Street", "country" : "United Kingdom", "city" : "City of Westminster", "zohocrm_account_id" : "1275806000000373065", "address_first" : "10", "name" : "Prime Minister", "id" : "103368000000048925", "state" : "London", "webaddress" : "https://www.gov.uk/" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "81", "page" : "1" } }
Get Client-Wise Users

Retrieve client companies and client users from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/clients/users

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
view_type

int

Enter the view type.
Accepted values: 0 (Inactive), 1 (Active).

sort

String

Enter the sort criteria.
Accepted values: ASC or DESC.

page

int

Enter the page number.

per_page

int

Enter the number of entries to display per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/users?view_type="date"&sort="alphabetical:asc"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/users");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

view_type : "date" sort : "alphabetical:asc" page : "1" per_page : "10"

Sample Response

200{ "clients" : [ { "zohocrm_account_id" : "1275806000000373065", "name" : "Account 1", "id" : "103368000000048925", "users" : [ { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-17T10:35:58.041Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66624082", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000078001", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000431121" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-18T11:02:11.579Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66623984", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000087001", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000431133" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-09T16:01:36.565Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66624888", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000087009", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000431109" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T07:17:46.415Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66639476", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000094001", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454030" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T07:24:49.683Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66639478", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000094009", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454018" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T07:53:57.492Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66640567", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000094015", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454042" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T09:21:08.559Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66640569", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000096005", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454055" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T09:23:55.915Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66640573", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000096013", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454067" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2021-08-30T09:25:28.483Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "66640831", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000096021", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000454079" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "1.000", "added_time" : "2021-09-01T10:50:59.089Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "64602797", "cost_per_hour" : "1.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000101009", "invoice" : "1.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-02-22T06:02:36.389Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "68502761", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000548069", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000573114" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-02-22T06:02:41.224Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "68502765", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000548075", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000573102" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-02-23T16:53:23.724Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "68531232", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000556001", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-02-23T16:58:15.998Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "Client", "id" : "103368000000048367", "type" : "3", "is_default" : true }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "68531596", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000556005", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-17T10:28:40.736Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000611003", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-18T06:54:15.237Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000611059", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-23T07:05:02.029Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "64253573", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000622008", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000573018" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-03-23T07:11:20.279Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "64253571", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000622016", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000573030" }, { "updated_time" : "2023-05-26T08:07:07.387Z", "costRate" : "0.000", "added_time" : "2022-07-20T15:09:04.145Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "zuid" : "64253569", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000930007", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "zohocrm_contact_id" : "1275806000000573042" }, { "updated_time" : "2024-05-07T13:30:48.941Z", "costRate" : "0.000", "added_time" : "2024-05-07T13:30:45.536Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000002484148", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1" } ] } ], "page_info" : { "per_page" : "100", "has_next_page" : "true", "count" : "419", "total_clients" : "81", "total_contacts" : "13", "page" : "1", "total_users" : "372" } }
Get All Client Projects

Retrieve all projects associated with a client from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/clients/[CLIENTID]/projects

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
status

String

Enter the project status. Accepted values : active, template, archived

search_term

String

Enter the search term.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]/projects?status=-&search_term="ZohoProjects"&page="1"&per_page="10"&' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]/projects");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""status"", "");
   uriBuilder.addParameter(""search_term"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""show_all"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

status : - search_term : "Zoho Projects" page : "1" per_page : "10"

Sample Response

200{ "projects" : [ { "number" : 211, "is_primary_client" : false, "name" : "public project", "is_strict_project" : false, "id" : "103368000000469005", "status" : "active", "group" : { "prefix" : "", "name" : "zp.projset.ungroupproj", "id" : "103368000000025001", "is_default" : true, "type" : "public" } } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
Update Client

Modify client company details in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/clients/[CLIENTID]

OAuth Scope:

ZohoProjects.clients.UPDATE

Parameter

Param Name
Data Type
Description
name

String

max length : 100

Enter the client company name.

webaddress

String

max length : 50

Enter the web address.

address_first

String

max length : 100

Enter address line 1.

address_second

String

max length : 100

Enter address line 2.

city

String

max length : 50

Enter the city.

state

String

Enter the state.

country

String

Enter the country.

zipcode

String

max length : 20

Enter the ZIP Code.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"zas\",\"webaddress\":\"https:\/\/zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002" }

Sample Response

204 No Content
Add Clients

Add clients to the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/clients

OAuth Scope:

ZohoProjects.clients.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 200

Enter the client company name.

webaddress

String

max length : 50

Enter the web address of the client company.

address_first

String

max length : 100

Enter the address.

address_second

String

max length : 100

Enter the address.

city

String

max length : 50

Enter the city name.

state

String

max length : 50

Enter the state name.

country

String

max length : 50

Enter the country name.

zipcode

String

max length : 20

Enter the zip code.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"name\":\"zas\",\"webaddress\":\"https:\/\/zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002" }

Sample Response

200{ "clients" : [ { "zipcode" : "600002", "address_second" : "che", "city" : "chennai", "address_first" : "chennai", "name" : "zas", "id" : "5000000028005", "webaddress" : "https://zas.com" } ] }
Delete Client User

Remove a client user from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/clients/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.clients.DELETE

Parameter

Param Name
Data Type
Description
notify

boolean

Specify whether to notify the user.
Accepted values: True or False

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/users/[ZPUID | EMAILID]?notify="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

204 No Content
Delete Client Company

Remove the client company from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/clients/[CLIENTID]

OAuth Scope:

ZohoProjects.clients.DELETE

Parameter

Param Name
Data Type
Description
notify

boolean

Specify whether to notify the user.
Accepted values: True or False

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]?notify="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

204 No Content
Update Client Projects

Modify the projects associated with client company in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/clients/[CLIENTID]/projects

OAuth Scope:

ZohoProjects.clients.UPDATE

Parameter

Param Name
Data Type
Description
select_all

boolean

Specify whether to select all projects.
Accepted values: true or false.

JSONObject

max length : 200000

Enter the selected project details.

unselected

JSONObject

max length : 200000

Specify the deselected project details.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]/projects' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "select_all" : "-", "selected" : { "group_ids" : "-", "project_ids" : "-" }, "unselected" : { "group_ids" : "-", "project_ids" : "-" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/clients/[CLIENTID]/projects");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"select_all\":\"-\",\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"-\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"-\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "select_all" : "-", "selected" : { "group_ids" : "-", "project_ids" : "-" }, "unselected" : { "group_ids" : "-", "project_ids" : "-" } }

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Associate Clients to Project

Add clients to a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/associate-client

OAuth Scope:

ZohoProjects.clients.CREATE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the client IDs

is_primary_client

boolean

Specify whether the client is a primary client.
Accepted values: True or False

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/associate-client' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'id = "4000000062001"' --form 'is_primary_client = "false"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/associate-client");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""id"", "");
   uriBuilder.addParameter(""is_primary_client"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

id : "4000000062001" is_primary_client : "false"

Sample Response

204 No Content
Project Clients

Get Project Clients

Retrieve details of client companies associated with a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/clients

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
ids

String

Enter client company IDs.

sort

String

Enter the sort order.
E.g. alphabetical:desc

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients?ids="4000000029001"&sort="alphabetical:asc"&page="1"&per_page="10"&"filter"=[{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1AND2"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""ids"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   uriBuilder.addParameter(""filter"", "{"criteria":[{"cfid":"2","api_name":"-","field_name":"-","criteria_condition":"contains","value":"[1752587000000097269]","relative_columns":[{"cfid":"2","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

ids : "4000000029001" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : [ { "criteria" : [ { "cfid" : "2", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : "[1752587000000097269]", "relative_columns" : [ { "cfid" : "2", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ]

Sample Response

200{ "clients" : [ { "zipcode" : "SW1A 2AA", "address_second" : "Downing Street", "country" : "United Kingdom", "is_primary" : true, "city" : "City of Westminster", "zohocrm_account_id" : "1275806000000373065", "address_first" : "10", "name" : "Prime Minister", "id" : "103368000000048925", "state" : "London", "webaddress" : "https://www.gov.uk/" } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "3", "page" : "1" } }
Get Project Client-Wise Users

Retrieve client companies and client users associated with a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/clients/users

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
view_type

int

Enter the view type.
Accepted values: 0 (Inactive), 1 (Active).

sort

String

Enter the sort criteria.
E.g. last_accessed_time:desc

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/users?view_type="date"&sort="alphabetical:asc"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/users");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""view_type"", "");
   uriBuilder.addParameter(""sort"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

view_type : "date" sort : "alphabetical:asc" page : "1" per_page : "10"

Sample Response

200{ "clients" : [ { "is_primary" : true, "zohocrm_account_id" : "1275806000000373065", "name" : "Account 1", "id" : "103368000000048925", "users" : [ { "costRate" : "0.000", "added_time" : "2024-05-07T13:10:27.924Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000000611059", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "0.000", "cost_per_hour" : "0.000", "type" : "none" } }, { "costRate" : "0.000", "added_time" : "2024-05-07T13:30:46.872Z", "is_active" : true, "time_of_request" : "1969-12-31T23:59:59.999Z", "is_confirmed" : false, "profile" : { "name" : "c12", "id" : "103368000000079017", "type" : "3", "is_default" : false }, "last_name" : "Hemswoth", "display_name" : "Monica", "cost_per_hour" : "0.000", "full_name" : "Monica Hemsworth", "user_type" : "2", "id" : "103368000002484148", "invoice" : "0.000", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "status" : "1", "budget" : { "rate_per_hour" : "0.000", "cost_per_hour" : "0.000", "type" : "none" } } ] } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "4", "total_clients" : "3", "total_contacts" : "0", "page" : "1", "total_users" : "3" } }
Get CRM Accounts of a Project

Retrieve CRM accounts associated with a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/crm/accounts

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/accounts?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/accounts");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "accounts" : [ { "client_company" : { "name" : "Whitehall", "id" : "103368000001263019" }, "name" : "Prime Minister", "id" : "1275806000001238157" } ], "info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
Get CRM Deals Associated with a Project

Retrieve CRM deals associated with a project in the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/crm/deals

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/deals?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/deals");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "deals" : [ { "owner" : { "name" : "Monica Hemsworth", "id" : "1275806000000368001", "email" : "monica.hemsworth@zylker.com" }, "name" : "Tomato Supplier", "id" : "1275806000001287027", "account" : { "name" : "Prime Minister", "id" : "1275806000001238157" } } ], "info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
Get CRM Contacts of a Project

Retrieve CRM contacts associated with a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/crm/contacts

OAuth Scope:

ZohoProjects.clients.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/contacts?page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/crm/contacts");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "contacts" : "[]", "info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
Update Primary Client

Update the primary client of a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/primary-client/[PRIMARY-CLIENTID]

OAuth Scope:

ZohoProjects.clients.UPDATE

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/primary-client/[PRIMARY-CLIENTID]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/primary-client/[PRIMARY-CLIENTID]");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

204 No Content
Delete Client User From Project

Remove a client user from the project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/clients/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.clients.DELETE

Parameter

Param Name
Data Type
Description
notify

boolean

Specify whether to notify the user.
Accepted values: True or False

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/users/[ZPUID | EMAILID]?notify="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/users/[ZPUID | EMAILID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

204 No Content
Delete Client Company From Project

Remove a client company from the project.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/clients/[CLIENTID]

OAuth Scope:

ZohoProjects.clients.DELETE

Parameter

Param Name
Data Type
Description
notify

boolean

Specify whether to notify the user.
Accepted values: True or False

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/[CLIENTID]?notify="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/projects/"1752587000000097024"/clients/[CLIENTID]");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   uriBuilder.addParameter(""notify"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

notify : "true"

Sample Response

204 No Content
Module Meta

This module covers operations related to the configuration and customization of modules within Zoho Projects. Use this API to manage layouts, sections, fields, and options for various modules.

Get Field Info for a Module

Retrieve information of all fields from a module.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/fields

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/module/[MODULEID]/fields' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/module/[MODULEID]/fields");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Response

200{ "fields" : [ { "api_name" : "teams", "id" : "4000000000173", "display_name" : "zp.groups.associatedteams", "type" : "teampicklist" } ] }
Modules

This module covers operations related to managing modules within Zoho Projects. Use this API to retrieve lists of modules and their configuration details.

Get Module List

Retrieve a list of modules from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/settings/modules

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description

JSONObject

Enter the filter criteria.

index

int

Enter the index of the record

range

int

Enter the range of the record

page

int

required

Enter the page number.

per_page

int

required

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/modules?"filter"=[{"is_customized":"-","is_default":"-","is_web_tab":"-"}]&index="1"&range="100"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/modules");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""filter"", "{"is_customized":"-","is_default":"-","is_web_tab":"-"}");
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

"filter" : [ { "is_customized" : "-", "is_default" : "-", "is_web_tab" : "-" } ] index : "1" range : "100" page : "1" per_page : "10"

Sample Response

200[ { "singular_name" : "Task", "is_all_profiles" : true, "api_name" : "Task", "is_all_projects" : true, "id" : "9000000000134", "type" : "DEFAULT", "status" : "ACTIVE" }, { "singular_name" : "Issues", "is_all_profiles" : true, "api_name" : "Issue", "is_all_projects" : true, "id" : "9000000000137", "type" : "DEFAULT", "status" : "ACTIVE" } ]
Module Fields

This module covers operations related to the management of fields within Zoho Projects modules. Use this API to retrieve field details, create or update fields, delete fields, and associate fields with layouts.

Get Field Info for a Module

Retrieve information of all fields from a module

GET

/api/v3/portal/[PORTALID]/settings/fields

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module name or ID

JSONObject

Filter the fields based on layout or project or field names or field ids

index

int

Enter the index of the fields

range

int

Enter the range of the fields

page

int

required

Enter the page number.

per_page

int

required

Enter the number of entries to be displayed per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/fields?module="Projects"&"filter"=[{"is_mandatory":"-","is_renamed":"-","is_default":"-","is_unassociated":"-","is_association_info_needed":"-","layout_id":"4000003211234","project_id":"4009238123434","field_ids":"-","fields":"-"}]&index="1"&range="100"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/settings/fields");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""module"", "");
   uriBuilder.addParameter(""filter"", "{"is_mandatory":"-","is_renamed":"-","is_default":"-","is_unassociated":"-","is_association_info_needed":"-","layout_id":"4000003211234","project_id":"4009238123434","field_ids":"-","fields":"-"}");
   uriBuilder.addParameter(""index"", "");
   uriBuilder.addParameter(""range"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

module : "Projects" "filter" : [ { "is_mandatory" : "-", "is_renamed" : "-", "is_default" : "-", "is_unassociated" : "-", "is_association_info_needed" : "-", "layout_id" : "4000003211234", "project_id" : "4009238123434", "field_ids" : "-", "fields" : "-" } ] index : "1" range : "100" page : "1" per_page : "10"

Sample Response

200{ }
Automation

This module covers task automation related operations within Zoho Projects. Use this API to configure and manage automation features such as Blueprints, Custom Functions, Webhooks, Workflow Rules, Email Templates, Email Alerts, and Macro Rules.

Blueprints

This module covers blueprint related operations within Zoho Projects. Use this API to create, update, delete, or retrieve blueprints, manage graph data, save drafts, and execute transitions for task automation.

Get Blueprints List

Retrieve details of all blueprints from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/automation/blueprints

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
module_name

String

required

Enter the module name. Accepted value: Task

page

int

Enter the page number.

per_page

int

Enter the number of entries to display per page.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprints?module_name="Task"&page="1"&per_page="10"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprints");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""module_name"", "");
   uriBuilder.addParameter(""page"", "");
   uriBuilder.addParameter(""per_page"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

module_name : "Task" page : "1" per_page : "10"

Sample Response

200{ "blueprints" : [ { "is_enabled" : true, "sequence" : 3, "created_time" : "2024-07-04T08:20:29.593Z", "modified_time" : "2024-07-18T02:35:46.878Z", "has_drafted" : true, "is_published" : true, "name" : "remove", "modified_by" : { "zpuid" : "11000000002143", "full_name" : "Goku Gohan", "name" : "ver8", "last_name" : "Gohan", "id" : "18886299", "is_client_user" : false, "first_name" : "Goku", "email" : "ajay.nelson+ver8@zohotest.com" }, "id" : "11000000329033", "created_by" : { "zpuid" : "11000000002143", "full_name" : "Goku Gohan", "name" : "ver8", "last_name" : "Gohan", "id" : "18886299", "is_client_user" : false, "first_name" : "Goku", "email" : "ajay.nelson+ver8@zohotest.com" }, "layout_details" : [ { "layout_id" : "11000000012001", "layout_name" : "Digital Marketing" } ] } ], "page_info" : { "per_page" : "1000", "has_next_page" : "false", "count" : "12", "page" : "1" } }
Get next transitions

Retrieve actions that are set to execute after transition.

GET

/api/v3/portal/[PORTALID]/automation/blueprint/next-transitions

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
entity_id

long

required

Enter the entity ID.

module_name

String

required

Enter the module name. Accepted value: Task

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/next-transitions?entity_id="11000000000371"&module_name="Task"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/next-transitions");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""entity_id"", "");
   uriBuilder.addParameter(""module_name"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

entity_id : "11000000000371" module_name : "Task"
Get Transition During Data

Retrieve data of the action that is set to execute during the transition.

GET

/api/v3/portal/[PORTALID]/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
entity_id

long

required

Enter the entity ID.

skip_bug_validation

boolean

Specify whether to skip bug validation.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions?entity_id="11000000000371"&skip_bug_validation="true"' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""entity_id"", "");
   uriBuilder.addParameter(""skip_bug_validation"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

entity_id : "11000000000371" skip_bug_validation : "true"

Sample Response

200{ "fields" : [ { "during_field_type" : "0", "field_value" : [ { "id" : 93028000000213001, "value" : "Server Team" } ], "is_mandatory" : false, "is_prefill_value" : true, "field_property" : { "is_associated" : true, "is_removable" : true, "is_encrypted" : false, "is_custom_edit" : false, "column_name" : "GROUP_NAME", "is_editable" : false, "is_default_field" : false, "is_resolution" : false, "display_name" : "zp.groups.associatedteams", "is_default" : true, "field_properties" : { }, "is_default_unassociated" : false, "min_char" : 0, "cfid" : "93028000000045001", "is_editform_only" : false, "is_pii" : false, "api_name" : "teams", "field_type_integer" : 13, "max_char" : 0, "data_type_integer" : 11, "field_type" : "multiuserpicklist" }, "id" : "93028000000045001" } ] }
Execute Blueprint Transition

Execute transition in a blueprint.

POST

/api/v3/portal/[PORTALID]/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute

OAuth Scope:

ZohoProjects.tasks.READ

Parameter

Param Name
Data Type
Description
entity_id

long

required

Enter the entity ID.

skip_bug_validation

boolean

Specify whether to skip bug validation.

field_values

JSONArray

array size : 0-200

Enter the field values to update during the transition.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "entity_id" : "11000000000371", "skip_bug_validation" : "true", "field_values" : [ { "id" : "11000000000371", "value" : [ 1752587000000097269 ], "is_days" : "true", "attachment_ids" : [ "12345678987654321" ] } ] }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "entity_id" : "11000000000371", "skip_bug_validation" : "true", "field_values" : [ { "id" : "11000000000371", "value" : [ 1752587000000097269 ], "is_days" : "true", "attachment_ids" : [ "12345678987654321" ] } ] }

Sample Response

204 No Content

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Custom Functions

This module covers custom function related operations within Zoho Projects. Use this API to create, update, delete, or retrieve custom functions, manage gallery functions, execute custom functions, and enable or disable REST API for functions.

Execute a Custom Function

Execute a custom function in the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/automation/customfunction/[CUSTOMFUNCTIONID]/execute

OAuth Scope:

ZohoProjects.custom_functions.custom

Parameter

Param Name
Data Type
Description
Custom Parameter

String

limit : 25

Enter additional parameters and values.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/customfunction/"1752587000000097260"/execute' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' --form 'Custom Parameter = " custom values"'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/automation/customfunction/"1752587000000097260"/execute");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   uriBuilder.addParameter(""entity_id"", "");
   uriBuilder.addParameter(""project_id"", "");
   uriBuilder.addParameter(""module_name"", "");
   uriBuilder.addParameter(""Custom Parameter"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Custom Parameter : " custom values"

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Setup

This module covers setup-related operations within Zoho Projects. Use this API to manage task dependency settings, update user preferences for email notifications, and adjust portal user properties.

Marketplace

This module covers marketplace related operations within Zoho Projects. Use this API to retrieve extension details, update notification statuses, and manage running or available extensions.

Store Property

Store all the entity or app properties of the extension.

POST

/api/v3/portal/[PORTALID]/extensions/[EXTENSIONID]/storage

OAuth Scope:

ZohoProjects.extensions.CREATE

Parameter

Param Name
Data Type
Description
key

String

required
max length : 255

Enter the property key.

value

String

required
max length : 2000

Enter the value to store.

type

String

required

Enter the extension type. Accepted values: entity or app.

JSONObject

max length : 500

Enter the entity details if the type is entity.

count

int

Enter the number of occurrences.

Request Example

curl -X POST 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "key" : "all", "value" : "[1752587000000097269]", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" }, "count" : "20" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage");
   HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"key\":\"all\",\"value\":\"[1752587000000097269]\",\"type\":\"Task\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "key" : "all", "value" : "[1752587000000097269]", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" }, "count" : "20" }

Sample Response

204 No Content
Get Property

Retrieve all entity or app properties from an extension.

GET

/api/v3/portal/[PORTALID]/extensions/[EXTENSIONID]/storage

OAuth Scope:

ZohoProjects.extensions.READ

Query Parameter

Param Name
Data Type
Description
key

String

required

Enter the property key.

type

String

required

Enter the property type. Accepted values: entity or app.

JSONObject

Enter the entity details if the type is entity.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage?key="all"&type="Task"&"entity"=[{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}]' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""key"", "");
   uriBuilder.addParameter(""type"", "");
   uriBuilder.addParameter(""entity"", "{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

key : "all" type : "Task" "entity" : [ { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" } ]

Sample Response

200{ "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "6", "page" : "1" }, "properties" : [ { "entity_type" : "1", "count" : 1, "id" : "4000000010013", "entity_id" : "4000000005572", "value" : "[{\"ListID\":\"74c91d3636\",\"value\":\"app property\",\"view\":\"fullView\",\"templateId\":\"12345678\"}]", "key" : "store_entity_property" } ] }
Update Property

Modify the entity or app property in an extension.

PATCH

/api/v3/portal/[PORTALID]/extensions/[EXTENSIONID]/storage

OAuth Scope:

ZohoProjects.extensions.UPDATE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the property ID.

value

String

required
max length : 2000

Enter the new value.

type

String

required

Enter the property type. Accepted values: entity or app.

JSONObject

Enter the entity details if the type is entity.

count

int

Enter the number of occurrences.

Request Example

curl -X PATCH 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "id" : "4000000062001", "value" : "[1752587000000097269]", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" }, "count" : "20" }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage");
   HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"id\":\"4000000062001\",\"value\":\"[1752587000000097269]\",\"type\":\"Task\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "id" : "4000000062001", "value" : "[1752587000000097269]", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" }, "count" : "20" }

Sample Response

204 No Content
Delete Property

Remove the entity or app property from the extension.

DELETE

/api/v3/portal/[PORTALID]/extensions/[EXTENSIONID]/storage

OAuth Scope:

ZohoProjects.extensions.DELETE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the property ID.

type

String

required

Enter the property type. Accepted values: entity or app.

JSONObject

Enter entity details if the type is entity.

Request Example

curl -X DELETE 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' -H 'Content-Type: application/json' -d '{ "id" : "4000000062001", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" } }'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/storage");
   HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
   HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
   String requestBody = "{\"id\":\"4000000062001\",\"type\":\"Task\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}";
   requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

Content-Type: application/json
{ "id" : "4000000062001", "type" : "Task", "entity" : { "id" : "4000000062001", "type" : "Task", "project_id" : "23806000097545166" } }

Sample Response

204 No Content
Get Extension Configuration

Retrieve the configuration of the extension.

GET

/api/v3/portal/[PORTALID]/extensions/[EXTENSIONID]/config

OAuth Scope:

ZohoProjects.extensions.READ

Query Parameter

Param Name
Data Type
Description
authorize_level

String

Specify the configuration level. Accepted values: user or organization.

Request Example

curl -X GET 'https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/config?authorize_level=-' -H 'Authorization : Zoho-oauthtoken 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'


   HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

   SSLContext sslContext = SSLContext.getDefault();
   SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
   CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();

   URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/"739121528"/extensions/[EXTENSIONID]/config");
   HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
   uriBuilder.addParameter(""authorize_level"", "");
   requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
   HttpResponse response = httpclient.execute(requestObj);

   HttpEntity responseEntity = response.getEntity();
   Object responseObject = EntityUtils.toString(responseEntity);
   String responseString = responseObject.toString();

Sample Input

authorize_level : -

Sample Response

200{ "configs" : "[]" }